sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/networking/kapimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/networking/kapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/networking/kapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/networking/kapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/networking/kapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/networking/kapimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h)Linux Networking and Network Devices APIsh]h)Linux Networking and Network Devices APIs}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh=/var/lib/git/docbuild/linux/Documentation/networking/kapi.rsthKubh)}(hhh](h)}(hLinux Networkingh]hLinux Networking}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hNetworking Base Typesh]hNetworking Base Types}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlesock_type (C enum) c.sock_typehNtauh1hhhhhhNhNubhdesc)}(hhh](hdesc_signature)}(h sock_typeh]hdesc_signature_line)}(henum sock_typeh](hdesc_sig_keyword)}(henumh]henum}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1j hhhhhj hKubh desc_name)}(h sock_typeh]h desc_sig_name)}(hhh]h sock_type}(hj&hhhNhNubah}(h]h ]nah"]h$]h&]uh1j$hj ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhhhhhj hKubeh}(h]h ]h"]h$]h&]j<j= add_permalinkuh1hsphinx_line_type declaratorhhhhhj hKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhj hKhhhhubh desc_content)}(hhh]h paragraph)}(h Socket typesh]h Socket types}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK1hjThhubah}(h]h ]h"]h$]h&]uh1jRhhhhhj hKubeh}(h]h ](cenumeh"]h$]h&]domainjqobjtypejrdesctypejrnoindex noindexentrynocontentsentryuh1hhhhhhNhNubh container)}(hX**Constants** ``SOCK_STREAM`` stream (connection) socket ``SOCK_DGRAM`` datagram (conn.less) socket ``SOCK_RAW`` raw socket ``SOCK_RDM`` reliably-delivered message ``SOCK_SEQPACKET`` sequential packet socket ``SOCK_DCCP`` Datagram Congestion Control Protocol socket ``SOCK_PACKET`` linux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level.h](jX)}(h **Constants**h]hstrong)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK5hj~ubhdefinition_list)}(hhh](hdefinition_list_item)}(h+``SOCK_STREAM`` stream (connection) socket h](hterm)}(h``SOCK_STREAM``h]hliteral)}(hjh]h SOCK_STREAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK8hjubh definition)}(hhh]jX)}(hstream (connection) socketh]hstream (connection) socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h+``SOCK_DGRAM`` datagram (conn.less) socket h](j)}(h``SOCK_DGRAM``h]j)}(hjh]h SOCK_DGRAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK;hjubj)}(hhh]jX)}(hdatagram (conn.less) socketh]hdatagram (conn.less) socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubj)}(h``SOCK_RAW`` raw socket h](j)}(h ``SOCK_RAW``h]j)}(hj!h]hSOCK_RAW}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK>hjubj)}(hhh]jX)}(h raw socketh]h raw socket}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hK>hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hK>hjubj)}(h(``SOCK_RDM`` reliably-delivered message h](j)}(h ``SOCK_RDM``h]j)}(hjZh]hSOCK_RDM}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKAhjTubj)}(hhh]jX)}(hreliably-delivered messageh]hreliably-delivered message}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjohKAhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohKAhjubj)}(h,``SOCK_SEQPACKET`` sequential packet socket h](j)}(h``SOCK_SEQPACKET``h]j)}(hjh]hSOCK_SEQPACKET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKDhjubj)}(hhh]jX)}(hsequential packet socketh]hsequential packet socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjubj)}(h:``SOCK_DCCP`` Datagram Congestion Control Protocol socket h](j)}(h ``SOCK_DCCP``h]j)}(hjh]h SOCK_DCCP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKGhjubj)}(hhh]jX)}(h+Datagram Congestion Control Protocol socketh]h+Datagram Congestion Control Protocol socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKGhjubj)}(h``SOCK_PACKET`` linux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level.h](j)}(h``SOCK_PACKET``h]j)}(hjh]h SOCK_PACKET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKJhjubj)}(hhh]jX)}(htlinux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level.h]htlinux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKJhjubeh}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hhhhhNhNubjX)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKMhhhhubjX)}(hWhen adding some new socket type please grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS overrides this enum for binary compat reasons.h]hWhen adding some new socket type please grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS overrides this enum for binary compat reasons.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK:hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_shutdown_cmd (C enum)c.sock_shutdown_cmdhNtauh1hhhhhhNhNubh)}(hhh](h)}(hsock_shutdown_cmdh]h)}(henum sock_shutdown_cmdh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKAubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKAubj)}(hsock_shutdown_cmdh]j%)}(hjh]hsock_shutdown_cmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKAubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj}hhhjhKAubah}(h]jxah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKAhjzhhubjS)}(hhh]jX)}(hShutdown typesh]hShutdown types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKWhjhhubah}(h]h ]h"]h$]h&]uh1jRhjzhhhjhKAubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhhhNhNubj})}(h**Constants** ``SHUT_RD`` shutdown receptions ``SHUT_WR`` shutdown transmissions ``SHUT_RDWR`` shutdown receptions/transmissionsh](jX)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK[hjubj)}(hhh](j)}(h ``SHUT_RD`` shutdown receptions h](j)}(h ``SHUT_RD``h]j)}(hjh]hSHUT_RD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK^hjubj)}(hhh]jX)}(hshutdown receptionsh]hshutdown receptions}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK^hjubj)}(h#``SHUT_WR`` shutdown transmissions h](j)}(h ``SHUT_WR``h]j)}(hjAh]hSHUT_WR}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKahj;ubj)}(hhh]jX)}(hshutdown transmissionsh]hshutdown transmissions}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhKahjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhKahjubj)}(h/``SHUT_RDWR`` shutdown receptions/transmissionsh](j)}(h ``SHUT_RDWR``h]j)}(hjzh]h SHUT_RDWR}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKchjtubj)}(hhh]jX)}(h!shutdown receptions/transmissionsh]h!shutdown receptions/transmissions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKdhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKchjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsocket (C struct)c.sockethNtauh1hhhhhhNhNubh)}(hhh](h)}(hsocketh]h)}(h struct socketh](h)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKiubj)}(hsocketh]j%)}(hjh]hsocket}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKiubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKiubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKihjhhubjS)}(hhh]jX)}(hgeneral BSD socketh]hgeneral BSD socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKkhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKiubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhhhNhNubj})}(hXg**Definition**:: struct socket { socket_state state; short type; unsigned long flags; struct file *file; struct sock *sk; const struct proto_ops *ops; struct socket_wq wq; }; **Members** ``state`` socket state (``SS_CONNECTED``, etc) ``type`` socket type (``SOCK_STREAM``, etc) ``flags`` socket flags (``SOCK_NOSPACE``, etc) ``file`` File back pointer for gc ``sk`` internal networking protocol agnostic socket representation ``ops`` protocol specific socket operations ``wq`` wait queue for several usesh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKohj3ubh literal_block)}(hstruct socket { socket_state state; short type; unsigned long flags; struct file *file; struct sock *sk; const struct proto_ops *ops; struct socket_wq wq; };h]hstruct socket { socket_state state; short type; unsigned long flags; struct file *file; struct sock *sk; const struct proto_ops *ops; struct socket_wq wq; };}hjVsbah}(h]h ]h"]h$]h&]j<j=uh1jThS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKqhj3ubjX)}(h **Members**h]j)}(hjgh]hMembers}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhK{hj3ubj)}(hhh](j)}(h/``state`` socket state (``SS_CONNECTED``, etc) h](j)}(h ``state``h]j)}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKmhjubj)}(hhh]jX)}(h$socket state (``SS_CONNECTED``, etc)h](hsocket state (}(hjhhhNhNubj)}(h``SS_CONNECTED``h]h SS_CONNECTED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, etc)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKmhj}ubj)}(h,``type`` socket type (``SOCK_STREAM``, etc) h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKnhjubj)}(hhh]jX)}(h"socket type (``SOCK_STREAM``, etc)h](h socket type (}(hjhhhNhNubj)}(h``SOCK_STREAM``h]h SOCK_STREAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, etc)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhj}ubj)}(h/``flags`` socket flags (``SOCK_NOSPACE``, etc) h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKohjubj)}(hhh]jX)}(h$socket flags (``SOCK_NOSPACE``, etc)h](hsocket flags (}(hj5hhhNhNubj)}(h``SOCK_NOSPACE``h]h SOCK_NOSPACE}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh, etc)}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj1hKohj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKohj}ubj)}(h"``file`` File back pointer for gc h](j)}(h``file``h]j)}(hjgh]hfile}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKqhjaubj)}(hhh]jX)}(hFile back pointer for gch]hFile back pointer for gc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hKqhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKqhj}ubj)}(hC``sk`` internal networking protocol agnostic socket representation h](j)}(h``sk``h]j)}(hjh]hsk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKrhjubj)}(hhh]jX)}(h;internal networking protocol agnostic socket representationh]h;internal networking protocol agnostic socket representation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKrhj}ubj)}(h,``ops`` protocol specific socket operations h](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKphjubj)}(hhh]jX)}(h#protocol specific socket operationsh]h#protocol specific socket operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKphj}ubj)}(h"``wq`` wait queue for several usesh](j)}(h``wq``h]j)}(hjh]hwq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKrhj ubj)}(hhh]jX)}(hwait queue for several usesh]hwait queue for several uses}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:11: ./include/linux/net.hhKshj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKrhj}ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hhhhhNhNubeh}(h]networking-base-typesah ]h"]networking base typesah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hSocket Buffer Functionsh]hSocket Buffer Functions}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_size (C function)c.skb_frag_sizehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3unsigned int skb_frag_size (const skb_frag_t *frag)h]h)}(h2unsigned int skb_frag_size(const skb_frag_t *frag)h](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMpubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMpubj)}(h skb_frag_sizeh]j%)}(h skb_frag_sizeh]h skb_frag_size}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMpubhdesc_parameterlist)}(h(const skb_frag_t *frag)h]hdesc_parameter)}(hconst skb_frag_t *fragh](h)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.skb_frag_sizeasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubhdesc_sig_punctuation)}(h*h]h*}(hj<hhhNhNubah}(h]h ]pah"]h$]h&]uh1j:hjubj%)}(hfragh]hfrag}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMpubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj}hhhjhMpubah}(h]jxah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMphjzhhubjS)}(hhh]jX)}(h"Returns the size of a skb fragmenth]h"Returns the size of a skb fragment}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMphjrhhubah}(h]h ]h"]h$]h&]uh1jRhjzhhhjhMpubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h9**Parameters** ``const skb_frag_t *frag`` skb fragmenth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMthjubj)}(hhh]j)}(h'``const skb_frag_t *frag`` skb fragmenth](j)}(h``const skb_frag_t *frag``h]j)}(hjh]hconst skb_frag_t *frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMvhjubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_size_set (C function)c.skb_frag_size_sethNtauh1hhj[hhhNhNubh)}(hhh](h)}(hh]h*}(hj~ hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjI ubj%)}(hfragh]hfrag}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE ubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMyubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMyhj hhubjS)}(hhh]jX)}(hSets the size of a skb fragmenth]hSets the size of a skb fragment}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMyhj hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(h]**Parameters** ``skb_frag_t *frag`` skb fragment ``unsigned int size`` size of fragmenth](jX)}(h**Parameters**h]j)}(hj( h]h Parameters}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj& ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM}hj" ubj)}(hhh](j)}(h"``skb_frag_t *frag`` skb fragment h](j)}(h``skb_frag_t *frag``h]j)}(hjG h]hskb_frag_t *frag}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMzhjA ubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\ hMzhj] ubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1jhj\ hMzhj> ubj)}(h&``unsigned int size`` size of fragmenth](j)}(h``unsigned int size``h]j)}(hj h]hunsigned int size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM|hjz ubj)}(hhh]jX)}(hsize of fragmenth]hsize of fragment}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM{hj ubah}(h]h ]h"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]uh1jhj hM|hj> ubeh}(h]h ]h"]h$]h&]uh1jhj" ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_size_add (C function)c.skb_frag_size_addhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4void skb_frag_size_add (skb_frag_t *frag, int delta)h]h)}(h3void skb_frag_size_add(skb_frag_t *frag, int delta)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hskb_frag_size_addh]j%)}(hskb_frag_size_addh]hskb_frag_size_add}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMubj)}(h(skb_frag_t *frag, int delta)h](j)}(hskb_frag_t *fragh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.skb_frag_size_addasbuh1hhj ubj)}(h h]h }(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjH hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hfragh]hfrag}(hjU hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int deltah](j)}(hinth]hint}(hjn hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj ubj)}(h h]h }(hj| hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj ubj%)}(hdeltah]hdelta}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhj hhubjS)}(hhh]jX)}(h2Increments the size of a skb fragment by **delta**h](h)Increments the size of a skb fragment by }(hj hhhNhNubj)}(h **delta**h]hdelta}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(hQ**Parameters** ``skb_frag_t *frag`` skb fragment ``int delta`` value to addh](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubj)}(hhh](j)}(h"``skb_frag_t *frag`` skb fragment h](j)}(h``skb_frag_t *frag``h]j)}(hj h]hskb_frag_t *frag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``int delta`` value to addh](j)}(h ``int delta``h]j)}(hj< h]h int delta}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj6 ubj)}(hhh]jX)}(h value to addh]h value to add}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1jhjQ hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_size_sub (C function)c.skb_frag_size_subhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4void skb_frag_size_sub (skb_frag_t *frag, int delta)h]h)}(h3void skb_frag_size_sub(skb_frag_t *frag, int delta)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hskb_frag_size_subh]j%)}(hskb_frag_size_subh]hskb_frag_size_sub}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMubj)}(h(skb_frag_t *frag, int delta)h](j)}(hskb_frag_t *fragh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.skb_frag_size_subasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hfragh]hfrag}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int deltah](j)}(hinth]hint}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj& ubj)}(h h]h }(hj8 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj& ubj%)}(hdeltah]hdelta}(hjF hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj& ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhj hhubjS)}(hhh]jX)}(h2Decrements the size of a skb fragment by **delta**h](h)Decrements the size of a skb fragment by }(hjp hhhNhNubj)}(h **delta**h]hdelta}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjm hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(hV**Parameters** ``skb_frag_t *frag`` skb fragment ``int delta`` value to subtracth](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubj)}(hhh](j)}(h"``skb_frag_t *frag`` skb fragment h](j)}(h``skb_frag_t *frag``h]j)}(hj h]hskb_frag_t *frag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h``int delta`` value to subtracth](j)}(h ``int delta``h]j)}(hj h]h int delta}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubj)}(hhh]jX)}(hvalue to subtracth]hvalue to subtract}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_must_loop (C function)c.skb_frag_must_loophNtauh1hhj[hhhNhNubh)}(hhh](h)}(h(bool skb_frag_must_loop (struct page *p)h]h)}(h'bool skb_frag_must_loop(struct page *p)h](j)}(hboolh]hbool}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNhhhj`hMubj)}(hskb_frag_must_looph]j%)}(hskb_frag_must_looph]hskb_frag_must_loop}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjNhhhj`hMubj)}(h(struct page *p)h]j)}(hstruct page *ph](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjusbc.skb_frag_must_loopasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjGh]hp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjJhhhj`hMubah}(h]jEah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj`hMhjGhhubjS)}(hhh]jX)}(h#Test if ``p`` is a high memory pageh](hTest if }(hjhhhNhNubj)}(h``p``h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is a high memory page}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhj`hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;jxj;jyjzj{uh1hhhhj[hNhNubj})}(h4**Parameters** ``struct page *p`` fragment's pageh](jX)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj?ubj)}(hhh]j)}(h"``struct page *p`` fragment's pageh](j)}(h``struct page *p``h]j)}(hjdh]hstruct page *p}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj^ubj)}(hhh]jX)}(hfragment's pageh]hfragment’s page}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_foreach_page (C macro)c.skb_frag_foreach_pagehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hskb_frag_foreach_pageh]h)}(hskb_frag_foreach_pageh]j)}(hskb_frag_foreach_pageh]j%)}(hjh]hskb_frag_foreach_page}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubah}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubjX)}(hD``skb_frag_foreach_page (f, f_off, f_len, p, p_off, p_len, copied)``h]j)}(hjh]h@skb_frag_foreach_page (f, f_off, f_len, p, p_off, p_len, copied)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj[hhubh block_quote)}(hloop over pages in a fragment h]jX)}(hloop over pages in a fragmenth]hloop over pages in a fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubah}(h]h ]h"]h$]h&]uh1j hjhMhj[hhubj})}(hXA**Parameters** ``f`` skb frag to operate on ``f_off`` offset from start of f->netmem ``f_len`` length from f_off to loop over ``p`` (temp var) current page ``p_off`` (temp var) offset from start of current page, non-zero only on first page. ``p_len`` (temp var) length in current page, < PAGE_SIZE only on first and last page. ``copied`` (temp var) length so far, excluding current p_len. **Description** A fragment can hold a compound page, in which case per-page operations, notably kmap_atomic, must be called for each regular page.h](jX)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj%ubj)}(hhh](j)}(h``f`` skb frag to operate on h](j)}(h``f``h]j)}(hjJh]hf}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjDubj)}(hhh]jX)}(hskb frag to operate onh]hskb frag to operate on}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h)``f_off`` offset from start of f->netmem h](j)}(h ``f_off``h]j)}(hjh]hf_off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj}ubj)}(hhh]jX)}(hoffset from start of f->netmemh]hoffset from start of f->netmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubj)}(h)``f_len`` length from f_off to loop over h](j)}(h ``f_len``h]j)}(hjh]hf_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hlength from f_off to loop overh]hlength from f_off to loop over}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubj)}(h``p`` (temp var) current page h](j)}(h``p``h]j)}(hjh]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h(temp var) current pageh]h(temp var) current page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjAubj)}(hU``p_off`` (temp var) offset from start of current page, non-zero only on first page. h](j)}(h ``p_off``h]j)}(hj.h]hp_off}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj(ubj)}(hhh]jX)}(hJ(temp var) offset from start of current page, non-zero only on first page.h]hJ(temp var) offset from start of current page, non-zero only on first page.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjAubj)}(hV``p_len`` (temp var) length in current page, < PAGE_SIZE only on first and last page. h](j)}(h ``p_len``h]j)}(hjhh]hp_len}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjbubj)}(hhh]jX)}(hK(temp var) length in current page, < PAGE_SIZE only on first and last page.h]hK(temp var) length in current page, < PAGE_SIZE only on first and last page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjAubj)}(h>``copied`` (temp var) length so far, excluding current p_len. h](j)}(h ``copied``h]j)}(hjh]hcopied}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h2(temp var) length so far, excluding current p_len.h]h2(temp var) length so far, excluding current p_len.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj%ubj )}(hA fragment can hold a compound page, in which case per-page operations, notably kmap_atomic, must be called for each regular page.h]jX)}(hA fragment can hold a compound page, in which case per-page operations, notably kmap_atomic, must be called for each regular page.h]hA fragment can hold a compound page, in which case per-page operations, notably kmap_atomic, must be called for each regular page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_shared_hwtstamps (C struct)c.skb_shared_hwtstampshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hskb_shared_hwtstampsh]h)}(hstruct skb_shared_hwtstampsh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhj9hMubj)}(hskb_shared_hwtstampsh]j%)}(hj&h]hskb_shared_hwtstamps}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj(hhhj9hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$hhhj9hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9hMhj!hhubjS)}(hhh]jX)}(hhardware time stampsh]hhardware time stamps}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjkhhubah}(h]h ]h"]h$]h&]uh1jRhj!hhhj9hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Definition**:: struct skb_shared_hwtstamps { union { ktime_t hwtstamp; void *netdev_data; }; }; **Members** ``{unnamed_union}`` anonymous ``hwtstamp`` hardware time stamp transformed into duration since arbitrary point in time ``netdev_data`` address/cookie of network device driver used as reference to actual hardware time stamph](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjU)}(hhstruct skb_shared_hwtstamps { union { ktime_t hwtstamp; void *netdev_data; }; };h]hhstruct skb_shared_hwtstamps { union { ktime_t hwtstamp; void *netdev_data; }; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hY``hwtstamp`` hardware time stamp transformed into duration since arbitrary point in time h](j)}(h ``hwtstamp``h]j)}(hjh]hhwtstamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hKhardware time stamp transformed into duration since arbitrary point in timeh]hKhardware time stamp transformed into duration since arbitrary point in time}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(hg``netdev_data`` address/cookie of network device driver used as reference to actual hardware time stamph](j)}(h``netdev_data``h]j)}(hjNh]h netdev_data}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjHubj)}(hhh]jX)}(hWaddress/cookie of network device driver used as reference to actual hardware time stamph]hWaddress/cookie of network device driver used as reference to actual hardware time stamp}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj[hhubjX)}(hMSoftware time stamps generated by ktime_get_real() are stored in skb->tstamp.h]hMSoftware time stamps generated by ktime_get_real() are stored in skb->tstamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj[hhubjX)}(hLhwtstamps can only be compared against other hwtstamps from the same device.h]hLhwtstamps can only be compared against other hwtstamps from the same device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj[hhubjX)}(huThis structure is attached to packets as part of the :c:type:`skb_shared_info`. Use skb_hwtstamps() to get a pointer.h](h5This structure is attached to packets as part of the }(hjhhhNhNubh)}(h:c:type:`skb_shared_info`h]j)}(hjh]hskb_shared_info}(hjhhhNhNubah}(h]h ](xrefjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocnetworking/kapi refdomainjqreftypetype refexplicitrefwarnjj!)}j$]sb reftargetskb_shared_infouh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubh'. Use skb_hwtstamps() to get a pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhj[hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_buff (C struct) c.sk_buffhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hsk_buffh]h)}(hstruct sk_buffh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj"hMubj)}(hsk_buffh]j%)}(hjh]hsk_buff}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj"hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"hMhj hhubjS)}(hhh]jX)}(h socket bufferh]h socket buffer}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjThhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj"hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhj[hNhNubj})}(hX'**Definition**:: struct sk_buff { union { struct { struct sk_buff *next; struct sk_buff *prev; union { struct net_device *dev; unsigned long dev_scratch; }; }; struct rb_node rbnode; struct list_head list; struct llist_node ll_node; }; struct sock *sk; union { ktime_t tstamp; u64 skb_mstamp_ns; }; char cb[48] ; union { struct { unsigned long _skb_refdst; void (*destructor)(struct sk_buff *skb); }; struct list_head tcp_tsorted_anchor; #ifdef CONFIG_NET_SOCK_MSG; unsigned long _sk_redir; #endif; }; #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE); unsigned long _nfct; #endif; unsigned int len, data_len; __u16 mac_len, hdr_len; __u16 queue_mapping; #ifdef __BIG_ENDIAN_BITFIELD; #define CLONED_MASK (1 << 7); #else; #define CLONED_MASK 1; #endif; #define CLONED_OFFSET offsetof(struct sk_buff, __cloned_offset); __u8 cloned:1, nohdr:1, fclone:2, peeked:1, head_frag:1, pfmemalloc:1, pp_recycle:1; #ifdef CONFIG_SKB_EXTENSIONS; __u8 active_extensions; #endif; __u8 pkt_type:3; __u8 ignore_df:1; __u8 dst_pending_confirm:1; __u8 ip_summed:2; __u8 ooo_okay:1; __u8 tstamp_type:2; #ifdef CONFIG_NET_XGRESS; __u8 tc_at_ingress:1; __u8 tc_skip_classify:1; #endif; __u8 remcsum_offload:1; __u8 csum_complete_sw:1; __u8 csum_level:2; __u8 inner_protocol_type:1; __u8 l4_hash:1; __u8 sw_hash:1; #ifdef CONFIG_WIRELESS; __u8 wifi_acked_valid:1; __u8 wifi_acked:1; #endif; __u8 no_fcs:1; __u8 encapsulation:1; __u8 encap_hdr_csum:1; __u8 csum_valid:1; #ifdef CONFIG_IPV6_NDISC_NODETYPE; __u8 ndisc_nodetype:2; #endif; #if IS_ENABLED(CONFIG_IP_VS); __u8 ipvs_property:1; #endif; #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || IS_ENABLED(CONFIG_NF_TABLES); __u8 nf_trace:1; #endif; #ifdef CONFIG_NET_SWITCHDEV; __u8 offload_fwd_mark:1; __u8 offload_l3_fwd_mark:1; #endif; __u8 redirected:1; #ifdef CONFIG_NET_REDIRECT; __u8 from_ingress:1; #endif; #ifdef CONFIG_NETFILTER_SKIP_EGRESS; __u8 nf_skip_egress:1; #endif; #ifdef CONFIG_SKB_DECRYPTED; __u8 decrypted:1; #endif; __u8 slow_gro:1; #if IS_ENABLED(CONFIG_IP_SCTP); __u8 csum_not_inet:1; #endif; __u8 unreadable:1; #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS); __u16 tc_index; #endif; u16 alloc_cpu; union { __wsum csum; struct { __u16 csum_start; __u16 csum_offset; }; }; __u32 priority; int skb_iif; __u32 hash; union { u32 vlan_all; struct { __be16 vlan_proto; __u16 vlan_tci; }; }; #if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS); union { unsigned int napi_id; unsigned int sender_cpu; }; #endif; #ifdef CONFIG_NETWORK_SECMARK; __u32 secmark; #endif; union { __u32 mark; __u32 reserved_tailroom; }; union { __be16 inner_protocol; __u8 inner_ipproto; }; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; #ifdef CONFIG_KCOV; u64 kcov_handle; #endif; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head, *data; unsigned int truesize; refcount_t users; #ifdef CONFIG_SKB_EXTENSIONS; struct skb_ext *extensions; #endif; }; **Members** ``{unnamed_union}`` anonymous ``{unnamed_struct}`` anonymous ``next`` Next buffer in list ``prev`` Previous buffer in list ``{unnamed_union}`` anonymous ``dev`` Device we arrived on/are leaving by ``dev_scratch`` (aka **dev**) alternate use of **dev** when **dev** would be ``NULL`` ``rbnode`` RB tree node, alternative to next/prev for netem/tcp ``list`` queue head ``ll_node`` anchor in an llist (eg socket defer_list) ``sk`` Socket we are owned by ``{unnamed_union}`` anonymous ``tstamp`` Time we arrived/left ``skb_mstamp_ns`` (aka **tstamp**) earliest departure time; start point for retransmit timer ``cb`` Control buffer. Free for use by every layer. Put private vars here ``{unnamed_union}`` anonymous ``{unnamed_struct}`` anonymous ``_skb_refdst`` destination entry (with norefcount bit) ``destructor`` Destruct function ``tcp_tsorted_anchor`` list structure for TCP (tp->tsorted_sent_queue) ``_sk_redir`` socket redirection information for skmsg ``_nfct`` Associated connection, if any (with nfctinfo bits) ``len`` Length of actual data ``data_len`` Data length ``mac_len`` Length of link layer header ``hdr_len`` writable header length of cloned skb ``queue_mapping`` Queue mapping for multiqueue devices ``cloned`` Head may be cloned (check refcnt to be sure) ``nohdr`` Payload reference only, must not modify header ``fclone`` skbuff clone status ``peeked`` this packet has been seen already, so stats have been done for it, don't do them again ``head_frag`` skb was allocated from page fragments, not allocated by kmalloc() or vmalloc(). ``pfmemalloc`` skbuff was allocated from PFMEMALLOC reserves ``pp_recycle`` mark the packet for recycling instead of freeing (implies page_pool support on driver) ``active_extensions`` active extensions (skb_ext_id types) ``pkt_type`` Packet class ``ignore_df`` allow local fragmentation ``dst_pending_confirm`` need to confirm neighbour ``ip_summed`` Driver fed us an IP checksum ``ooo_okay`` allow the mapping of a socket to a queue to be changed ``tstamp_type`` When set, skb->tstamp has the delivery_time clock base of skb->tstamp. ``tc_at_ingress`` used within tc_classify to distinguish in/egress ``tc_skip_classify`` do not classify packet. set by IFB device ``remcsum_offload`` remote checksum offload is enabled ``csum_complete_sw`` checksum was completed by software ``csum_level`` indicates the number of consecutive checksums found in the packet minus one that have been verified as CHECKSUM_UNNECESSARY (max 3) ``inner_protocol_type`` whether the inner protocol is ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTO ``l4_hash`` indicate hash is a canonical 4-tuple hash over transport ports. ``sw_hash`` indicates hash was computed in software stack ``wifi_acked_valid`` wifi_acked was set ``wifi_acked`` whether frame was acked on wifi or not ``no_fcs`` Request NIC to treat last 4 bytes as Ethernet FCS ``encapsulation`` indicates the inner headers in the skbuff are valid ``encap_hdr_csum`` software checksum is needed ``csum_valid`` checksum is already valid ``ndisc_nodetype`` router type (from link layer) ``ipvs_property`` skbuff is owned by ipvs ``nf_trace`` netfilter packet trace flag ``offload_fwd_mark`` Packet was L2-forwarded in hardware ``offload_l3_fwd_mark`` Packet was L3-forwarded in hardware ``redirected`` packet was redirected by packet classifier ``from_ingress`` packet was redirected from the ingress path ``nf_skip_egress`` packet shall skip nf egress - see netfilter_netdev.h ``decrypted`` Decrypted SKB ``slow_gro`` state present at GRO time, slower prepare step required ``csum_not_inet`` use CRC32c to resolve CHECKSUM_PARTIAL ``unreadable`` indicates that at least 1 of the fragments in this skb is unreadable. ``tc_index`` Traffic control index ``alloc_cpu`` CPU which did the skb allocation. ``{unnamed_union}`` anonymous ``csum`` Checksum (must include start/offset pair) ``{unnamed_struct}`` anonymous ``csum_start`` Offset from skb->head where checksumming should start ``csum_offset`` Offset from csum_start where checksum should be stored ``priority`` Packet queueing priority ``skb_iif`` ifindex of device we arrived on ``hash`` the packet hash ``{unnamed_union}`` anonymous ``vlan_all`` vlan fields (proto & tci) ``{unnamed_struct}`` anonymous ``vlan_proto`` vlan encapsulation protocol ``vlan_tci`` vlan tag control information ``{unnamed_union}`` anonymous ``napi_id`` id of the NAPI struct this skb came from ``sender_cpu`` (aka **napi_id**) source CPU in XPS ``secmark`` security marking ``{unnamed_union}`` anonymous ``mark`` Generic packet mark ``reserved_tailroom`` (aka **mark**) number of bytes of free space available at the tail of an sk_buff ``{unnamed_union}`` anonymous ``inner_protocol`` Protocol (encapsulation) ``inner_ipproto`` (aka **inner_protocol**) stores ipproto when skb->inner_protocol_type == ENCAP_TYPE_IPPROTO; ``inner_transport_header`` Inner transport layer header (encapsulation) ``inner_network_header`` Network layer header (encapsulation) ``inner_mac_header`` Link layer header (encapsulation) ``protocol`` Packet protocol from driver ``transport_header`` Transport layer header ``network_header`` Network layer header ``mac_header`` Link layer header ``kcov_handle`` KCOV remote handle for remote coverage collection ``tail`` Tail pointer ``end`` End pointer ``head`` Head of buffer ``data`` Data head pointer ``truesize`` Buffer size ``users`` User count - see {datagram,tcp}.c ``extensions`` allocated extensions, valid if active_extensions is nonzeroh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh:}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjsubjU)}(hXstruct sk_buff { union { struct { struct sk_buff *next; struct sk_buff *prev; union { struct net_device *dev; unsigned long dev_scratch; }; }; struct rb_node rbnode; struct list_head list; struct llist_node ll_node; }; struct sock *sk; union { ktime_t tstamp; u64 skb_mstamp_ns; }; char cb[48] ; union { struct { unsigned long _skb_refdst; void (*destructor)(struct sk_buff *skb); }; struct list_head tcp_tsorted_anchor; #ifdef CONFIG_NET_SOCK_MSG; unsigned long _sk_redir; #endif; }; #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE); unsigned long _nfct; #endif; unsigned int len, data_len; __u16 mac_len, hdr_len; __u16 queue_mapping; #ifdef __BIG_ENDIAN_BITFIELD; #define CLONED_MASK (1 << 7); #else; #define CLONED_MASK 1; #endif; #define CLONED_OFFSET offsetof(struct sk_buff, __cloned_offset); __u8 cloned:1, nohdr:1, fclone:2, peeked:1, head_frag:1, pfmemalloc:1, pp_recycle:1; #ifdef CONFIG_SKB_EXTENSIONS; __u8 active_extensions; #endif; __u8 pkt_type:3; __u8 ignore_df:1; __u8 dst_pending_confirm:1; __u8 ip_summed:2; __u8 ooo_okay:1; __u8 tstamp_type:2; #ifdef CONFIG_NET_XGRESS; __u8 tc_at_ingress:1; __u8 tc_skip_classify:1; #endif; __u8 remcsum_offload:1; __u8 csum_complete_sw:1; __u8 csum_level:2; __u8 inner_protocol_type:1; __u8 l4_hash:1; __u8 sw_hash:1; #ifdef CONFIG_WIRELESS; __u8 wifi_acked_valid:1; __u8 wifi_acked:1; #endif; __u8 no_fcs:1; __u8 encapsulation:1; __u8 encap_hdr_csum:1; __u8 csum_valid:1; #ifdef CONFIG_IPV6_NDISC_NODETYPE; __u8 ndisc_nodetype:2; #endif; #if IS_ENABLED(CONFIG_IP_VS); __u8 ipvs_property:1; #endif; #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || IS_ENABLED(CONFIG_NF_TABLES); __u8 nf_trace:1; #endif; #ifdef CONFIG_NET_SWITCHDEV; __u8 offload_fwd_mark:1; __u8 offload_l3_fwd_mark:1; #endif; __u8 redirected:1; #ifdef CONFIG_NET_REDIRECT; __u8 from_ingress:1; #endif; #ifdef CONFIG_NETFILTER_SKIP_EGRESS; __u8 nf_skip_egress:1; #endif; #ifdef CONFIG_SKB_DECRYPTED; __u8 decrypted:1; #endif; __u8 slow_gro:1; #if IS_ENABLED(CONFIG_IP_SCTP); __u8 csum_not_inet:1; #endif; __u8 unreadable:1; #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS); __u16 tc_index; #endif; u16 alloc_cpu; union { __wsum csum; struct { __u16 csum_start; __u16 csum_offset; }; }; __u32 priority; int skb_iif; __u32 hash; union { u32 vlan_all; struct { __be16 vlan_proto; __u16 vlan_tci; }; }; #if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS); union { unsigned int napi_id; unsigned int sender_cpu; }; #endif; #ifdef CONFIG_NETWORK_SECMARK; __u32 secmark; #endif; union { __u32 mark; __u32 reserved_tailroom; }; union { __be16 inner_protocol; __u8 inner_ipproto; }; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; #ifdef CONFIG_KCOV; u64 kcov_handle; #endif; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head, *data; unsigned int truesize; refcount_t users; #ifdef CONFIG_SKB_EXTENSIONS; struct skb_ext *extensions; #endif; };h]hXstruct sk_buff { union { struct { struct sk_buff *next; struct sk_buff *prev; union { struct net_device *dev; unsigned long dev_scratch; }; }; struct rb_node rbnode; struct list_head list; struct llist_node ll_node; }; struct sock *sk; union { ktime_t tstamp; u64 skb_mstamp_ns; }; char cb[48] ; union { struct { unsigned long _skb_refdst; void (*destructor)(struct sk_buff *skb); }; struct list_head tcp_tsorted_anchor; #ifdef CONFIG_NET_SOCK_MSG; unsigned long _sk_redir; #endif; }; #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE); unsigned long _nfct; #endif; unsigned int len, data_len; __u16 mac_len, hdr_len; __u16 queue_mapping; #ifdef __BIG_ENDIAN_BITFIELD; #define CLONED_MASK (1 << 7); #else; #define CLONED_MASK 1; #endif; #define CLONED_OFFSET offsetof(struct sk_buff, __cloned_offset); __u8 cloned:1, nohdr:1, fclone:2, peeked:1, head_frag:1, pfmemalloc:1, pp_recycle:1; #ifdef CONFIG_SKB_EXTENSIONS; __u8 active_extensions; #endif; __u8 pkt_type:3; __u8 ignore_df:1; __u8 dst_pending_confirm:1; __u8 ip_summed:2; __u8 ooo_okay:1; __u8 tstamp_type:2; #ifdef CONFIG_NET_XGRESS; __u8 tc_at_ingress:1; __u8 tc_skip_classify:1; #endif; __u8 remcsum_offload:1; __u8 csum_complete_sw:1; __u8 csum_level:2; __u8 inner_protocol_type:1; __u8 l4_hash:1; __u8 sw_hash:1; #ifdef CONFIG_WIRELESS; __u8 wifi_acked_valid:1; __u8 wifi_acked:1; #endif; __u8 no_fcs:1; __u8 encapsulation:1; __u8 encap_hdr_csum:1; __u8 csum_valid:1; #ifdef CONFIG_IPV6_NDISC_NODETYPE; __u8 ndisc_nodetype:2; #endif; #if IS_ENABLED(CONFIG_IP_VS); __u8 ipvs_property:1; #endif; #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || IS_ENABLED(CONFIG_NF_TABLES); __u8 nf_trace:1; #endif; #ifdef CONFIG_NET_SWITCHDEV; __u8 offload_fwd_mark:1; __u8 offload_l3_fwd_mark:1; #endif; __u8 redirected:1; #ifdef CONFIG_NET_REDIRECT; __u8 from_ingress:1; #endif; #ifdef CONFIG_NETFILTER_SKIP_EGRESS; __u8 nf_skip_egress:1; #endif; #ifdef CONFIG_SKB_DECRYPTED; __u8 decrypted:1; #endif; __u8 slow_gro:1; #if IS_ENABLED(CONFIG_IP_SCTP); __u8 csum_not_inet:1; #endif; __u8 unreadable:1; #if defined(CONFIG_NET_SCHED) || defined(CONFIG_NET_XGRESS); __u16 tc_index; #endif; u16 alloc_cpu; union { __wsum csum; struct { __u16 csum_start; __u16 csum_offset; }; }; __u32 priority; int skb_iif; __u32 hash; union { u32 vlan_all; struct { __be16 vlan_proto; __u16 vlan_tci; }; }; #if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS); union { unsigned int napi_id; unsigned int sender_cpu; }; #endif; #ifdef CONFIG_NETWORK_SECMARK; __u32 secmark; #endif; union { __u32 mark; __u32 reserved_tailroom; }; union { __be16 inner_protocol; __u8 inner_ipproto; }; __u16 inner_transport_header; __u16 inner_network_header; __u16 inner_mac_header; __be16 protocol; __u16 transport_header; __u16 network_header; __u16 mac_header; #ifdef CONFIG_KCOV; u64 kcov_handle; #endif; sk_buff_data_t tail; sk_buff_data_t end; unsigned char *head, *data; unsigned int truesize; refcount_t users; #ifdef CONFIG_SKB_EXTENSIONS; struct skb_ext *extensions; #endif; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjsubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjsubj)}(hhh](j)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hjh]h{unnamed_struct}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``next`` Next buffer in list h](j)}(h``next``h]j)}(hj6h]hnext}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj0ubj)}(hhh]jX)}(hNext buffer in listh]hNext buffer in list}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhM hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM hjubj)}(h!``prev`` Previous buffer in list h](j)}(h``prev``h]j)}(hjoh]hprev}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjiubj)}(hhh]jX)}(hPrevious buffer in listh]hPrevious buffer in list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h,``dev`` Device we arrived on/are leaving by h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h#Device we arrived on/are leaving byh]h#Device we arrived on/are leaving by}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``dev_scratch`` (aka **dev**) alternate use of **dev** when **dev** would be ``NULL`` h](j)}(h``dev_scratch``h]j)}(hjh]h dev_scratch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hE(aka **dev**) alternate use of **dev** when **dev** would be ``NULL``h](h(aka }(hj3hhhNhNubj)}(h**dev**h]hdev}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh) alternate use of }(hj3hhhNhNubj)}(h**dev**h]hdev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh when }(hj3hhhNhNubj)}(h**dev**h]hdev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh would be }(hj3hhhNhNubj)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jWhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h@``rbnode`` RB tree node, alternative to next/prev for netem/tcp h](j)}(h ``rbnode``h]j)}(hjh]hrbnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h4RB tree node, alternative to next/prev for netem/tcph]h4RB tree node, alternative to next/prev for netem/tcp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``list`` queue head h](j)}(h``list``h]j)}(hjh]hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h queue headh]h queue head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``ll_node`` anchor in an llist (eg socket defer_list) h](j)}(h ``ll_node``h]j)}(hj h]hll_node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h)anchor in an llist (eg socket defer_list)h]h)anchor in an llist (eg socket defer_list)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``sk`` Socket we are owned by h](j)}(h``sk``h]j)}(hjBh]hsk}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj<ubj)}(hhh]jX)}(hSocket we are owned byh]hSocket we are owned by}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj{h]h{unnamed_union}}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjuubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``tstamp`` Time we arrived/left h](j)}(h ``tstamp``h]j)}(hjh]htstamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(hTime we arrived/lefth]hTime we arrived/left}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h]``skb_mstamp_ns`` (aka **tstamp**) earliest departure time; start point for retransmit timer h](j)}(h``skb_mstamp_ns``h]j)}(hjh]h skb_mstamp_ns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hJ(aka **tstamp**) earliest departure time; start point for retransmit timerh](h(aka }(hjhhhNhNubj)}(h **tstamp**h]htstamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh;) earliest departure time; start point for retransmit timer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``cb`` Control buffer. Free for use by every layer. Put private vars here h](j)}(h``cb``h]j)}(hj9h]hcb}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj3ubj)}(hhh]jX)}(hBControl buffer. Free for use by every layer. Put private vars hereh]hBControl buffer. Free for use by every layer. Put private vars here}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjrh]h{unnamed_union}}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjlubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hjh]h{unnamed_struct}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``_skb_refdst`` destination entry (with norefcount bit) h](j)}(h``_skb_refdst``h]j)}(hjh]h _skb_refdst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h'destination entry (with norefcount bit)h]h'destination entry (with norefcount bit)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``destructor`` Destruct function h](j)}(h``destructor``h]j)}(hjh]h destructor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM4hjubj)}(hhh]jX)}(hDestruct functionh]hDestruct function}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hM4hj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hM4hjubj)}(hG``tcp_tsorted_anchor`` list structure for TCP (tp->tsorted_sent_queue) h](j)}(h``tcp_tsorted_anchor``h]j)}(hjVh]htcp_tsorted_anchor}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM5hjPubj)}(hhh]jX)}(h/list structure for TCP (tp->tsorted_sent_queue)h]h/list structure for TCP (tp->tsorted_sent_queue)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhM5hjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhM5hjubj)}(h7``_sk_redir`` socket redirection information for skmsg h](j)}(h ``_sk_redir``h]j)}(hjh]h _sk_redir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM6hjubj)}(hhh]jX)}(h(socket redirection information for skmsgh]h(socket redirection information for skmsg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h=``_nfct`` Associated connection, if any (with nfctinfo bits) h](j)}(h ``_nfct``h]j)}(hjh]h_nfct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM7hjubj)}(hhh]jX)}(h2Associated connection, if any (with nfctinfo bits)h]h2Associated connection, if any (with nfctinfo bits)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubj)}(h``len`` Length of actual data h](j)}(h``len``h]j)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hLength of actual datah]hLength of actual data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``data_len`` Data length h](j)}(h ``data_len``h]j)}(hj:h]hdata_len}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj4ubj)}(hhh]jX)}(h Data lengthh]h Data length}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h(``mac_len`` Length of link layer header h](j)}(h ``mac_len``h]j)}(hjsh]hmac_len}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjmubj)}(hhh]jX)}(hLength of link layer headerh]hLength of link layer header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``hdr_len`` writable header length of cloned skb h](j)}(h ``hdr_len``h]j)}(hjh]hhdr_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h$writable header length of cloned skbh]h$writable header length of cloned skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``queue_mapping`` Queue mapping for multiqueue devices h](j)}(h``queue_mapping``h]j)}(hjh]h queue_mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM;hjubj)}(hhh]jX)}(h$Queue mapping for multiqueue devicesh]h$Queue mapping for multiqueue devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h8``cloned`` Head may be cloned (check refcnt to be sure) h](j)}(h ``cloned``h]j)}(hjh]hcloned}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(h,Head may be cloned (check refcnt to be sure)h]h,Head may be cloned (check refcnt to be sure)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubj)}(h9``nohdr`` Payload reference only, must not modify header h](j)}(h ``nohdr``h]j)}(hjWh]hnohdr}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM"hjQubj)}(hhh]jX)}(h.Payload reference only, must not modify headerh]h.Payload reference only, must not modify header}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhM"hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM"hjubj)}(h``fclone`` skbuff clone status h](j)}(h ``fclone``h]j)}(hjh]hfclone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM$hjubj)}(hhh]jX)}(hskbuff clone statush]hskbuff clone status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(hb``peeked`` this packet has been seen already, so stats have been done for it, don't do them again h](j)}(h ``peeked``h]j)}(hjh]hpeeked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM1hjubj)}(hhh]jX)}(hVthis packet has been seen already, so stats have been done for it, don't do them againh]hXthis packet has been seen already, so stats have been done for it, don’t do them again}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubj)}(h^``head_frag`` skb was allocated from page fragments, not allocated by kmalloc() or vmalloc(). h](j)}(h ``head_frag``h]j)}(hjh]h head_frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM=hjubj)}(hhh]jX)}(hOskb was allocated from page fragments, not allocated by kmalloc() or vmalloc().h]hOskb was allocated from page fragments, not allocated by kmalloc() or vmalloc().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(h=``pfmemalloc`` skbuff was allocated from PFMEMALLOC reserves h](j)}(h``pfmemalloc``h]j)}(hj=h]h pfmemalloc}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM>hj7ubj)}(hhh]jX)}(h-skbuff was allocated from PFMEMALLOC reservesh]h-skbuff was allocated from PFMEMALLOC reserves}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjRhM>hjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM>hjubj)}(hf``pp_recycle`` mark the packet for recycling instead of freeing (implies page_pool support on driver) h](j)}(h``pp_recycle``h]j)}(hjvh]h pp_recycle}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM@hjpubj)}(hhh]jX)}(hVmark the packet for recycling instead of freeing (implies page_pool support on driver)h]hVmark the packet for recycling instead of freeing (implies page_pool support on driver)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM?hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(h;``active_extensions`` active extensions (skb_ext_id types) h](j)}(h``active_extensions``h]j)}(hjh]hactive_extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMAhjubj)}(hhh]jX)}(h$active extensions (skb_ext_id types)h]h$active extensions (skb_ext_id types)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubj)}(h``pkt_type`` Packet class h](j)}(h ``pkt_type``h]j)}(hjh]hpkt_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM#hjubj)}(hhh]jX)}(h Packet classh]h Packet class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h(``ignore_df`` allow local fragmentation h](j)}(h ``ignore_df``h]j)}(hj"h]h ignore_df}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hallow local fragmentationh]hallow local fragmentation}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h2``dst_pending_confirm`` need to confirm neighbour h](j)}(h``dst_pending_confirm``h]j)}(hj[h]hdst_pending_confirm}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMThjUubj)}(hhh]jX)}(hneed to confirm neighbourh]hneed to confirm neighbour}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMThjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMThjubj)}(h+``ip_summed`` Driver fed us an IP checksum h](j)}(h ``ip_summed``h]j)}(hjh]h ip_summed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM!hjubj)}(hhh]jX)}(hDriver fed us an IP checksumh]hDriver fed us an IP checksum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(hD``ooo_okay`` allow the mapping of a socket to a queue to be changed h](j)}(h ``ooo_okay``h]j)}(hjh]hooo_okay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMChjubj)}(hhh]jX)}(h6allow the mapping of a socket to a queue to be changedh]h6allow the mapping of a socket to a queue to be changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubj)}(hW``tstamp_type`` When set, skb->tstamp has the delivery_time clock base of skb->tstamp. h](j)}(h``tstamp_type``h]j)}(hjh]h tstamp_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMXhjubj)}(hhh]jX)}(hFWhen set, skb->tstamp has the delivery_time clock base of skb->tstamp.h]hFWhen set, skb->tstamp has the delivery_time clock base of skb->tstamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(hC``tc_at_ingress`` used within tc_classify to distinguish in/egress h](j)}(h``tc_at_ingress``h]j)}(hj@h]h tc_at_ingress}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM,hj:ubj)}(hhh]jX)}(h0used within tc_classify to distinguish in/egressh]h0used within tc_classify to distinguish in/egress}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUhM,hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM,hjubj)}(h?``tc_skip_classify`` do not classify packet. set by IFB device h](j)}(h``tc_skip_classify``h]j)}(hjyh]htc_skip_classify}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM+hjsubj)}(hhh]jX)}(h)do not classify packet. set by IFB deviceh]h)do not classify packet. set by IFB device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(h7``remcsum_offload`` remote checksum offload is enabled h](j)}(h``remcsum_offload``h]j)}(hjh]hremcsum_offload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM(hjubj)}(hhh]jX)}(h"remote checksum offload is enabledh]h"remote checksum offload is enabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h8``csum_complete_sw`` checksum was completed by software h](j)}(h``csum_complete_sw``h]j)}(hjh]hcsum_complete_sw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMNhjubj)}(hhh]jX)}(h"checksum was completed by softwareh]h"checksum was completed by software}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h``csum_level`` indicates the number of consecutive checksums found in the packet minus one that have been verified as CHECKSUM_UNNECESSARY (max 3) h](j)}(h``csum_level``h]j)}(hj$h]h csum_level}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMQhjubj)}(hhh]jX)}(hindicates the number of consecutive checksums found in the packet minus one that have been verified as CHECKSUM_UNNECESSARY (max 3)h]hindicates the number of consecutive checksums found in the packet minus one that have been verified as CHECKSUM_UNNECESSARY (max 3)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMOhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMQhjubj)}(h]``inner_protocol_type`` whether the inner protocol is ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTO h](j)}(h``inner_protocol_type``h]j)}(hj^h]hinner_protocol_type}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM'hjXubj)}(hhh]jX)}(hDwhether the inner protocol is ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTOh]hDwhether the inner protocol is ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTO}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM&hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshM'hjubj)}(hL``l4_hash`` indicate hash is a canonical 4-tuple hash over transport ports. h](j)}(h ``l4_hash``h]j)}(hjh]hl4_hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMEhjubj)}(hhh]jX)}(h?indicate hash is a canonical 4-tuple hash over transport ports.h]h?indicate hash is a canonical 4-tuple hash over transport ports.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubj)}(h:``sw_hash`` indicates hash was computed in software stack h](j)}(h ``sw_hash``h]j)}(hjh]hsw_hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMFhjubj)}(hhh]jX)}(h-indicates hash was computed in software stackh]h-indicates hash was computed in software stack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubj)}(h(``wifi_acked_valid`` wifi_acked was set h](j)}(h``wifi_acked_valid``h]j)}(hj h]hwifi_acked_valid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMGhj ubj)}(hhh]jX)}(hwifi_acked was seth]hwifi_acked was set}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMGhj! ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMGhjubj)}(h6``wifi_acked`` whether frame was acked on wifi or not h](j)}(h``wifi_acked``h]j)}(hjD h]h wifi_acked}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhj> ubj)}(hhh]jX)}(h&whether frame was acked on wifi or noth]h&whether frame was acked on wifi or not}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjY hMHhjZ ubah}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ]h"]h$]h&]uh1jhjY hMHhjubj)}(h=``no_fcs`` Request NIC to treat last 4 bytes as Ethernet FCS h](j)}(h ``no_fcs``h]j)}(hj} h]hno_fcs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMIhjw ubj)}(hhh]jX)}(h1Request NIC to treat last 4 bytes as Ethernet FCSh]h1Request NIC to treat last 4 bytes as Ethernet FCS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMIhj ubah}(h]h ]h"]h$]h&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1jhj hMIhjubj)}(hF``encapsulation`` indicates the inner headers in the skbuff are valid h](j)}(h``encapsulation``h]j)}(hj h]h encapsulation}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMJhj ubj)}(hhh]jX)}(h3indicates the inner headers in the skbuff are validh]h3indicates the inner headers in the skbuff are valid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMJhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMJhjubj)}(h/``encap_hdr_csum`` software checksum is needed h](j)}(h``encap_hdr_csum``h]j)}(hj h]hencap_hdr_csum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMKhj ubj)}(hhh]jX)}(hsoftware checksum is neededh]hsoftware checksum is needed}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMKhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hMKhjubj)}(h)``csum_valid`` checksum is already valid h](j)}(h``csum_valid``h]j)}(hj(!h]h csum_valid}(hj*!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMLhj"!ubj)}(hhh]jX)}(hchecksum is already validh]hchecksum is already valid}(hjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=!hMLhj>!ubah}(h]h ]h"]h$]h&]uh1jhj"!ubeh}(h]h ]h"]h$]h&]uh1jhj=!hMLhjubj)}(h1``ndisc_nodetype`` router type (from link layer) h](j)}(h``ndisc_nodetype``h]j)}(hja!h]hndisc_nodetype}(hjc!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMBhj[!ubj)}(hhh]jX)}(hrouter type (from link layer)h]hrouter type (from link layer)}(hjz!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjv!hMBhjw!ubah}(h]h ]h"]h$]h&]uh1jhj[!ubeh}(h]h ]h"]h$]h&]uh1jhjv!hMBhjubj)}(h*``ipvs_property`` skbuff is owned by ipvs h](j)}(h``ipvs_property``h]j)}(hj!h]h ipvs_property}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM%hj!ubj)}(hhh]jX)}(hskbuff is owned by ipvsh]hskbuff is owned by ipvs}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hM%hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM%hjubj)}(h)``nf_trace`` netfilter packet trace flag h](j)}(h ``nf_trace``h]j)}(hj!h]hnf_trace}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM2hj!ubj)}(hhh]jX)}(hnetfilter packet trace flagh]hnetfilter packet trace flag}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hM2hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM2hjubj)}(h9``offload_fwd_mark`` Packet was L2-forwarded in hardware h](j)}(h``offload_fwd_mark``h]j)}(hj "h]hoffload_fwd_mark}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj "ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM)hj"ubj)}(hhh]jX)}(h#Packet was L2-forwarded in hardwareh]h#Packet was L2-forwarded in hardware}(hj%"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!"hM)hj""ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj!"hM)hjubj)}(h<``offload_l3_fwd_mark`` Packet was L3-forwarded in hardware h](j)}(h``offload_l3_fwd_mark``h]j)}(hjE"h]hoffload_l3_fwd_mark}(hjG"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM*hj?"ubj)}(hhh]jX)}(h#Packet was L3-forwarded in hardwareh]h#Packet was L3-forwarded in hardware}(hj^"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZ"hM*hj["ubah}(h]h ]h"]h$]h&]uh1jhj?"ubeh}(h]h ]h"]h$]h&]uh1jhjZ"hM*hjubj)}(h:``redirected`` packet was redirected by packet classifier h](j)}(h``redirected``h]j)}(hj~"h]h redirected}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM-hjx"ubj)}(hhh]jX)}(h*packet was redirected by packet classifierh]h*packet was redirected by packet classifier}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM-hj"ubah}(h]h ]h"]h$]h&]uh1jhjx"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM-hjubj)}(h=``from_ingress`` packet was redirected from the ingress path h](j)}(h``from_ingress``h]j)}(hj"h]h from_ingress}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM.hj"ubj)}(hhh]jX)}(h+packet was redirected from the ingress pathh]h+packet was redirected from the ingress path}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM.hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM.hjubj)}(hH``nf_skip_egress`` packet shall skip nf egress - see netfilter_netdev.h h](j)}(h``nf_skip_egress``h]j)}(hj"h]hnf_skip_egress}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM/hj"ubj)}(hhh]jX)}(h4packet shall skip nf egress - see netfilter_netdev.hh]h4packet shall skip nf egress - see netfilter_netdev.h}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hM/hj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hM/hjubj)}(h``decrypted`` Decrypted SKB h](j)}(h ``decrypted``h]j)}(hj)#h]h decrypted}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMUhj##ubj)}(hhh]jX)}(h Decrypted SKBh]h Decrypted SKB}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>#hMUhj?#ubah}(h]h ]h"]h$]h&]uh1jhj##ubeh}(h]h ]h"]h$]h&]uh1jhj>#hMUhjubj)}(hE``slow_gro`` state present at GRO time, slower prepare step required h](j)}(h ``slow_gro``h]j)}(hjb#h]hslow_gro}(hjd#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMVhj\#ubj)}(hhh]jX)}(h7state present at GRO time, slower prepare step requiredh]h7state present at GRO time, slower prepare step required}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw#hMVhjx#ubah}(h]h ]h"]h$]h&]uh1jhj\#ubeh}(h]h ]h"]h$]h&]uh1jhjw#hMVhjubj)}(h9``csum_not_inet`` use CRC32c to resolve CHECKSUM_PARTIAL h](j)}(h``csum_not_inet``h]j)}(hj#h]h csum_not_inet}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMMhj#ubj)}(hhh]jX)}(h&use CRC32c to resolve CHECKSUM_PARTIALh]h&use CRC32c to resolve CHECKSUM_PARTIAL}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMMhjubj)}(hU``unreadable`` indicates that at least 1 of the fragments in this skb is unreadable. h](j)}(h``unreadable``h]j)}(hj#h]h unreadable}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMShj#ubj)}(hhh]jX)}(hEindicates that at least 1 of the fragments in this skb is unreadable.h]hEindicates that at least 1 of the fragments in this skb is unreadable.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMRhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMShjubj)}(h#``tc_index`` Traffic control index h](j)}(h ``tc_index``h]j)}(hj$h]htc_index}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj $ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM9hj$ubj)}(hhh]jX)}(hTraffic control indexh]hTraffic control index}(hj'$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#$hM9hj$$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj#$hM9hjubj)}(h0``alloc_cpu`` CPU which did the skb allocation. h](j)}(h ``alloc_cpu``h]j)}(hjG$h]h alloc_cpu}(hjI$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[hjA$ubj)}(hhh]jX)}(h!CPU which did the skb allocation.h]h!CPU which did the skb allocation.}(hj`$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\$hM[hj]$ubah}(h]h ]h"]h$]h&]uh1jhjA$ubeh}(h]h ]h"]h$]h&]uh1jhj\$hM[hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj$h]h{unnamed_union}}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjz$ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjz$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhjubj)}(h3``csum`` Checksum (must include start/offset pair) h](j)}(h``csum``h]j)}(hj$h]hcsum}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj$ubj)}(hhh]jX)}(h)Checksum (must include start/offset pair)h]h)Checksum (must include start/offset pair)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hj$h]h{unnamed_struct}}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhj$ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubj)}(hE``csum_start`` Offset from skb->head where checksumming should start h](j)}(h``csum_start``h]j)}(hj+%h]h csum_start}(hj-%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj%%ubj)}(hhh]jX)}(h5Offset from skb->head where checksumming should starth]h5Offset from skb->head where checksumming should start}(hjD%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@%hMhjA%ubah}(h]h ]h"]h$]h&]uh1jhj%%ubeh}(h]h ]h"]h$]h&]uh1jhj@%hMhjubj)}(hG``csum_offset`` Offset from csum_start where checksum should be stored h](j)}(h``csum_offset``h]j)}(hjd%h]h csum_offset}(hjf%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj^%ubj)}(hhh]jX)}(h6Offset from csum_start where checksum should be storedh]h6Offset from csum_start where checksum should be stored}(hj}%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjy%hMhjz%ubah}(h]h ]h"]h$]h&]uh1jhj^%ubeh}(h]h ]h"]h$]h&]uh1jhjy%hMhjubj)}(h&``priority`` Packet queueing priority h](j)}(h ``priority``h]j)}(hj%h]hpriority}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj%ubj)}(hhh]jX)}(hPacket queueing priorityh]hPacket queueing priority}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h,``skb_iif`` ifindex of device we arrived on h](j)}(h ``skb_iif``h]j)}(hj%h]hskb_iif}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM8hj%ubj)}(hhh]jX)}(hifindex of device we arrived onh]hifindex of device we arrived on}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hM8hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM8hjubj)}(h``hash`` the packet hash h](j)}(h``hash``h]j)}(hj&h]hhash}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj &ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM:hj &ubj)}(hhh]jX)}(hthe packet hashh]hthe packet hash}(hj(&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$&hM:hj%&ubah}(h]h ]h"]h$]h&]uh1jhj &ubeh}(h]h ]h"]h$]h&]uh1jhj$&hM:hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjH&h]h{unnamed_union}}(hjJ&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjB&ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hja&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]&hKhj^&ubah}(h]h ]h"]h$]h&]uh1jhjB&ubeh}(h]h ]h"]h$]h&]uh1jhj]&hKhjubj)}(h'``vlan_all`` vlan fields (proto & tci) h](j)}(h ``vlan_all``h]j)}(hj&h]hvlan_all}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM`hj{&ubj)}(hhh]jX)}(hvlan fields (proto & tci)h]hvlan fields (proto & tci)}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hM`hj&ubah}(h]h ]h"]h$]h&]uh1jhj{&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM`hjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hj&h]h{unnamed_struct}}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhj&ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubj)}(h+``vlan_proto`` vlan encapsulation protocol h](j)}(h``vlan_proto``h]j)}(hj&h]h vlan_proto}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMahj&ubj)}(hhh]jX)}(hvlan encapsulation protocolh]hvlan encapsulation protocol}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMahj 'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hMahjubj)}(h*``vlan_tci`` vlan tag control information h](j)}(h ``vlan_tci``h]j)}(hj,'h]hvlan_tci}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMbhj&'ubj)}(hhh]jX)}(hvlan tag control informationh]hvlan tag control information}(hjE'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjA'hMbhjB'ubah}(h]h ]h"]h$]h&]uh1jhj&'ubeh}(h]h ]h"]h$]h&]uh1jhjA'hMbhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hje'h]h{unnamed_union}}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhj_'ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj~'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjz'hKhj{'ubah}(h]h ]h"]h$]h&]uh1jhj_'ubeh}(h]h ]h"]h$]h&]uh1jhjz'hKhjubj)}(h5``napi_id`` id of the NAPI struct this skb came from h](j)}(h ``napi_id``h]j)}(hj'h]hnapi_id}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMYhj'ubj)}(hhh]jX)}(h(id of the NAPI struct this skb came fromh]h(id of the NAPI struct this skb came from}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMYhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMYhjubj)}(h3``sender_cpu`` (aka **napi_id**) source CPU in XPS h](j)}(h``sender_cpu``h]j)}(hj'h]h sender_cpu}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMZhj'ubj)}(hhh]jX)}(h#(aka **napi_id**) source CPU in XPSh](h(aka }(hj'hhhNhNubj)}(h **napi_id**h]hnapi_id}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh) source CPU in XPS}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj'hMZhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMZhjubj)}(h``secmark`` security marking h](j)}(h ``secmark``h]j)}(hj"(h]hsecmark}(hj$(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj (ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM\hj(ubj)}(hhh]jX)}(hsecurity markingh]hsecurity marking}(hj;(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7(hM\hj8(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj7(hM\hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj[(h]h{unnamed_union}}(hj](hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhjU(ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjt(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp(hKhjq(ubah}(h]h ]h"]h$]h&]uh1jhjU(ubeh}(h]h ]h"]h$]h&]uh1jhjp(hKhjubj)}(h``mark`` Generic packet mark h](j)}(h``mark``h]j)}(hj(h]hmark}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM]hj(ubj)}(hhh]jX)}(hGeneric packet markh]hGeneric packet mark}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hM]hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hM]hjubj)}(hg``reserved_tailroom`` (aka **mark**) number of bytes of free space available at the tail of an sk_buff h](j)}(h``reserved_tailroom``h]j)}(hj(h]hreserved_tailroom}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM_hj(ubj)}(hhh]jX)}(hP(aka **mark**) number of bytes of free space available at the tail of an sk_buffh](h(aka }(hj(hhhNhNubj)}(h**mark**h]hmark}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubhC) number of bytes of free space available at the tail of an sk_buff}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM^hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hM_hjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj)h]h{unnamed_union}}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhKhj)ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj2)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.)hKhj/)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj.)hKhjubj)}(h,``inner_protocol`` Protocol (encapsulation) h](j)}(h``inner_protocol``h]j)}(hjR)h]hinner_protocol}(hjT)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMchjL)ubj)}(hhh]jX)}(hProtocol (encapsulation)h]hProtocol (encapsulation)}(hjk)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjg)hMchjh)ubah}(h]h ]h"]h$]h&]uh1jhjL)ubeh}(h]h ]h"]h$]h&]uh1jhjg)hMchjubj)}(ho``inner_ipproto`` (aka **inner_protocol**) stores ipproto when skb->inner_protocol_type == ENCAP_TYPE_IPPROTO; h](j)}(h``inner_ipproto``h]j)}(hj)h]h inner_ipproto}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMehj)ubj)}(hhh]jX)}(h\(aka **inner_protocol**) stores ipproto when skb->inner_protocol_type == ENCAP_TYPE_IPPROTO;h](h(aka }(hj)hhhNhNubj)}(h**inner_protocol**h]hinner_protocol}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubhE) stores ipproto when skb->inner_protocol_type == ENCAP_TYPE_IPPROTO;}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMdhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMehjubj)}(hH``inner_transport_header`` Inner transport layer header (encapsulation) h](j)}(h``inner_transport_header``h]j)}(hj)h]hinner_transport_header}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMfhj)ubj)}(hhh]jX)}(h,Inner transport layer header (encapsulation)h]h,Inner transport layer header (encapsulation)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMfhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMfhjubj)}(h>``inner_network_header`` Network layer header (encapsulation) h](j)}(h``inner_network_header``h]j)}(hj*h]hinner_network_header}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMghj *ubj)}(hhh]jX)}(h$Network layer header (encapsulation)h]h$Network layer header (encapsulation)}(hj)*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%*hMghj&*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ]h"]h$]h&]uh1jhj%*hMghjubj)}(h7``inner_mac_header`` Link layer header (encapsulation) h](j)}(h``inner_mac_header``h]j)}(hjI*h]hinner_mac_header}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhhjC*ubj)}(hhh]jX)}(h!Link layer header (encapsulation)h]h!Link layer header (encapsulation)}(hjb*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^*hMhhj_*ubah}(h]h ]h"]h$]h&]uh1jhjC*ubeh}(h]h ]h"]h$]h&]uh1jhj^*hMhhjubj)}(h)``protocol`` Packet protocol from driver h](j)}(h ``protocol``h]j)}(hj*h]hprotocol}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM3hj|*ubj)}(hhh]jX)}(hPacket protocol from driverh]hPacket protocol from driver}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM3hj*ubah}(h]h ]h"]h$]h&]uh1jhj|*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM3hjubj)}(h,``transport_header`` Transport layer header h](j)}(h``transport_header``h]j)}(hj*h]htransport_header}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMihj*ubj)}(hhh]jX)}(hTransport layer headerh]hTransport layer header}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMihj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMihjubj)}(h(``network_header`` Network layer header h](j)}(h``network_header``h]j)}(hj*h]hnetwork_header}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMjhj*ubj)}(hhh]jX)}(hNetwork layer headerh]hNetwork layer header}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj +hMjhj +ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj +hMjhjubj)}(h!``mac_header`` Link layer header h](j)}(h``mac_header``h]j)}(hj-+h]h mac_header}(hj/+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj++ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMkhj'+ubj)}(hhh]jX)}(hLink layer headerh]hLink layer header}(hjF+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB+hMkhjC+ubah}(h]h ]h"]h$]h&]uh1jhj'+ubeh}(h]h ]h"]h$]h&]uh1jhjB+hMkhjubj)}(hB``kcov_handle`` KCOV remote handle for remote coverage collection h](j)}(h``kcov_handle``h]j)}(hjf+h]h kcov_handle}(hjh+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMlhj`+ubj)}(hhh]jX)}(h1KCOV remote handle for remote coverage collectionh]h1KCOV remote handle for remote coverage collection}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{+hMlhj|+ubah}(h]h ]h"]h$]h&]uh1jhj`+ubeh}(h]h ]h"]h$]h&]uh1jhj{+hMlhjubj)}(h``tail`` Tail pointer h](j)}(h``tail``h]j)}(hj+h]htail}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMmhj+ubj)}(hhh]jX)}(h Tail pointerh]h Tail pointer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMmhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMmhjubj)}(h``end`` End pointer h](j)}(h``end``h]j)}(hj+h]hend}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMnhj+ubj)}(hhh]jX)}(h End pointerh]h End pointer}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMnhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMnhjubj)}(h``head`` Head of buffer h](j)}(h``head``h]j)}(hj,h]hhead}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMohj ,ubj)}(hhh]jX)}(hHead of bufferh]hHead of buffer}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&,hMohj',ubah}(h]h ]h"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]uh1jhj&,hMohjubj)}(h``data`` Data head pointer h](j)}(h``data``h]j)}(hjJ,h]hdata}(hjL,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMphjD,ubj)}(hhh]jX)}(hData head pointerh]hData head pointer}(hjc,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_,hMphj`,ubah}(h]h ]h"]h$]h&]uh1jhjD,ubeh}(h]h ]h"]h$]h&]uh1jhj_,hMphjubj)}(h``truesize`` Buffer size h](j)}(h ``truesize``h]j)}(hj,h]htruesize}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMqhj},ubj)}(hhh]jX)}(h Buffer sizeh]h Buffer size}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMqhj,ubah}(h]h ]h"]h$]h&]uh1jhj},ubeh}(h]h ]h"]h$]h&]uh1jhj,hMqhjubj)}(h,``users`` User count - see {datagram,tcp}.c h](j)}(h ``users``h]j)}(hj,h]husers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMrhj,ubj)}(hhh]jX)}(h!User count - see {datagram,tcp}.ch]h!User count - see {datagram,tcp}.c}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMrhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMrhjubj)}(hJ``extensions`` allocated extensions, valid if active_extensions is nonzeroh](j)}(h``extensions``h]j)}(hj,h]h extensions}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMrhj,ubj)}(hhh]jX)}(h;allocated extensions, valid if active_extensions is nonzeroh]h;allocated extensions, valid if active_extensions is nonzero}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMshj -ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj -hMrhjubeh}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_pfmemalloc (C function)c.skb_pfmemallochNtauh1hhj[hhhNhNubh)}(hhh](h)}(h/bool skb_pfmemalloc (const struct sk_buff *skb)h]h)}(h.bool skb_pfmemalloc(const struct sk_buff *skb)h](j)}(hjTh]hbool}(hjO-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK-hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMpubj)}(h h]h }(hj]-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK-hhhj\-hMpubj)}(hskb_pfmemalloch]j%)}(hskb_pfmemalloch]hskb_pfmemalloc}(hjo-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjk-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjK-hhhj\-hMpubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jjq-sbc.skb_pfmemallocasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hskbh]hskb}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubah}(h]h ]h"]h$]h&]j<j=uh1jhjK-hhhj\-hMpubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjG-hhhj\-hMpubah}(h]jB-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\-hMphjD-hhubjS)}(hhh]jX)}(h6Test if the skb was allocated from PFMEMALLOC reservesh]h6Test if the skb was allocated from PFMEMALLOC reserves}(hj).hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMphj&.hhubah}(h]h ]h"]h$]h&]uh1jRhjD-hhhj\-hMpubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjA.jxjA.jyjzj{uh1hhhhj[hNhNubj})}(h6**Parameters** ``const struct sk_buff *skb`` bufferh](jX)}(h**Parameters**h]j)}(hjK.h]h Parameters}(hjM.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI.ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMthjE.ubj)}(hhh]j)}(h$``const struct sk_buff *skb`` bufferh](j)}(h``const struct sk_buff *skb``h]j)}(hjj.h]hconst struct sk_buff *skb}(hjl.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMvhjd.ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMqhj.ubah}(h]h ]h"]h$]h&]uh1jhjd.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMvhja.ubah}(h]h ]h"]h$]h&]uh1jhjE.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dst (C function) c.skb_dsthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6struct dst_entry * skb_dst (const struct sk_buff *skb)h]h)}(h4struct dst_entry *skb_dst(const struct sk_buff *skb)h](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.hhhj.hMubh)}(hhh]j%)}(h dst_entryh]h dst_entry}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]j')}jskb_dstsb c.skb_dstasbuh1hhj.hhhj.hMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.hhhj.hMubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.hhhj.hMubj)}(hskb_dsth]j%)}(hj/h]hskb_dst}(hj#/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj.hhhj.hMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj>/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:/ubj)}(h h]h }(hjK/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:/ubh)}(hjh]hstruct}(hjY/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:/ubj)}(h h]h }(hjf/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:/ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjw/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjt/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjy/modnameN classnameNjj!)}j$]j. c.skb_dstasbuh1hhj:/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:/ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:/ubj%)}(hskbh]hskb}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6/ubah}(h]h ]h"]h$]h&]j<j=uh1jhj.hhhj.hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.hhhj.hMubah}(h]j.ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.hMhj.hhubjS)}(hhh]jX)}(hreturns skb dst_entryh]hreturns skb dst_entry}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhj.hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhj[hNhNubj})}(hx**Parameters** ``const struct sk_buff *skb`` buffer **Return** skb dst_entry, regardless of reference taken or not.h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/ubj)}(hhh]j)}(h%``const struct sk_buff *skb`` buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hj0h]hconst struct sk_buff *skb}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj0ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj00hMhj10ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj00hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubjX)}(h **Return**h]j)}(hjV0h]hReturn}(hjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT0ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/ubjX)}(h4skb dst_entry, regardless of reference taken or not.h]h4skb dst_entry, regardless of reference taken or not.}(hjl0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dstref_steal (C function)c.skb_dstref_stealhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4unsigned long skb_dstref_steal (struct sk_buff *skb)h]h)}(h3unsigned long skb_dstref_steal(struct sk_buff *skb)h](j)}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMubj)}(hlongh]hlong}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMubj)}(hskb_dstref_stealh]j%)}(hskb_dstref_stealh]hskb_dstref_steal}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jj0sbc.skb_dstref_stealasbuh1hhj0ubj)}(h h]h }(hj21hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hj@1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hskbh]hskb}(hjM1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubah}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hMubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMhj0hhubjS)}(hhh]jX)}(h+return current dst_entry value and clear ith]h+return current dst_entry value and clear it}(hjw1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjt1hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer **Description** Resets skb dst_entry without adjusting its reference count. Useful in cases where dst_entry needs to be temporarily reset and restored. Note that the returned value cannot be used directly because it might contain SKB_DST_NOREF bit. When in doubt, prefer skb_dst_drop() over skb_dstref_steal() to correctly handle dst_entry reference counting. **Return** original skb dst_entry.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubj)}(hhh]j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj1h]hstruct sk_buff *skb}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubjX)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubjX)}(hResets skb dst_entry without adjusting its reference count. Useful in cases where dst_entry needs to be temporarily reset and restored. Note that the returned value cannot be used directly because it might contain SKB_DST_NOREF bit.h]hResets skb dst_entry without adjusting its reference count. Useful in cases where dst_entry needs to be temporarily reset and restored. Note that the returned value cannot be used directly because it might contain SKB_DST_NOREF bit.}(hj 2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubjX)}(hnWhen in doubt, prefer skb_dst_drop() over skb_dstref_steal() to correctly handle dst_entry reference counting.h]hnWhen in doubt, prefer skb_dst_drop() over skb_dstref_steal() to correctly handle dst_entry reference counting.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubjX)}(h **Return**h]j)}(hj)2h]hReturn}(hj+2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'2ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubjX)}(horiginal skb dst_entry.h]horiginal skb dst_entry.}(hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dstref_restore (C function)c.skb_dstref_restorehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hCvoid skb_dstref_restore (struct sk_buff *skb, unsigned long refdst)h]h)}(hBvoid skb_dstref_restore(struct sk_buff *skb, unsigned long refdst)h](j)}(hvoidh]hvoid}(hjn2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj2hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj}2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj2hhhj|2hMubj)}(hskb_dstref_restoreh]j%)}(hskb_dstref_restoreh]hskb_dstref_restore}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjj2hhhj|2hMubj)}(h+(struct sk_buff *skb, unsigned long refdst)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j')}jj2sbc.skb_dstref_restoreasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hskbh]hskb}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubj)}(hunsigned long refdsth](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj+3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj)}(hlongh]hlong}(hj93hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjG3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj%)}(hrefdsth]hrefdst}(hjU3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjj2hhhj|2hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjf2hhhj|2hMubah}(h]ja2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|2hMhjc2hhubjS)}(hhh]jX)}(h4restore skb dst_entry removed via skb_dstref_steal()h]h4restore skb dst_entry removed via skb_dstref_steal()}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj|3hhubah}(h]h ]h"]h$]h&]uh1jRhjc2hhhj|2hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3jxj3jyjzj{uh1hhhhj[hNhNubj})}(hx**Parameters** ``struct sk_buff *skb`` buffer ``unsigned long refdst`` dst entry from a call to skb_dstref_steal()h](jX)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj3ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj3h]hstruct sk_buff *skb}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj3ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhj3ubj)}(hD``unsigned long refdst`` dst entry from a call to skb_dstref_steal()h](j)}(h``unsigned long refdst``h]j)}(hj3h]hunsigned long refdst}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj3ubj)}(hhh]jX)}(h+dst entry from a call to skb_dstref_steal()h]h+dst entry from a call to skb_dstref_steal()}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dst_set (C function) c.skb_dst_sethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=void skb_dst_set (struct sk_buff *skb, struct dst_entry *dst)h]h)}(hh]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hskbh]hskb}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubj)}(hstruct dst_entry *dsth](h)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(h dst_entryh]h dst_entry}(hj 5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"5modnameN classnameNjj!)}j$]j4 c.skb_dst_setasbuh1hhj4ubj)}(h h]h }(hj>5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjL5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hdsth]hdst}(hjY5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjO4hhhja4hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjK4hhhja4hMubah}(h]jF4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhja4hMhjH4hhubjS)}(hhh]jX)}(h sets skb dsth]h sets skb dst}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5hhubah}(h]h ]h"]h$]h&]uh1jRhjH4hhhja4hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj5jxj5jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer ``struct dst_entry *dst`` dst entry **Description** Sets skb dst, assuming a reference was taken on dst and should be released by skb_dst_drop()h](jX)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj5h]hstruct sk_buff *skb}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h$``struct dst_entry *dst`` dst entry h](j)}(h``struct dst_entry *dst``h]j)}(hj5h]hstruct dst_entry *dst}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubj)}(hhh]jX)}(h dst entryh]h dst entry}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubjX)}(h**Description**h]j)}(hj86h]h Description}(hj:6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj66ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubjX)}(h\Sets skb dst, assuming a reference was taken on dst and should be released by skb_dst_drop()h]h\Sets skb dst, assuming a reference was taken on dst and should be released by skb_dst_drop()}(hjN6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dst_set_noref (C function)c.skb_dst_set_norefhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hCvoid skb_dst_set_noref (struct sk_buff *skb, struct dst_entry *dst)h]h)}(hBvoid skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst)h](j)}(hvoidh]hvoid}(hj}6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy6hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjy6hhhj6hMubj)}(hskb_dst_set_norefh]j%)}(hskb_dst_set_norefh]hskb_dst_set_noref}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjy6hhhj6hMubj)}(h,(struct sk_buff *skb, struct dst_entry *dst)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6modnameN classnameNjj!)}j$]j')}jj6sbc.skb_dst_set_norefasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hskbh]hskb}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubj)}(hstruct dst_entry *dsth](h)}(hjh]hstruct}(hj,7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(7ubj)}(h h]h }(hj97hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(7ubh)}(hhh]j%)}(h dst_entryh]h dst_entry}(hjJ7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjG7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjL7modnameN classnameNjj!)}j$]j6c.skb_dst_set_norefasbuh1hhj(7ubj)}(h h]h }(hjh7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(7ubj;)}(hj>h]h*}(hjv7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(7ubj%)}(hdsth]hdst}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjy6hhhj6hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhju6hhhj6hMubah}(h]jp6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hMhjr6hhubjS)}(hhh]jX)}(h1sets skb dst, hopefully, without taking referenceh]h1sets skb dst, hopefully, without taking reference}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7hhubah}(h]h ]h"]h$]h&]uh1jRhjr6hhhj6hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj7jxj7jyjzj{uh1hhhhj[hNhNubj})}(hXl**Parameters** ``struct sk_buff *skb`` buffer ``struct dst_entry *dst`` dst entry **Description** Sets skb dst, assuming a reference was not taken on dst. If dst entry is cached, we do not take reference and dst_release will be avoided by refdst_drop. If dst entry is not cached, we take reference, so that last dst_release can destroy the dst immediately.h](jX)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj7h]hstruct sk_buff *skb}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(h$``struct dst_entry *dst`` dst entry h](j)}(h``struct dst_entry *dst``h]j)}(hj'8h]hstruct dst_entry *dst}(hj)8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj!8ubj)}(hhh]jX)}(h dst entryh]h dst entry}(hj@8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<8hMhj=8ubah}(h]h ]h"]h$]h&]uh1jhj!8ubeh}(h]h ]h"]h$]h&]uh1jhj<8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubjX)}(h**Description**h]j)}(hjb8h]h Description}(hjd8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`8ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7ubjX)}(hXSets skb dst, assuming a reference was not taken on dst. If dst entry is cached, we do not take reference and dst_release will be avoided by refdst_drop. If dst entry is not cached, we take reference, so that last dst_release can destroy the dst immediately.h]hXSets skb dst, assuming a reference was not taken on dst. If dst entry is cached, we do not take reference and dst_release will be avoided by refdst_drop. If dst entry is not cached, we take reference, so that last dst_release can destroy the dst immediately.}(hjx8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dst_is_noref (C function)c.skb_dst_is_norefhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h1bool skb_dst_is_noref (const struct sk_buff *skb)h]h)}(h0bool skb_dst_is_noref(const struct sk_buff *skb)h](j)}(hjTh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hMubj)}(hskb_dst_is_norefh]j%)}(hskb_dst_is_norefh]hskb_dst_is_noref}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj8hhhj8hMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9modnameN classnameNjj!)}j$]j')}jj8sbc.skb_dst_is_norefasbuh1hhj8ubj)}(h h]h }(hj<9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjJ9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hskbh]hskb}(hjW9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8ubah}(h]h ]h"]h$]h&]j<j=uh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj8hhhj8hMubah}(h]j8ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hMhj8hhubjS)}(hhh]jX)}(h Test if skb dst isn't refcountedh]h"Test if skb dst isn’t refcounted}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj~9hhubah}(h]h ]h"]h$]h&]uh1jRhj8hhhj8hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9jxj9jyjzj{uh1hhhhj[hNhNubj})}(h6**Parameters** ``const struct sk_buff *skb`` bufferh](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj9ubj)}(hhh]j)}(h$``const struct sk_buff *skb`` bufferh](j)}(h``const struct sk_buff *skb``h]j)}(hj9h]hconst struct sk_buff *skb}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj9ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_napi_id (C function) c.skb_napi_idhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4unsigned int skb_napi_id (const struct sk_buff *skb)h]h)}(h3unsigned int skb_napi_id(const struct sk_buff *skb)h](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj+:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhj*:hMubj)}(hinth]hint}(hj9:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj*:hMubj)}(h h]h }(hjG:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhj*:hMubj)}(h skb_napi_idh]j%)}(h skb_napi_idh]h skb_napi_id}(hjY:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjU:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhj*:hMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hju:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjq:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq:ubh)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjq:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq:ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jj[:sb c.skb_napi_idasbuh1hhjq:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq:ubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjq:ubj%)}(hskbh]hskb}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjm:ubah}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhj*:hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj:hhhj*:hMubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*:hMhj:hhubjS)}(hhh]jX)}(hReturns the skb's NAPI idh]hReturns the skb’s NAPI id}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jRhj:hhhj*:hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj+;jxj+;jyjzj{uh1hhhhj[hNhNubj})}(h6**Parameters** ``const struct sk_buff *skb`` bufferh](jX)}(h**Parameters**h]j)}(hj5;h]h Parameters}(hj7;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3;ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/;ubj)}(hhh]j)}(h$``const struct sk_buff *skb`` bufferh](j)}(h``const struct sk_buff *skb``h]j)}(hjT;h]hconst struct sk_buff *skb}(hjV;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR;ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjN;ubj)}(hhh]jX)}(hbufferh]hbuffer}(hjm;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjj;ubah}(h]h ]h"]h$]h&]uh1jhjN;ubeh}(h]h ]h"]h$]h&]uh1jhji;hMhjK;ubah}(h]h ]h"]h$]h&]uh1jhj/;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_unref (C function) c.skb_unrefhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h$bool skb_unref (struct sk_buff *skb)h]h)}(h#bool skb_unref(struct sk_buff *skb)h](j)}(hjTh]hbool}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhj;hMubj)}(h skb_unrefh]j%)}(h skb_unrefh]h skb_unref}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhj;hMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj <modnameN classnameNjj!)}j$]j')}jj;sb c.skb_unrefasbuh1hhj;ubj)}(h h]h }(hj(<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj;)}(hj>h]h*}(hj6<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;ubj%)}(hskbh]hskb}(hjC<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubah}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhj;hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;hhhj;hMubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj;hMhj;hhubjS)}(hhh]jX)}(h#decrement the skb's reference counth]h%decrement the skb’s reference count}(hjm<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjj<hhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhj;hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj<jxj<jyjzj{uh1hhhhj[hNhNubj})}(hZ**Parameters** ``struct sk_buff *skb`` buffer **Return** true if we can free the skb.h](jX)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj<ubj)}(hhh]j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj<h]hstruct sk_buff *skb}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj<ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubjX)}(h **Return**h]j)}(hj<h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj<ubjX)}(htrue if we can free the skb.h]htrue if we can free the skb.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkfree_skb (C function) c.kfree_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h$void kfree_skb (struct sk_buff *skb)h]h)}(h#void kfree_skb(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hj.=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*=hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM.ubj)}(h h]h }(hj==hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*=hhhj<=hM.ubj)}(h kfree_skbh]j%)}(h kfree_skbh]h kfree_skb}(hjO=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjK=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*=hhhj<=hM.ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjk=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjg=ubj)}(h h]h }(hjx=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjg=ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jjQ=sb c.kfree_skbasbuh1hhjg=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjg=ubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjg=ubj%)}(hskbh]hskb}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjg=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjc=ubah}(h]h ]h"]h$]h&]j<j=uh1jhj*=hhhj<=hM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&=hhhj<=hM.ubah}(h]j!=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<=hM.hj#=hhubjS)}(hhh]jX)}(h+free an sk_buff with 'NOT_SPECIFIED' reasonh]h/free an sk_buff with ‘NOT_SPECIFIED’ reason}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM.hj=hhubah}(h]h ]h"]h$]h&]uh1jRhj#=hhhj<=hM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhj[hNhNubj})}(h8**Parameters** ``struct sk_buff *skb`` buffer to freeh](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM2hj >ubj)}(hhh]j)}(h&``struct sk_buff *skb`` buffer to freeh](j)}(h``struct sk_buff *skb``h]j)}(hj/>h]hstruct sk_buff *skb}(hj1>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj->ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM4hj)>ubj)}(hhh]jX)}(hbuffer to freeh]hbuffer to free}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM/hjE>ubah}(h]h ]h"]h$]h&]uh1jhj)>ubeh}(h]h ]h"]h$]h&]uh1jhjD>hM4hj&>ubah}(h]h ]h"]h$]h&]uh1jhj >ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_skb (C function) c.alloc_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h>struct sk_buff * alloc_skb (unsigned int size, gfp_t priority)h]h)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM^ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhj>hM^ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]j')}j alloc_skbsb c.alloc_skbasbuh1hhj>hhhj>hM^ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhj>hM^ubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>hhhj>hM^ubj)}(h alloc_skbh]j%)}(hj>h]h alloc_skb}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj>hhhj>hM^ubj)}(h#(unsigned int size, gfp_t priority)h](j)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hj-?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj%)}(hsizeh]hsize}(hj;?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubj)}(hgfp_t priorityh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjW?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjT?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjY?modnameN classnameNjj!)}j$]j> c.alloc_skbasbuh1hhjP?ubj)}(h h]h }(hju?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjP?ubj%)}(hpriorityh]hpriority}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjP?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj>hhhj>hM^ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj>hhhj>hM^ubah}(h]j|>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>hM^hj~>hhubjS)}(hhh]jX)}(hallocate a network bufferh]hallocate a network buffer}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM^hj?hhubah}(h]h ]h"]h$]h&]uh1jRhj~>hhhj>hM^ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?jxj?jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``unsigned int size`` size to allocate ``gfp_t priority`` allocation mask **Description** This function is a convenient wrapper around __alloc_skb().h](jX)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMbhj?ubj)}(hhh](j)}(h'``unsigned int size`` size to allocate h](j)}(h``unsigned int size``h]j)}(hj?h]hunsigned int size}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM_hj?ubj)}(hhh]jX)}(hsize to allocateh]hsize to allocate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hM_hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hM_hj?ubj)}(h#``gfp_t priority`` allocation mask h](j)}(h``gfp_t priority``h]j)}(hj'@h]hgfp_t priority}(hj)@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%@ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM`hj!@ubj)}(hhh]jX)}(hallocation maskh]hallocation mask}(hj@@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<@hM`hj=@ubah}(h]h ]h"]h$]h&]uh1jhj!@ubeh}(h]h ]h"]h$]h&]uh1jhj<@hM`hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjX)}(h**Description**h]j)}(hjb@h]h Description}(hjd@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`@ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMbhj?ubjX)}(h;This function is a convenient wrapper around __alloc_skb().h]h;This function is a convenient wrapper around __alloc_skb().}(hjx@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMahj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_fclone_busy (C function)c.skb_fclone_busyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hGbool skb_fclone_busy (const struct sock *sk, const struct sk_buff *skb)h]h)}(hFbool skb_fclone_busy(const struct sock *sk, const struct sk_buff *skb)h](j)}(hjTh]hbool}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM{ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhj@hM{ubj)}(hskb_fclone_busyh]j%)}(hskb_fclone_busyh]hskb_fclone_busy}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhj@hM{ubj)}(h2(const struct sock *sk, const struct sk_buff *skb)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hhh]j%)}(hsockh]hsock}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j')}jj@sbc.skb_fclone_busyasbuh1hhj@ubj)}(h h]h }(hjh]h*}(hjJAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@ubj%)}(hskh]hsk}(hjWAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjpAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlAubj)}(h h]h }(hj}AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlAubh)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlAubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j8Ac.skb_fclone_busyasbuh1hhjlAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlAubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlAubj%)}(hskbh]hskb}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhj@hM{ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhj@hM{ubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@hM{hj@hhubjS)}(hhh]jX)}(hcheck if fclone is busyh]hcheck if fclone is busy}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM{hj Bhhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhj@hM{ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$Bjxj$Bjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sock *sk`` socket ``const struct sk_buff *skb`` buffer **Return** true if skb is a fast clone, and its clone is not freed. Some drivers call skb_orphan() in their ndo_start_xmit(), so we also check that didn't happen.h](jX)}(h**Parameters**h]j)}(hj.Bh]h Parameters}(hj0BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Bubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj(Bubj)}(hhh](j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hjMBh]hconst struct sock *sk}(hjOBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKBubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM|hjGBubj)}(hhh]jX)}(hsocketh]hsocket}(hjfBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbBhM|hjcBubah}(h]h ]h"]h$]h&]uh1jhjGBubeh}(h]h ]h"]h$]h&]uh1jhjbBhM|hjDBubj)}(h%``const struct sk_buff *skb`` buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hjBh]hconst struct sk_buff *skb}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM}hjBubj)}(hhh]jX)}(hbufferh]hbuffer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM}hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM}hjDBubeh}(h]h ]h"]h$]h&]uh1jhj(BubjX)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj(BubjX)}(htrue if skb is a fast clone, and its clone is not freed. Some drivers call skb_orphan() in their ndo_start_xmit(), so we also check that didn't happen.h]htrue if skb is a fast clone, and its clone is not freed. Some drivers call skb_orphan() in their ndo_start_xmit(), so we also check that didn’t happen.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj(Bubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_skb_fclone (C function)c.alloc_skb_fclonehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hEstruct sk_buff * alloc_skb_fclone (unsigned int size, gfp_t priority)h]h)}(hCstruct sk_buff *alloc_skb_fclone(unsigned int size, gfp_t priority)h](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjChhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj%ChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"Cubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'CmodnameN classnameNjj!)}j$]j')}jalloc_skb_fclonesbc.alloc_skb_fcloneasbuh1hhjChhhjChMubj)}(h h]h }(hjFChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChMubj;)}(hj>h]h*}(hjTChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjChhhjChMubj)}(halloc_skb_fcloneh]j%)}(hjCCh]halloc_skb_fclone}(hjeChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaCubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjChMubj)}(h#(unsigned int size, gfp_t priority)h](j)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Cubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|Cubj)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|Cubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|Cubj%)}(hsizeh]hsize}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|Cubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxCubj)}(hgfp_t priorityh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]jACc.alloc_skb_fcloneasbuh1hhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj%)}(hpriorityh]hpriority}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxCubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjChMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBhhhjChMubah}(h]jBah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChMhjBhhubjS)}(hhh]jX)}(h+allocate a network buffer from fclone cacheh]h+allocate a network buffer from fclone cache}(hj*DhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj'Dhhubah}(h]h ]h"]h$]h&]uh1jRhjBhhhjChMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBDjxjBDjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``unsigned int size`` size to allocate ``gfp_t priority`` allocation mask **Description** This function is a convenient wrapper around __alloc_skb().h](jX)}(h**Parameters**h]j)}(hjLDh]h Parameters}(hjNDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJDubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFDubj)}(hhh](j)}(h'``unsigned int size`` size to allocate h](j)}(h``unsigned int size``h]j)}(hjkDh]hunsigned int size}(hjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiDubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjeDubj)}(hhh]jX)}(hsize to allocateh]hsize to allocate}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjeDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjbDubj)}(h#``gfp_t priority`` allocation mask h](j)}(h``gfp_t priority``h]j)}(hjDh]hgfp_t priority}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjDubj)}(hhh]jX)}(hallocation maskh]hallocation mask}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjbDubeh}(h]h ]h"]h$]h&]uh1jhjFDubjX)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFDubjX)}(h;This function is a convenient wrapper around __alloc_skb().h]h;This function is a convenient wrapper around __alloc_skb().}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFDubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_pad (C function) c.skb_padhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h*int skb_pad (struct sk_buff *skb, int pad)h]h)}(h)int skb_pad(struct sk_buff *skb, int pad)h](j)}(hinth]hint}(hj$EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj EhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj3EhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Ehhhj2EhMubj)}(hskb_padh]j%)}(hskb_padh]hskb_pad}(hjEEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAEubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj Ehhhj2EhMubj)}(h(struct sk_buff *skb, int pad)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjaEhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]Eubj)}(h h]h }(hjnEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Eubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|Eubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]j')}jjGEsb c.skb_padasbuh1hhj]Eubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Eubj;)}(hj>h]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]Eubj%)}(hskbh]hskb}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]Eubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYEubj)}(hint padh](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj%)}(hpadh]hpad}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYEubeh}(h]h ]h"]h$]h&]j<j=uh1jhj Ehhhj2EhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjEhhhj2EhMubah}(h]jEah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2EhMhjEhhubjS)}(hhh]jX)}(hzero pad the tail of an skbh]hzero pad the tail of an skb}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFhhubah}(h]h ]h"]h$]h&]uh1jRhjEhhhj2EhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1Fjxj1Fjyjzj{uh1hhhhj[hNhNubj})}(hXb**Parameters** ``struct sk_buff *skb`` buffer to pad ``int pad`` space to pad **Description** Ensure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire. May return error in out of memory cases. The skb is freed on error.h](jX)}(h**Parameters**h]j)}(hj;Fh]h Parameters}(hj=FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Fubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5Fubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjZFh]hstruct sk_buff *skb}(hj\FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjTFubj)}(hhh]jX)}(h buffer to padh]h buffer to pad}(hjsFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjoFhMhjpFubah}(h]h ]h"]h$]h&]uh1jhjTFubeh}(h]h ]h"]h$]h&]uh1jhjoFhMhjQFubj)}(h``int pad`` space to pad h](j)}(h ``int pad``h]j)}(hjFh]hint pad}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFubj)}(hhh]jX)}(h space to padh]h space to pad}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjQFubeh}(h]h ]h"]h$]h&]uh1jhj5FubjX)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5Fubj )}(hEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire. May return error in out of memory cases. The skb is freed on error.h](jX)}(hEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire.h]hEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFubjX)}(hCMay return error in out of memory cases. The skb is freed on error.h]hCMay return error in out of memory cases. The skb is freed on error.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFubeh}(h]h ]h"]h$]h&]uh1j hjFhMhj5Fubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_empty (C function)c.skb_queue_emptyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h5int skb_queue_empty (const struct sk_buff_head *list)h]h)}(h4int skb_queue_empty(const struct sk_buff_head *list)h](j)}(hinth]hint}(hj,GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(GhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj;GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(Ghhhj:GhMubj)}(hskb_queue_emptyh]j%)}(hskb_queue_emptyh]hskb_queue_empty}(hjMGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj(Ghhhj:GhMubj)}(h!(const struct sk_buff_head *list)h]j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hjiGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjeGubj)}(h h]h }(hjvGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeGubh)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjeGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeGubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]j')}jjOGsbc.skb_queue_emptyasbuh1hhjeGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeGubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeGubj%)}(hlisth]hlist}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjaGubah}(h]h ]h"]h$]h&]j<j=uh1jhj(Ghhhj:GhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$Ghhhj:GhMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:GhMhj!GhhubjS)}(hhh]jX)}(hcheck if a queue is emptyh]hcheck if a queue is empty}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjHhhubah}(h]h ]h"]h$]h&]uh1jRhj!Ghhhj:GhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` queue head **Description** Returns true if the queue is empty, false otherwise.h](jX)}(h**Parameters**h]j)}(hj)Hh]h Parameters}(hj+HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Hubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj#Hubj)}(hhh]j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjHHh]hconst struct sk_buff_head *list}(hjJHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFHubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjBHubj)}(hhh]jX)}(h queue headh]h queue head}(hjaHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]HhMhj^Hubah}(h]h ]h"]h$]h&]uh1jhjBHubeh}(h]h ]h"]h$]h&]uh1jhj]HhMhj?Hubah}(h]h ]h"]h$]h&]uh1jhj#HubjX)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj#Hubj )}(h4Returns true if the queue is empty, false otherwise.h]jX)}(hjHh]h4Returns true if the queue is empty, false otherwise.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjHubah}(h]h ]h"]h$]h&]uh1j hjHhMhj#Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%skb_queue_empty_lockless (C function)c.skb_queue_empty_locklesshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h?bool skb_queue_empty_lockless (const struct sk_buff_head *list)h]h)}(h>bool skb_queue_empty_lockless(const struct sk_buff_head *list)h](j)}(hjTh]hbool}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjHhMubj)}(hskb_queue_empty_locklessh]j%)}(hskb_queue_empty_locklessh]hskb_queue_empty_lockless}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjHhMubj)}(h!(const struct sk_buff_head *list)h]j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hj IhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj Iubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Iubh)}(hjh]hstruct}(hj(IhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj Iubj)}(h h]h }(hj5IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Iubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjFIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHImodnameN classnameNjj!)}j$]j')}jjHsbc.skb_queue_empty_locklessasbuh1hhj Iubj)}(h h]h }(hjfIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Iubj;)}(hj>h]h*}(hjtIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj Iubj%)}(hlisth]hlist}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Iubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubah}(h]h ]h"]h$]h&]j<j=uh1jhjHhhhjHhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhjHhMubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhMhjHhhubjS)}(hhh]jX)}(hcheck if a queue is emptyh]hcheck if a queue is empty}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjHhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjIjxjIjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` queue head **Description** Returns true if the queue is empty, false otherwise. This variant can be used in lockless contexts.h](jX)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjIubj)}(hhh]j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjIh]hconst struct sk_buff_head *list}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjIubj)}(hhh]jX)}(h queue headh]h queue head}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubah}(h]h ]h"]h$]h&]uh1jhjIubjX)}(h**Description**h]j)}(hj'Jh]h Description}(hj)JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Jubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjIubj )}(hcReturns true if the queue is empty, false otherwise. This variant can be used in lockless contexts.h]jX)}(hcReturns true if the queue is empty, false otherwise. This variant can be used in lockless contexts.h]hcReturns true if the queue is empty, false otherwise. This variant can be used in lockless contexts.}(hjAJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj=Jubah}(h]h ]h"]h$]h&]uh1j hjOJhMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_is_last (C function)c.skb_queue_is_lasthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSbool skb_queue_is_last (const struct sk_buff_head *list, const struct sk_buff *skb)h]h)}(hRbool skb_queue_is_last(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hjTh]hbool}(hjvJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrJhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrJhhhjJhMubj)}(hskb_queue_is_lasth]j%)}(hskb_queue_is_lasth]hskb_queue_is_last}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrJhhhjJhMubj)}(h<(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]j')}jjJsbc.skb_queue_is_lastasbuh1hhjJubj)}(h h]h }(hj KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hlisth]hlist}(hj&KhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj?KhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;Kubj)}(h h]h }(hjLKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;Kubh)}(hjh]hstruct}(hjZKhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;Kubj)}(h h]h }(hjgKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;Kubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjxKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzKmodnameN classnameNjj!)}j$]jKc.skb_queue_is_lastasbuh1hhj;Kubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;Kubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;Kubj%)}(hskbh]hskb}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;Kubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubeh}(h]h ]h"]h$]h&]j<j=uh1jhjrJhhhjJhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnJhhhjJhMubah}(h]jiJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhMhjkJhhubjS)}(hhh]jX)}(h+check if skb is the last entry in the queueh]h+check if skb is the last entry in the queue}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jRhjkJhhhjJhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` queue head ``const struct sk_buff *skb`` buffer **Description** Returns true if **skb** is the last buffer on the list.h](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKubj)}(hhh](j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjLh]hconst struct sk_buff_head *list}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjLubj)}(hhh]jX)}(h queue headh]h queue head}(hj5LhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1LhMhj2Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj1LhMhjLubj)}(h%``const struct sk_buff *skb`` buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hjULh]hconst struct sk_buff *skb}(hjWLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjOLubj)}(hhh]jX)}(hbufferh]hbuffer}(hjnLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjLhMhjkLubah}(h]h ]h"]h$]h&]uh1jhjOLubeh}(h]h ]h"]h$]h&]uh1jhjjLhMhjLubeh}(h]h ]h"]h$]h&]uh1jhjKubjX)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKubj )}(h7Returns true if **skb** is the last buffer on the list.h]jX)}(hjLh](hReturns true if }(hjLhhhNhNubj)}(h**skb**h]hskb}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh is the last buffer on the list.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjLubah}(h]h ]h"]h$]h&]uh1j hjLhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_is_first (C function)c.skb_queue_is_firsthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hTbool skb_queue_is_first (const struct sk_buff_head *list, const struct sk_buff *skb)h]h)}(hSbool skb_queue_is_first(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hjTh]hbool}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLhhhjLhMubj)}(hskb_queue_is_firsth]j%)}(hskb_queue_is_firsth]hskb_queue_is_first}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Mubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLhhhjLhMubj)}(h<(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hj,MhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(Mubj)}(h h]h }(hj9MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(Mubh)}(hjh]hstruct}(hjGMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(Mubj)}(h h]h }(hjTMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(Mubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjeMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgMmodnameN classnameNjj!)}j$]j')}jjMsbc.skb_queue_is_firstasbuh1hhj(Mubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(Mubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(Mubj%)}(hlisth]hlist}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(Mubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$Mubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjMmodnameN classnameNjj!)}j$]jMc.skb_queue_is_firstasbuh1hhjMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(hskbh]hskb}(hj+NhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$Mubeh}(h]h ]h"]h$]h&]j<j=uh1jhjLhhhjLhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjLhMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjLhMhjLhhubjS)}(hhh]jX)}(h,check if skb is the first entry in the queueh]h,check if skb is the first entry in the queue}(hjUNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjRNhhubah}(h]h ]h"]h$]h&]uh1jRhjLhhhjLhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmNjxjmNjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` queue head ``const struct sk_buff *skb`` buffer **Description** Returns true if **skb** is the first buffer on the list.h](jX)}(h**Parameters**h]j)}(hjwNh]h Parameters}(hjyNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjqNubj)}(hhh](j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjNh]hconst struct sk_buff_head *list}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjNubj)}(hhh]jX)}(h queue headh]h queue head}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubj)}(h%``const struct sk_buff *skb`` buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hjNh]hconst struct sk_buff *skb}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjNubj)}(hhh]jX)}(hbufferh]hbuffer}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubeh}(h]h ]h"]h$]h&]uh1jhjqNubjX)}(h**Description**h]j)}(hj Oh]h Description}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjqNubj )}(h8Returns true if **skb** is the first buffer on the list.h]jX)}(hj"Oh](hReturns true if }(hj$OhhhNhNubj)}(h**skb**h]hskb}(hj+OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Oubh! is the first buffer on the list.}(hj$OhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj Oubah}(h]h ]h"]h$]h&]uh1j hjCOhMhjqNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_next (C function)c.skb_queue_nexthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h\struct sk_buff * skb_queue_next (const struct sk_buff_head *list, const struct sk_buff *skb)h]h)}(hZstruct sk_buff *skb_queue_next(const struct sk_buff_head *list, const struct sk_buff *skb)h](h)}(hjh]hstruct}(hjjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfOhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjxOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfOhhhjwOhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjOmodnameN classnameNjj!)}j$]j')}jskb_queue_nextsbc.skb_queue_nextasbuh1hhjfOhhhjwOhMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfOhhhjwOhMubj;)}(hj>h]h*}(hjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfOhhhjwOhMubj)}(hskb_queue_nexth]j%)}(hjOh]hskb_queue_next}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfOhhhjwOhMubj)}(h<(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jOc.skb_queue_nextasbuh1hhjOubj)}(h h]h }(hj;PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjIPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hlisth]hlist}(hjVPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjoPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkPubj)}(h h]h }(hj|PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkPubh)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkPubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jOc.skb_queue_nextasbuh1hhjkPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkPubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkPubj%)}(hskbh]hskb}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubeh}(h]h ]h"]h$]h&]j<j=uh1jhjfOhhhjwOhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbOhhhjwOhMubah}(h]j]Oah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwOhMhj_OhhubjS)}(hhh]jX)}(h#return the next packet in the queueh]h#return the next packet in the queue}(hj QhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jRhj_OhhhjwOhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#Qjxj#Qjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff_head *list`` queue head ``const struct sk_buff *skb`` current buffer **Description** Return the next packet in **list** after **skb**. It is only valid to call this if skb_queue_is_last() evaluates to false.h](jX)}(h**Parameters**h]j)}(hj-Qh]h Parameters}(hj/QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Qubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj'Qubj)}(hhh](j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjLQh]hconst struct sk_buff_head *list}(hjNQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjFQubj)}(hhh]jX)}(h queue headh]h queue head}(hjeQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjaQhMhjbQubah}(h]h ]h"]h$]h&]uh1jhjFQubeh}(h]h ]h"]h$]h&]uh1jhjaQhMhjCQubj)}(h-``const struct sk_buff *skb`` current buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hjQh]hconst struct sk_buff *skb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjQubj)}(hhh]jX)}(hcurrent bufferh]hcurrent buffer}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjCQubeh}(h]h ]h"]h$]h&]uh1jhj'QubjX)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj'Qubj )}(h{Return the next packet in **list** after **skb**. It is only valid to call this if skb_queue_is_last() evaluates to false.h]jX)}(h{Return the next packet in **list** after **skb**. It is only valid to call this if skb_queue_is_last() evaluates to false.h](hReturn the next packet in }(hjQhhhNhNubj)}(h**list**h]hlist}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh after }(hjQhhhNhNubj)}(h**skb**h]hskb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubhK. It is only valid to call this if skb_queue_is_last() evaluates to false.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjQubah}(h]h ]h"]h$]h&]uh1j hj RhMhj'Qubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_prev (C function)c.skb_queue_prevhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h\struct sk_buff * skb_queue_prev (const struct sk_buff_head *list, const struct sk_buff *skb)h]h)}(hZstruct sk_buff *skb_queue_prev(const struct sk_buff_head *list, const struct sk_buff *skb)h](h)}(hjh]hstruct}(hj3RhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/RhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjARhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Rhhhj@RhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjRRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjORubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTRmodnameN classnameNjj!)}j$]j')}jskb_queue_prevsbc.skb_queue_prevasbuh1hhj/Rhhhj@RhMubj)}(h h]h }(hjsRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Rhhhj@RhMubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/Rhhhj@RhMubj)}(hskb_queue_prevh]j%)}(hjpRh]hskb_queue_prev}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/Rhhhj@RhMubj)}(h<(const struct sk_buff_head *list, const struct sk_buff *skb)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]jnRc.skb_queue_prevasbuh1hhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hlisth]hlist}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj8ShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4Subj)}(h h]h }(hjEShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4Subh)}(hjh]hstruct}(hjSShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4Subj)}(h h]h }(hj`ShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4Subh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjqShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsSmodnameN classnameNjj!)}j$]jnRc.skb_queue_prevasbuh1hhj4Subj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4Subj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4Subj%)}(hskbh]hskb}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4Subeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubeh}(h]h ]h"]h$]h&]j<j=uh1jhj/Rhhhj@RhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+Rhhhj@RhMubah}(h]j&Rah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@RhMhj(RhhubjS)}(hhh]jX)}(h#return the prev packet in the queueh]h#return the prev packet in the queue}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjShhubah}(h]h ]h"]h$]h&]uh1jRhj(Rhhhj@RhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjSjxjSjyjzj{uh1hhhhj[hNhNubj})}(hX **Parameters** ``const struct sk_buff_head *list`` queue head ``const struct sk_buff *skb`` current buffer **Description** Return the prev packet in **list** before **skb**. It is only valid to call this if skb_queue_is_first() evaluates to false.h](jX)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjSubj)}(hhh](j)}(h/``const struct sk_buff_head *list`` queue head h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjTh]hconst struct sk_buff_head *list}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjTubj)}(hhh]jX)}(h queue headh]h queue head}(hj.ThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*ThMhj+Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj*ThMhj Tubj)}(h-``const struct sk_buff *skb`` current buffer h](j)}(h``const struct sk_buff *skb``h]j)}(hjNTh]hconst struct sk_buff *skb}(hjPThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjHTubj)}(hhh]jX)}(hcurrent bufferh]hcurrent buffer}(hjgThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjcThMhjdTubah}(h]h ]h"]h$]h&]uh1jhjHTubeh}(h]h ]h"]h$]h&]uh1jhjcThMhj Tubeh}(h]h ]h"]h$]h&]uh1jhjSubjX)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjSubj )}(h}Return the prev packet in **list** before **skb**. It is only valid to call this if skb_queue_is_first() evaluates to false.h]jX)}(h}Return the prev packet in **list** before **skb**. It is only valid to call this if skb_queue_is_first() evaluates to false.h](hReturn the prev packet in }(hjThhhNhNubj)}(h**list**h]hlist}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh before }(hjThhhNhNubj)}(h**skb**h]hskb}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubhL. It is only valid to call this if skb_queue_is_first() evaluates to false.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjTubah}(h]h ]h"]h$]h&]uh1j hjThMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_get (C function) c.skb_gethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h.struct sk_buff * skb_get (struct sk_buff *skb)h]h)}(h,struct sk_buff *skb_get(struct sk_buff *skb)h](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjThhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjThhhj UhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]j')}jskb_getsb c.skb_getasbuh1hhjThhhj UhMubj)}(h h]h }(hjh]h*}(hjJUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjThhhj UhMubj)}(hskb_geth]j%)}(hj9Uh]hskb_get}(hj[UhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWUubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjThhhj UhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjvUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrUubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]j7U c.skb_getasbuh1hhjrUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrUubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrUubj%)}(hskbh]hskb}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnUubah}(h]h ]h"]h$]h&]j<j=uh1jhjThhhj UhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjThhhj UhMubah}(h]jTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj UhMhjThhubjS)}(hhh]jX)}(hreference bufferh]hreference buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjUhhubah}(h]h ]h"]h$]h&]uh1jRhjThhhj UhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjVjxjVjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer to reference **Description** Makes another reference to a socket buffer and returns a pointer to the buffer.h](jX)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjVubj)}(hhh]j)}(h,``struct sk_buff *skb`` buffer to reference h](j)}(h``struct sk_buff *skb``h]j)}(hj8Vh]hstruct sk_buff *skb}(hj:VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Vubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj2Vubj)}(hhh]jX)}(hbuffer to referenceh]hbuffer to reference}(hjQVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMVhMhjNVubah}(h]h ]h"]h$]h&]uh1jhj2Vubeh}(h]h ]h"]h$]h&]uh1jhjMVhMhj/Vubah}(h]h ]h"]h$]h&]uh1jhjVubjX)}(h**Description**h]j)}(hjsVh]h Description}(hjuVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqVubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjVubj )}(hOMakes another reference to a socket buffer and returns a pointer to the buffer.h]jX)}(hOMakes another reference to a socket buffer and returns a pointer to the buffer.h]hOMakes another reference to a socket buffer and returns a pointer to the buffer.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjVubah}(h]h ]h"]h$]h&]uh1j hjVhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_cloned (C function) c.skb_clonedhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h*int skb_cloned (const struct sk_buff *skb)h]h)}(h)int skb_cloned(const struct sk_buff *skb)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVhhhjVhMubj)}(h skb_clonedh]j%)}(h skb_clonedh]h skb_cloned}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjVhhhjVhMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hj WhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hj'WhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj8WhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5Wubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:WmodnameN classnameNjj!)}j$]j')}jjVsb c.skb_clonedasbuh1hhjVubj)}(h h]h }(hjXWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj;)}(hj>h]h*}(hjfWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj%)}(hskbh]hskb}(hjsWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjVubah}(h]h ]h"]h$]h&]j<j=uh1jhjVhhhjVhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjVhhhjVhMubah}(h]jVah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjVhMhjVhhubjS)}(hhh]jX)}(his the buffer a cloneh]his the buffer a clone}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjWhhubah}(h]h ]h"]h$]h&]uh1jRhjVhhhjVhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhj[hNhNubj})}(hX#**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Returns true if the buffer was generated with skb_clone() and is one of multiple shared copies of the buffer. Cloned buffers are shared data so must not be written to under normal circumstances.h](jX)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjWubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjWh]hconst struct sk_buff *skb}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjWubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubjX)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjWubj )}(hReturns true if the buffer was generated with skb_clone() and is one of multiple shared copies of the buffer. Cloned buffers are shared data so must not be written to under normal circumstances.h]jX)}(hReturns true if the buffer was generated with skb_clone() and is one of multiple shared copies of the buffer. Cloned buffers are shared data so must not be written to under normal circumstances.h]hReturns true if the buffer was generated with skb_clone() and is one of multiple shared copies of the buffer. Cloned buffers are shared data so must not be written to under normal circumstances.}(hj3XhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj/Xubah}(h]h ]h"]h$]h&]uh1j hjAXhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_header_cloned (C function)c.skb_header_clonedhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h1int skb_header_cloned (const struct sk_buff *skb)h]h)}(h0int skb_header_cloned(const struct sk_buff *skb)h](j)}(hinth]hint}(hjhXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdXhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjwXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdXhhhjvXhMubj)}(hskb_header_clonedh]j%)}(hskb_header_clonedh]hskb_header_cloned}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjdXhhhjvXhMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubh)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j')}jjXsbc.skb_header_clonedasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj;)}(hj>h]h*}(hj YhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjXubj%)}(hskbh]hskb}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubah}(h]h ]h"]h$]h&]j<j=uh1jhjdXhhhjvXhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj`XhhhjvXhMubah}(h]j[Xah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjvXhMhj]XhhubjS)}(hhh]jX)}(his the header a cloneh]his the header a clone}(hjCYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj@Yhhubah}(h]h ]h"]h$]h&]uh1jRhj]XhhhjvXhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj[Yjxj[Yjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Returns true if modifying the header part of the buffer requires the data to be copied.h](jX)}(h**Parameters**h]j)}(hjeYh]h Parameters}(hjgYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcYubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj_Yubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjYh]hconst struct sk_buff *skb}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj~Yubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhj~Yubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj{Yubah}(h]h ]h"]h$]h&]uh1jhj_YubjX)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj_Yubj )}(hWReturns true if modifying the header part of the buffer requires the data to be copied.h]jX)}(hWReturns true if modifying the header part of the buffer requires the data to be copied.h]hWReturns true if modifying the header part of the buffer requires the data to be copied.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjYubah}(h]h ]h"]h$]h&]uh1j hjYhMhj_Yubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!__skb_header_release (C function)c.__skb_header_releasehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h/void __skb_header_release (struct sk_buff *skb)h]h)}(h.void __skb_header_release(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ZhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM+ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ZhhhjZhM+ubj)}(h__skb_header_releaseh]j%)}(h__skb_header_releaseh]h__skb_header_release}(hj/ZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+Zubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj ZhhhjZhM+ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjKZhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGZubj)}(h h]h }(hjXZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGZubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjiZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjkZmodnameN classnameNjj!)}j$]j')}jj1Zsbc.__skb_header_releaseasbuh1hhjGZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGZubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGZubj%)}(hskbh]hskb}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjCZubah}(h]h ]h"]h$]h&]j<j=uh1jhj ZhhhjZhM+ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhjZhM+ubah}(h]jZah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjZhM+hjZhhubjS)}(hhh]jX)}(h allow clones to use the headroomh]h allow clones to use the headroom}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM+hjZhhubah}(h]h ]h"]h$]h&]uh1jRhjZhhhjZhM+ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZjxjZjyjzj{uh1hhhhj[hNhNubj})}(hx**Parameters** ``struct sk_buff *skb`` buffer to operate on **Description** See "DOC: dataref and headerless skbs".h](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM/hjZubj)}(hhh]j)}(h-``struct sk_buff *skb`` buffer to operate on h](j)}(h``struct sk_buff *skb``h]j)}(hj[h]hstruct sk_buff *skb}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj [ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM,hj [ubj)}(hhh]jX)}(hbuffer to operate onh]hbuffer to operate on}(hj([hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$[hM,hj%[ubah}(h]h ]h"]h$]h&]uh1jhj [ubeh}(h]h ]h"]h$]h&]uh1jhj$[hM,hj[ubah}(h]h ]h"]h$]h&]uh1jhjZubjX)}(h**Description**h]j)}(hjJ[h]h Description}(hjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH[ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM.hjZubjX)}(h'See "DOC: dataref and headerless skbs".h]h+See “DOC: dataref and headerless skbs”.}(hj`[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM-hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_shared (C function) c.skb_sharedhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h*int skb_shared (const struct sk_buff *skb)h]h)}(h)int skb_shared(const struct sk_buff *skb)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM8ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[hhhj[hM8ubj)}(h skb_sharedh]j%)}(h skb_sharedh]h skb_shared}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj[hhhj[hM8ubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj[sb c.skb_sharedasbuh1hhj[ubj)}(h h]h }(hj%\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hj3\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hskbh]hskb}(hj@\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[ubah}(h]h ]h"]h$]h&]j<j=uh1jhj[hhhj[hM8ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj[hhhj[hM8ubah}(h]j[ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[hM8hj[hhubjS)}(hhh]jX)}(his the buffer sharedh]his the buffer shared}(hjj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM8hjg\hhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhj[hM8ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Returns true if more than one person has a reference to this buffer.h](jX)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM<hj\ubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hj\h]hconst struct sk_buff *skb}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM9hj\ubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hM9hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM9hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubjX)}(h**Description**h]j)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM;hj\ubj )}(hDReturns true if more than one person has a reference to this buffer.h]jX)}(hDReturns true if more than one person has a reference to this buffer.h]hDReturns true if more than one person has a reference to this buffer.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM:hj\ubah}(h]h ]h"]h$]h&]uh1j hj]hM:hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_share_check (C function)c.skb_share_checkhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hAstruct sk_buff * skb_share_check (struct sk_buff *skb, gfp_t pri)h]h)}(h?struct sk_buff *skb_share_check(struct sk_buff *skb, gfp_t pri)h](h)}(hjh]hstruct}(hj5]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1]hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMDubj)}(h h]h }(hjC]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1]hhhjB]hMDubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjT]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQ]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjV]modnameN classnameNjj!)}j$]j')}jskb_share_checksbc.skb_share_checkasbuh1hhj1]hhhjB]hMDubj)}(h h]h }(hju]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1]hhhjB]hMDubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1]hhhjB]hMDubj)}(hskb_share_checkh]j%)}(hjr]h]hskb_share_check}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj1]hhhjB]hMDubj)}(h (struct sk_buff *skb, gfp_t pri)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]modnameN classnameNjj!)}j$]jp]c.skb_share_checkasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]ubj%)}(hskbh]hskb}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(h gfp_t prih](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hj"^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$^modnameN classnameNjj!)}j$]jp]c.skb_share_checkasbuh1hhj^ubj)}(h h]h }(hj@^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj%)}(hprih]hpri}(hjN^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj1]hhhjB]hMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj-]hhhjB]hMDubah}(h]j(]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjB]hMDhj*]hhubjS)}(hhh]jX)}(h,check if buffer is shared and if so clone ith]h,check if buffer is shared and if so clone it}(hjx^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMDhju^hhubah}(h]h ]h"]h$]h&]uh1jRhj*]hhhjB]hMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj^jxj^jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to check ``gfp_t pri`` priority for memory allocation **Description** If the buffer is shared the buffer is cloned and the old copy drops a reference. A new clone with a single reference is returned. If the buffer is not shared the original buffer is returned. When being called from interrupt status or with spinlocks held pri must be GFP_ATOMIC. NULL is returned on a memory allocation failure.h](jX)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhj^ubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to check h](j)}(h``struct sk_buff *skb``h]j)}(hj^h]hstruct sk_buff *skb}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMEhj^ubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hMEhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMEhj^ubj)}(h-``gfp_t pri`` priority for memory allocation h](j)}(h ``gfp_t pri``h]j)}(hj^h]h gfp_t pri}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMFhj^ubj)}(hhh]jX)}(hpriority for memory allocationh]hpriority for memory allocation}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMFhj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj_hMFhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^ubjX)}(h**Description**h]j)}(hj-_h]h Description}(hj/_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+_ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhj^ubj )}(hXGIf the buffer is shared the buffer is cloned and the old copy drops a reference. A new clone with a single reference is returned. If the buffer is not shared the original buffer is returned. When being called from interrupt status or with spinlocks held pri must be GFP_ATOMIC. NULL is returned on a memory allocation failure.h](jX)}(hXIf the buffer is shared the buffer is cloned and the old copy drops a reference. A new clone with a single reference is returned. If the buffer is not shared the original buffer is returned. When being called from interrupt status or with spinlocks held pri must be GFP_ATOMIC.h]hXIf the buffer is shared the buffer is cloned and the old copy drops a reference. A new clone with a single reference is returned. If the buffer is not shared the original buffer is returned. When being called from interrupt status or with spinlocks held pri must be GFP_ATOMIC.}(hjG_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMGhjC_ubjX)}(h0NULL is returned on a memory allocation failure.h]h0NULL is returned on a memory allocation failure.}(hjV_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMMhjC_ubeh}(h]h ]h"]h$]h&]uh1j hjU_hMGhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_unshare (C function) c.skb_unsharehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=struct sk_buff * skb_unshare (struct sk_buff *skb, gfp_t pri)h]h)}(h;struct sk_buff *skb_unshare(struct sk_buff *skb, gfp_t pri)h](h)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMgubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_hhhj_hMgubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_modnameN classnameNjj!)}j$]j')}j skb_unsharesb c.skb_unshareasbuh1hhj_hhhj_hMgubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_hhhj_hMgubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_hhhj_hMgubj)}(h skb_unshareh]j%)}(hj_h]h skb_unshare}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj_hhhj_hMgubj)}(h (struct sk_buff *skb, gfp_t pri)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj#`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj `ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%`modnameN classnameNjj!)}j$]j_ c.skb_unshareasbuh1hhj`ubj)}(h h]h }(hjA`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj;)}(hj>h]h*}(hjO`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`ubj%)}(hskbh]hskb}(hj\`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubj)}(h gfp_t prih](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjx`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hju`ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjz`modnameN classnameNjj!)}j$]j_ c.skb_unshareasbuh1hhjq`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq`ubj%)}(hprih]hpri}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj_hhhj_hMgubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj_hhhj_hMgubah}(h]j~_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj_hMghj_hhubjS)}(hhh]jX)}(hmake a copy of a shared bufferh]hmake a copy of a shared buffer}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMghj`hhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhj_hMgubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`jxj`jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to check ``gfp_t pri`` priority for memory allocation **Description** If the socket buffer is a clone then this function creates a new copy of the data, drops a reference count on the old copy and returns the new copy with the reference count at 1. If the buffer is not a clone the original buffer is returned. When called with a spinlock held or from interrupt state **pri** must be ``GFP_ATOMIC`` ``NULL`` is returned on a memory allocation failure.h](jX)}(h**Parameters**h]j)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMkhj`ubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to check h](j)}(h``struct sk_buff *skb``h]j)}(hjah]hstruct sk_buff *skb}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj aubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhhj aubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hj(ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$ahMhhj%aubah}(h]h ]h"]h$]h&]uh1jhj aubeh}(h]h ]h"]h$]h&]uh1jhj$ahMhhjaubj)}(h-``gfp_t pri`` priority for memory allocation h](j)}(h ``gfp_t pri``h]j)}(hjHah]h gfp_t pri}(hjJahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFaubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMihjBaubj)}(hhh]jX)}(hpriority for memory allocationh]hpriority for memory allocation}(hjaahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]ahMihj^aubah}(h]h ]h"]h$]h&]uh1jhjBaubeh}(h]h ]h"]h$]h&]uh1jhj]ahMihjaubeh}(h]h ]h"]h$]h&]uh1jhj`ubjX)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMkhj`ubj )}(hX~If the socket buffer is a clone then this function creates a new copy of the data, drops a reference count on the old copy and returns the new copy with the reference count at 1. If the buffer is not a clone the original buffer is returned. When called with a spinlock held or from interrupt state **pri** must be ``GFP_ATOMIC`` ``NULL`` is returned on a memory allocation failure.h](jX)}(hXHIf the socket buffer is a clone then this function creates a new copy of the data, drops a reference count on the old copy and returns the new copy with the reference count at 1. If the buffer is not a clone the original buffer is returned. When called with a spinlock held or from interrupt state **pri** must be ``GFP_ATOMIC``h](hX*If the socket buffer is a clone then this function creates a new copy of the data, drops a reference count on the old copy and returns the new copy with the reference count at 1. If the buffer is not a clone the original buffer is returned. When called with a spinlock held or from interrupt state }(hjahhhNhNubj)}(h**pri**h]hpri}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh must be }(hjahhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMjhjaubjX)}(h4``NULL`` is returned on a memory allocation failure.h](j)}(h``NULL``h]hNULL}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh, is returned on a memory allocation failure.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMphjaubeh}(h]h ]h"]h$]h&]uh1j hjahMjhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_peek (C function) c.skb_peekhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hh]h*}(hj]bhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj bhhhjbhMubj)}(hskb_peekh]j%)}(hjLbh]hskb_peek}(hjnbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjbubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj bhhhjbhMubj)}(h"(const struct sk_buff_head *list_)h]j)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbmodnameN classnameNjj!)}j$]jJb c.skb_peekasbuh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(hlist_h]hlist_}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubah}(h]h ]h"]h$]h&]j<j=uh1jhj bhhhjbhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbhhhjbhMubah}(h]jbah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjbhMhjbhhubjS)}(hhh]jX)}(h-peek at the head of an :c:type:`sk_buff_head`h](hpeek at the head of an }(hj%chhhNhNubh)}(h:c:type:`sk_buff_head`h]j)}(hj/ch]h sk_buff_head}(hj1chhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj-cubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jJb c.skb_peekasbj sk_buff_headuh1hhjhMphj%cubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj"chhubah}(h]h ]h"]h$]h&]uh1jRhjbhhhjbhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjacjxjacjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff_head *list_`` list to peek at **Description** Peek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this. Returns ``NULL`` for an empty list or a pointer to the head element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](jX)}(h**Parameters**h]j)}(hjkch]h Parameters}(hjmchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjicubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjecubj)}(hhh]j)}(h5``const struct sk_buff_head *list_`` list to peek at h](j)}(h$``const struct sk_buff_head *list_``h]j)}(hjch]h const struct sk_buff_head *list_}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubj)}(hhh]jX)}(hlist to peek ath]hlist to peek at}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjecubjX)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjecubj )}(hXPeek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this. Returns ``NULL`` for an empty list or a pointer to the head element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](jX)}(hPeek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this.h](hPeek an }(hjchhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjch]hsk_buff}(hjchhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubh. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjdhMhjcubjX)}(hReturns ``NULL`` for an empty list or a pointer to the head element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](hReturns }(hjdhhhNhNubj)}(h``NULL``h]hNULL}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh for an empty list or a pointer to the head element. The reference count is not incremented and the reference is therefore volatile. Use with caution.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubeh}(h]h ]h"]h$]h&]uh1j hjdhMhjecubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_peek (C function) c.__skb_peekhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h>struct sk_buff * __skb_peek (const struct sk_buff_head *list_)h]h)}(hh]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTdhhhjedhMubj)}(h __skb_peekh]j%)}(hjdh]h __skb_peek}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjTdhhhjedhMubj)}(h"(const struct sk_buff_head *list_)h]j)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubh)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj ehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj emodnameN classnameNjj!)}j$]jd c.__skb_peekasbuh1hhjdubj)}(h h]h }(hj)ehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hj7ehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hlist_h]hlist_}(hjDehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjdubah}(h]h ]h"]h$]h&]j<j=uh1jhjTdhhhjedhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjPdhhhjedhMubah}(h]jKdah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjedhMhjMdhhubjS)}(hhh]jX)}(h6peek at the head of a non-empty :c:type:`sk_buff_head`h](h peek at the head of a non-empty }(hjnehhhNhNubh)}(h:c:type:`sk_buff_head`h]j)}(hjxeh]h sk_buff_head}(hjzehhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjveubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jd c.__skb_peekasbj sk_buff_headuh1hhjhMphjneubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjkehhubah}(h]h ]h"]h$]h&]uh1jRhjMdhhhjedhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjejxjejyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list_`` list to peek at **Description** Like skb_peek(), but the caller knows that the list is not empty.h](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjeubj)}(hhh]j)}(h5``const struct sk_buff_head *list_`` list to peek at h](j)}(h$``const struct sk_buff_head *list_``h]j)}(hjeh]h const struct sk_buff_head *list_}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjeubj)}(hhh]jX)}(hlist to peek ath]hlist to peek at}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj fubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjeubj )}(hALike skb_peek(), but the caller knows that the list is not empty.h]jX)}(hj&fh]hALike skb_peek(), but the caller knows that the list is not empty.}(hj(fhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj$fubah}(h]h ]h"]h$]h&]uh1j hj5fhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_peek_next (C function)c.skb_peek_nexthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hVstruct sk_buff * skb_peek_next (struct sk_buff *skb, const struct sk_buff_head *list_)h]h)}(hTstruct sk_buff *skb_peek_next(struct sk_buff *skb, const struct sk_buff_head *list_)h](h)}(hjh]hstruct}(hj\fhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjXfhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXfhhhjifhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj{fhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}fmodnameN classnameNjj!)}j$]j')}j skb_peek_nextsbc.skb_peek_nextasbuh1hhjXfhhhjifhMubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXfhhhjifhMubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjXfhhhjifhMubj)}(h skb_peek_nexth]j%)}(hjfh]h skb_peek_next}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXfhhhjifhMubj)}(h7(struct sk_buff *skb, const struct sk_buff_head *list_)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]jfc.skb_peek_nextasbuh1hhjfubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hj>h]h*}(hj ghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hskbh]hskb}(hj-ghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjFghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBgubj)}(h h]h }(hjSghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBgubh)}(hjh]hstruct}(hjaghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBgubj)}(h h]h }(hjnghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBgubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|gubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]jfc.skb_peek_nextasbuh1hhjBgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBgubj%)}(hlist_h]hlist_}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubeh}(h]h ]h"]h$]h&]j<j=uh1jhjXfhhhjifhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjTfhhhjifhMubah}(h]jOfah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjifhMhjQfhhubjS)}(hhh]jX)}(h-peek skb following the given one from a queueh]h-peek skb following the given one from a queue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjghhubah}(h]h ]h"]h$]h&]uh1jRhjQfhhhjifhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjgjxjgjyjzj{uh1hhhhj[hNhNubj})}(hXI**Parameters** ``struct sk_buff *skb`` skb to start from ``const struct sk_buff_head *list_`` list to peek at **Description** Returns ``NULL`` when the end of the list is met or a pointer to the next element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](jX)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjgubj)}(hhh](j)}(h*``struct sk_buff *skb`` skb to start from h](j)}(h``struct sk_buff *skb``h]j)}(hj#hh]hstruct sk_buff *skb}(hj%hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!hubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhubj)}(hhh]jX)}(hskb to start fromh]hskb to start from}(hjh]h*}(hjFihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhhjihMubj)}(h skb_peek_tailh]j%)}(hj5ih]h skb_peek_tail}(hjWihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhjihMubj)}(h"(const struct sk_buff_head *list_)h]j)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjrihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjniubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjniubh)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjniubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjniubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]j3ic.skb_peek_tailasbuh1hhjniubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjniubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjniubj%)}(hlist_h]hlist_}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjniubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjjiubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjihMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhjihMubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjihMhjhhhubjS)}(hhh]jX)}(h-peek at the tail of an :c:type:`sk_buff_head`h](hpeek at the tail of an }(hjjhhhNhNubh)}(h:c:type:`sk_buff_head`h]j)}(hjjh]h sk_buff_head}(hjjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]j3ic.skb_peek_tailasbj sk_buff_headuh1hhjhMphjjubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj jhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhhjihMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjjxjJjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff_head *list_`` list to peek at **Description** Peek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this. Returns ``NULL`` for an empty list or a pointer to the tail element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](jX)}(h**Parameters**h]j)}(hjTjh]h Parameters}(hjVjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjNjubj)}(hhh]j)}(h5``const struct sk_buff_head *list_`` list to peek at h](j)}(h$``const struct sk_buff_head *list_``h]j)}(hjsjh]h const struct sk_buff_head *list_}(hjujhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjmjubj)}(hhh]jX)}(hlist to peek ath]hlist to peek at}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjmjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjjubah}(h]h ]h"]h$]h&]uh1jhjNjubjX)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjNjubj )}(hXPeek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this. Returns ``NULL`` for an empty list or a pointer to the tail element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](jX)}(hPeek an :c:type:`sk_buff`. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this.h](hPeek an }(hjjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjjh]hsk_buff}(hjjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjjubh. Unlike most other operations you _MUST_ be careful with this one. A peek leaves the buffer on the list and someone else may run off with it. You must hold the appropriate locks or have a private queue to do this.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjjhMhjjubjX)}(hReturns ``NULL`` for an empty list or a pointer to the tail element. The reference count is not incremented and the reference is therefore volatile. Use with caution.h](hReturns }(hjjhhhNhNubj)}(h``NULL``h]hNULL}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh for an empty list or a pointer to the tail element. The reference count is not incremented and the reference is therefore volatile. Use with caution.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjjubeh}(h]h ]h"]h$]h&]uh1j hjjhMhjNjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_len (C function)c.skb_queue_lenhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6__u32 skb_queue_len (const struct sk_buff_head *list_)h]h)}(h5__u32 skb_queue_len(const struct sk_buff_head *list_)h](h)}(hhh]j%)}(h__u32h]h__u32}(hjDkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjFkmodnameN classnameNjj!)}j$]j')}j skb_queue_lensbc.skb_queue_lenasbuh1hhj=khhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjfkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=khhhjekhMubj)}(h skb_queue_lenh]j%)}(hjbkh]h skb_queue_len}(hjxkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtkubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj=khhhjekhMubj)}(h"(const struct sk_buff_head *list_)h]j)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjkmodnameN classnameNjj!)}j$]j`kc.skb_queue_lenasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hj>h]h*}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(hlist_h]hlist_}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubah}(h]h ]h"]h$]h&]j<j=uh1jhj=khhhjekhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj9khhhjekhMubah}(h]j4kah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjekhMhj6khhubjS)}(hhh]jX)}(hget queue lengthh]hget queue length}(hj/lhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj,lhhubah}(h]h ]h"]h$]h&]uh1jRhj6khhhjekhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjGljxjGljyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list_`` list to measure **Description** Return the length of an :c:type:`sk_buff` queue.h](jX)}(h**Parameters**h]j)}(hjQlh]h Parameters}(hjSlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOlubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKlubj)}(hhh]j)}(h5``const struct sk_buff_head *list_`` list to measure h](j)}(h$``const struct sk_buff_head *list_``h]j)}(hjplh]h const struct sk_buff_head *list_}(hjrlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnlubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjjlubj)}(hhh]jX)}(hlist to measureh]hlist to measure}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjjlubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjglubah}(h]h ]h"]h$]h&]uh1jhjKlubjX)}(h**Description**h]j)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKlubj )}(h0Return the length of an :c:type:`sk_buff` queue.h]jX)}(hjlh](hReturn the length of an }(hjlhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjlh]hsk_buff}(hjlhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjlubh queue.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjlhMhjlubah}(h]h ]h"]h$]h&]uh1j hjlhMhjKlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#skb_queue_len_lockless (C function)c.skb_queue_len_locklesshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h?__u32 skb_queue_len_lockless (const struct sk_buff_head *list_)h]h)}(h>__u32 skb_queue_len_lockless(const struct sk_buff_head *list_)h](h)}(hhh]j%)}(h__u32h]h__u32}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!mmodnameN classnameNjj!)}j$]j')}jskb_queue_len_locklesssbc.skb_queue_len_locklessasbuh1hhjmhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjAmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhj@mhMubj)}(hskb_queue_len_locklessh]j%)}(hj=mh]hskb_queue_len_lockless}(hjSmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOmubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjmhhhj@mhMubj)}(h"(const struct sk_buff_head *list_)h]j)}(h const struct sk_buff_head *list_h](h)}(hjh]hconst}(hjnmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjjmubj)}(h h]h }(hj{mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjmubh)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjmubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j;mc.skb_queue_len_locklessasbuh1hhjjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjmubj;)}(hj>h]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjjmubj%)}(hlist_h]hlist_}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfmubah}(h]h ]h"]h$]h&]j<j=uh1jhjmhhhj@mhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjmhhhj@mhMubah}(h]jmah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@mhMhjmhhubjS)}(hhh]jX)}(hget queue lengthh]hget queue length}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1jRhjmhhhj@mhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj"njxj"njyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list_`` list to measure **Description** Return the length of an :c:type:`sk_buff` queue. This variant can be used in lockless contexts.h](jX)}(h**Parameters**h]j)}(hj,nh]h Parameters}(hj.nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*nubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj&nubj)}(hhh]j)}(h5``const struct sk_buff_head *list_`` list to measure h](j)}(h$``const struct sk_buff_head *list_``h]j)}(hjKnh]h const struct sk_buff_head *list_}(hjMnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjInubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjEnubj)}(hhh]jX)}(hlist to measureh]hlist to measure}(hjdnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`nhMhjanubah}(h]h ]h"]h$]h&]uh1jhjEnubeh}(h]h ]h"]h$]h&]uh1jhj`nhMhjBnubah}(h]h ]h"]h$]h&]uh1jhj&nubjX)}(h**Description**h]j)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj&nubj )}(h_Return the length of an :c:type:`sk_buff` queue. This variant can be used in lockless contexts.h]jX)}(h_Return the length of an :c:type:`sk_buff` queue. This variant can be used in lockless contexts.h](hReturn the length of an }(hjnhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjnh]hsk_buff}(hjnhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjnubh6 queue. This variant can be used in lockless contexts.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjnhMhjnubah}(h]h ]h"]h$]h&]uh1j hjnhMhj&nubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"__skb_queue_head_init (C function)c.__skb_queue_head_inithNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6void __skb_queue_head_init (struct sk_buff_head *list)h]h)}(h5void __skb_queue_head_init(struct sk_buff_head *list)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjohMubj)}(h__skb_queue_head_inith]j%)}(h__skb_queue_head_inith]h__skb_queue_head_init}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjohMubj)}(h(struct sk_buff_head *list)h]j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj5ohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1oubj)}(h h]h }(hjBohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1oubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjSohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUomodnameN classnameNjj!)}j$]j')}jjosbc.__skb_queue_head_initasbuh1hhj1oubj)}(h h]h }(hjsohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1oubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1oubj%)}(hlisth]hlist}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1oubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-oubah}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjohMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjohMubah}(h]jnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjohMhjnhhubjS)}(hhh]jX)}(h0initialize non-spinlock portions of sk_buff_headh]h0initialize non-spinlock portions of sk_buff_head}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjohhubah}(h]h ]h"]h$]h&]uh1jRhjnhhhjohMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff_head *list`` queue to initialize **Description** This initializes only the list and queue length aspects of an sk_buff_head object. This allows to initialize the list aspects of an sk_buff_head without reinitializing things like the spinlock. It can also be used for on-stack sk_buff_head objects where the spinlock is known to not be used.h](jX)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjoubj)}(hhh]j)}(h2``struct sk_buff_head *list`` queue to initialize h](j)}(h``struct sk_buff_head *list``h]j)}(hjoh]hstruct sk_buff_head *list}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjoubj)}(hhh]jX)}(hqueue to initializeh]hqueue to initialize}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMhjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjphMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubjX)}(h**Description**h]j)}(hj4ph]h Description}(hj6phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2pubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjoubj )}(hX%This initializes only the list and queue length aspects of an sk_buff_head object. This allows to initialize the list aspects of an sk_buff_head without reinitializing things like the spinlock. It can also be used for on-stack sk_buff_head objects where the spinlock is known to not be used.h]jX)}(hX%This initializes only the list and queue length aspects of an sk_buff_head object. This allows to initialize the list aspects of an sk_buff_head without reinitializing things like the spinlock. It can also be used for on-stack sk_buff_head objects where the spinlock is known to not be used.h]hX%This initializes only the list and queue length aspects of an sk_buff_head object. This allows to initialize the list aspects of an sk_buff_head without reinitializing things like the spinlock. It can also be used for on-stack sk_buff_head objects where the spinlock is known to not be used.}(hjNphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjJpubah}(h]h ]h"]h$]h&]uh1j hj\phMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_splice (C function)c.skb_queue_splicehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hRvoid skb_queue_splice (const struct sk_buff_head *list, struct sk_buff_head *head)h]h)}(hQvoid skb_queue_splice(const struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM. ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhjphM. ubj)}(hskb_queue_spliceh]j%)}(hskb_queue_spliceh]hskb_queue_splice}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjphhhjphM. ubj)}(h<(const struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]j')}jjpsbc.skb_queue_spliceasbuh1hhjpubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hj'qhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hlisth]hlist}(hj4qhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpubj)}(hstruct sk_buff_head *headh](h)}(hjh]hstruct}(hjMqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIqubj)}(h h]h }(hjZqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIqubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjkqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmqmodnameN classnameNjj!)}j$]jqc.skb_queue_spliceasbuh1hhjIqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIqubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIqubj%)}(hheadh]hhead}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIqubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpubeh}(h]h ]h"]h$]h&]j<j=uh1jhjphhhjphM. ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{phhhjphM. ubah}(h]jvpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjphM. hjxphhubjS)}(hhh]jX)}(h/join two skb lists, this is designed for stacksh]h/join two skb lists, this is designed for stacks}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM. hjqhhubah}(h]h ]h"]h$]h&]uh1jRhjxphhhjphM. ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjqjxjqjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` the new list to add ``struct sk_buff_head *head`` the place to add it in the first listh](jX)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM2 hjqubj)}(hhh](j)}(h8``const struct sk_buff_head *list`` the new list to add h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjrh]hconst struct sk_buff_head *list}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj rubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM/ hj rubj)}(hhh]jX)}(hthe new list to addh]hthe new list to add}(hj(rhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$rhM/ hj%rubah}(h]h ]h"]h$]h&]uh1jhj rubeh}(h]h ]h"]h$]h&]uh1jhj$rhM/ hjrubj)}(hC``struct sk_buff_head *head`` the place to add it in the first listh](j)}(h``struct sk_buff_head *head``h]j)}(hjHrh]hstruct sk_buff_head *head}(hjJrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFrubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM1 hjBrubj)}(hhh]jX)}(h%the place to add it in the first listh]h%the place to add it in the first list}(hjarhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM0 hj^rubah}(h]h ]h"]h$]h&]uh1jhjBrubeh}(h]h ]h"]h$]h&]uh1jhj]rhM1 hjrubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"skb_queue_splice_init (C function)c.skb_queue_splice_inithNtauh1hhj[hhhNhNubh)}(hhh](h)}(hQvoid skb_queue_splice_init (struct sk_buff_head *list, struct sk_buff_head *head)h]h)}(hPvoid skb_queue_splice_init(struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM< ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhjrhM< ubj)}(hskb_queue_splice_inith]j%)}(hskb_queue_splice_inith]hskb_queue_splice_init}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrhhhjrhM< ubj)}(h6(struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjrmodnameN classnameNjj!)}j$]j')}jjrsbc.skb_queue_splice_initasbuh1hhjrubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hj+shhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hlisth]hlist}(hj8shhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubj)}(hstruct sk_buff_head *headh](h)}(hjh]hstruct}(hjQshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMsubj)}(h h]h }(hj^shhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMsubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjoshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqsmodnameN classnameNjj!)}j$]jsc.skb_queue_splice_initasbuh1hhjMsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMsubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMsubj%)}(hheadh]hhead}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubeh}(h]h ]h"]h$]h&]j<j=uh1jhjrhhhjrhM< ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrhhhjrhM< ubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjrhM< hjrhhubjS)}(hhh]jX)}(h4join two skb lists and reinitialise the emptied listh]h4join two skb lists and reinitialise the emptied list}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM< hjshhubah}(h]h ]h"]h$]h&]uh1jRhjrhhhjrhM< ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff_head *list`` the new list to add ``struct sk_buff_head *head`` the place to add it in the first list **Description** The list at **list** is reinitialisedh](jX)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM@ hjsubj)}(hhh](j)}(h2``struct sk_buff_head *list`` the new list to add h](j)}(h``struct sk_buff_head *list``h]j)}(hjth]hstruct sk_buff_head *list}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM= hj tubj)}(hhh]jX)}(hthe new list to addh]hthe new list to add}(hj,thhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(thM= hj)tubah}(h]h ]h"]h$]h&]uh1jhj tubeh}(h]h ]h"]h$]h&]uh1jhj(thM= hj tubj)}(hD``struct sk_buff_head *head`` the place to add it in the first list h](j)}(h``struct sk_buff_head *head``h]j)}(hjLth]hstruct sk_buff_head *head}(hjNthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJtubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM> hjFtubj)}(hhh]jX)}(h%the place to add it in the first listh]h%the place to add it in the first list}(hjethhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjathM> hjbtubah}(h]h ]h"]h$]h&]uh1jhjFtubeh}(h]h ]h"]h$]h&]uh1jhjathM> hj tubeh}(h]h ]h"]h$]h&]uh1jhjsubjX)}(h**Description**h]j)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM@ hjsubj )}(h%The list at **list** is reinitialisedh]jX)}(hjth](h The list at }(hjthhhNhNubj)}(h**list**h]hlist}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh is reinitialised}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM? hjtubah}(h]h ]h"]h$]h&]uh1j hjthM? hjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"skb_queue_splice_tail (C function)c.skb_queue_splice_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hWvoid skb_queue_splice_tail (const struct sk_buff_head *list, struct sk_buff_head *head)h]h)}(hVvoid skb_queue_splice_tail(const struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjthhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMM ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjthhhjthMM ubj)}(hskb_queue_splice_tailh]j%)}(hskb_queue_splice_tailh]hskb_queue_splice_tail}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjthhhjthMM ubj)}(h<(const struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hconst struct sk_buff_head *listh](h)}(hjh]hconst}(hj$uhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj uubj)}(h h]h }(hj1uhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj uubh)}(hjh]hstruct}(hj?uhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj uubj)}(h h]h }(hjLuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj uubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj]uhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_umodnameN classnameNjj!)}j$]j')}jj usbc.skb_queue_splice_tailasbuh1hhj uubj)}(h h]h }(hj}uhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj uubj;)}(hj>h]h*}(hjuhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj uubj%)}(hlisth]hlist}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj uubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubj)}(hstruct sk_buff_head *headh](h)}(hjh]hstruct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]jyuc.skb_queue_splice_tailasbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj;)}(hj>h]h*}(hjuhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjuubj%)}(hheadh]hhead}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubeh}(h]h ]h"]h$]h&]j<j=uh1jhjthhhjthMM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjthhhjthMM ubah}(h]jtah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthMM hjthhubjS)}(hhh]jX)}(h+join two skb lists, each list being a queueh]h+join two skb lists, each list being a queue}(hj2vhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMM hj/vhhubah}(h]h ]h"]h$]h&]uh1jRhjthhhjthMM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJvjxjJvjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff_head *list`` the new list to add ``struct sk_buff_head *head`` the place to add it in the first listh](jX)}(h**Parameters**h]j)}(hjTvh]h Parameters}(hjVvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRvubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMQ hjNvubj)}(hhh](j)}(h8``const struct sk_buff_head *list`` the new list to add h](j)}(h#``const struct sk_buff_head *list``h]j)}(hjsvh]hconst struct sk_buff_head *list}(hjuvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqvubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMN hjmvubj)}(hhh]jX)}(hthe new list to addh]hthe new list to add}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMN hjvubah}(h]h ]h"]h$]h&]uh1jhjmvubeh}(h]h ]h"]h$]h&]uh1jhjvhMN hjjvubj)}(hC``struct sk_buff_head *head`` the place to add it in the first listh](j)}(h``struct sk_buff_head *head``h]j)}(hjvh]hstruct sk_buff_head *head}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMP hjvubj)}(hhh]jX)}(h%the place to add it in the first listh]h%the place to add it in the first list}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMO hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMP hjjvubeh}(h]h ]h"]h$]h&]uh1jhjNvubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'skb_queue_splice_tail_init (C function)c.skb_queue_splice_tail_inithNtauh1hhj[hhhNhNubh)}(hhh](h)}(hVvoid skb_queue_splice_tail_init (struct sk_buff_head *list, struct sk_buff_head *head)h]h)}(hUvoid skb_queue_splice_tail_init(struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[ ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwhhhjwhM[ ubj)}(hskb_queue_splice_tail_inith]j%)}(hskb_queue_splice_tail_inith]hskb_queue_splice_tail_init}(hj'whhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#wubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjwhhhjwhM[ ubj)}(h6(struct sk_buff_head *list, struct sk_buff_head *head)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjCwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?wubj)}(h h]h }(hjPwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?wubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjawhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^wubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcwmodnameN classnameNjj!)}j$]j')}jj)wsbc.skb_queue_splice_tail_initasbuh1hhj?wubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?wubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?wubj%)}(hlisth]hlist}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?wubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;wubj)}(hstruct sk_buff_head *headh](h)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwmodnameN classnameNjj!)}j$]j}wc.skb_queue_splice_tail_initasbuh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hheadh]hhead}(hj xhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;wubeh}(h]h ]h"]h$]h&]j<j=uh1jhjwhhhjwhM[ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjvhhhjwhM[ ubah}(h]jvah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwhM[ hjvhhubjS)}(hhh]jX)}(h4join two skb lists and reinitialise the emptied listh]h4join two skb lists and reinitialise the emptied list}(hj6xhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[ hj3xhhubah}(h]h ]h"]h$]h&]uh1jRhjvhhhjwhM[ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNxjxjNxjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff_head *list`` the new list to add ``struct sk_buff_head *head`` the place to add it in the first list **Description** Each of the lists is a queue. The list at **list** is reinitialisedh](jX)}(h**Parameters**h]j)}(hjXxh]h Parameters}(hjZxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVxubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM_ hjRxubj)}(hhh](j)}(h2``struct sk_buff_head *list`` the new list to add h](j)}(h``struct sk_buff_head *list``h]j)}(hjwxh]hstruct sk_buff_head *list}(hjyxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuxubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM\ hjqxubj)}(hhh]jX)}(hthe new list to addh]hthe new list to add}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM\ hjxubah}(h]h ]h"]h$]h&]uh1jhjqxubeh}(h]h ]h"]h$]h&]uh1jhjxhM\ hjnxubj)}(hD``struct sk_buff_head *head`` the place to add it in the first list h](j)}(h``struct sk_buff_head *head``h]j)}(hjxh]hstruct sk_buff_head *head}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM] hjxubj)}(hhh]jX)}(h%the place to add it in the first listh]h%the place to add it in the first list}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM] hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM] hjnxubeh}(h]h ]h"]h$]h&]uh1jhjRxubjX)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM_ hjRxubj )}(hCEach of the lists is a queue. The list at **list** is reinitialisedh]jX)}(hCEach of the lists is a queue. The list at **list** is reinitialisedh](h*Each of the lists is a queue. The list at }(hjyhhhNhNubj)}(h**list**h]hlist}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh is reinitialised}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM^ hjyubah}(h]h ]h"]h$]h&]uh1j hj%yhM^ hjRxubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_queue_after (C function)c.__skb_queue_afterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_void __skb_queue_after (struct sk_buff_head *list, struct sk_buff *prev, struct sk_buff *newsk)h]h)}(h^void __skb_queue_after(struct sk_buff_head *list, struct sk_buff *prev, struct sk_buff *newsk)h](j)}(hvoidh]hvoid}(hjLyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHyhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMm ubj)}(h h]h }(hj[yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHyhhhjZyhMm ubj)}(h__skb_queue_afterh]j%)}(h__skb_queue_afterh]h__skb_queue_after}(hjmyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiyubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHyhhhjZyhMm ubj)}(hH(struct sk_buff_head *list, struct sk_buff *prev, struct sk_buff *newsk)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjymodnameN classnameNjj!)}j$]j')}jjoysbc.__skb_queue_afterasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hlisth]hlist}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubj)}(hstruct sk_buff *prevh](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]jyc.__skb_queue_afterasbuh1hhjyubj)}(h h]h }(hj7zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hjEzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hprevh]hprev}(hjRzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hjkzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgzubj)}(h h]h }(hjxzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgzubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]jyc.__skb_queue_afterasbuh1hhjgzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgzubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgzubj%)}(hnewskh]hnewsk}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubeh}(h]h ]h"]h$]h&]j<j=uh1jhjHyhhhjZyhMm ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjDyhhhjZyhMm ubah}(h]j?yah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjZyhMm hjAyhhubjS)}(hhh]jX)}(hqueue a buffer at the list headh]hqueue a buffer at the list head}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMm hjzhhubah}(h]h ]h"]h$]h&]uh1jRhjAyhhhjZyhMm ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj{jxj{jyjzj{uh1hhhhj[hNhNubj})}(hX{**Parameters** ``struct sk_buff_head *list`` list to use ``struct sk_buff *prev`` place after this buffer ``struct sk_buff *newsk`` buffer to queue **Description** Queue a buffer int the middle of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj {ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMq hj{ubj)}(hhh](j)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hj-{h]hstruct sk_buff_head *list}(hj/{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMn hj'{ubj)}(hhh]jX)}(h list to useh]h list to use}(hjF{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB{hMn hjC{ubah}(h]h ]h"]h$]h&]uh1jhj'{ubeh}(h]h ]h"]h$]h&]uh1jhjB{hMn hj${ubj)}(h1``struct sk_buff *prev`` place after this buffer h](j)}(h``struct sk_buff *prev``h]j)}(hjf{h]hstruct sk_buff *prev}(hjh{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMo hj`{ubj)}(hhh]jX)}(hplace after this bufferh]hplace after this buffer}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{{hMo hj|{ubah}(h]h ]h"]h$]h&]uh1jhj`{ubeh}(h]h ]h"]h$]h&]uh1jhj{{hMo hj${ubj)}(h*``struct sk_buff *newsk`` buffer to queue h](j)}(h``struct sk_buff *newsk``h]j)}(hj{h]hstruct sk_buff *newsk}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMp hj{ubj)}(hhh]jX)}(hbuffer to queueh]hbuffer to queue}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMp hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMp hj${ubeh}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMr hj{ubj )}(hQueue a buffer int the middle of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(hQueue a buffer int the middle of a list. This function takes no locks and you must therefore hold required locks before calling it.h]hQueue a buffer int the middle of a list. This function takes no locks and you must therefore hold required locks before calling it.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMq hj{ubjX)}(h8A buffer cannot be placed on two lists at the same time.h]h8A buffer cannot be placed on two lists at the same time.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMt hj{ubeh}(h]h ]h"]h$]h&]uh1j hj|hMq hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_queue_head (C function)c.__skb_queue_headhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hHvoid __skb_queue_head (struct sk_buff_head *list, struct sk_buff *newsk)h]h)}(hGvoid __skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hvoidh]hvoid}(hj8|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4|hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hjG|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4|hhhjF|hM ubj)}(h__skb_queue_headh]j%)}(h__skb_queue_headh]h__skb_queue_head}(hjY|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjU|ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj4|hhhjF|hM ubj)}(h2(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hju|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjq|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq|ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]j')}jj[|sbc.__skb_queue_headasbuh1hhjq|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq|ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjq|ubj%)}(hlisth]hlist}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjm|ubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j|c.__skb_queue_headasbuh1hhj|ubj)}(h h]h }(hj#}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj;)}(hj>h]h*}(hj1}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|ubj%)}(hnewskh]hnewsk}(hj>}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjm|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj4|hhhjF|hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0|hhhjF|hM ubah}(h]j+|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjF|hM hj-|hhubjS)}(hhh]jX)}(hqueue a buffer at the list headh]hqueue a buffer at the list head}(hjh}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hje}hhubah}(h]h ]h"]h$]h&]uh1jRhj-|hhhjF|hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj}jxj}jyjzj{uh1hhhhj[hNhNubj})}(hXE**Parameters** ``struct sk_buff_head *list`` list to use ``struct sk_buff *newsk`` buffer to queue **Description** Queue a buffer at the start of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj}ubj)}(hhh](j)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hj}h]hstruct sk_buff_head *list}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj}ubj)}(hhh]jX)}(h list to useh]h list to use}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubj)}(h*``struct sk_buff *newsk`` buffer to queue h](j)}(h``struct sk_buff *newsk``h]j)}(hj}h]hstruct sk_buff *newsk}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj}ubj)}(hhh]jX)}(hbuffer to queueh]hbuffer to queue}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hM hj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hM hj}ubeh}(h]h ]h"]h$]h&]uh1jhj}ubjX)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj}ubj )}(hQueue a buffer at the start of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(hQueue a buffer at the start of a list. This function takes no locks and you must therefore hold required locks before calling it.h]hQueue a buffer at the start of a list. This function takes no locks and you must therefore hold required locks before calling it.}(hj7~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj3~ubjX)}(h8A buffer cannot be placed on two lists at the same time.h]h8A buffer cannot be placed on two lists at the same time.}(hjF~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj3~ubeh}(h]h ]h"]h$]h&]uh1j hjE~hM hj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_queue_tail (C function)c.__skb_queue_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hHvoid __skb_queue_tail (struct sk_buff_head *list, struct sk_buff *newsk)h]h)}(hGvoid __skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hvoidh]hvoid}(hj{~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw~hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw~hhhj~hM ubj)}(h__skb_queue_tailh]j%)}(h__skb_queue_tailh]h__skb_queue_tail}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjw~hhhj~hM ubj)}(h2(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j')}jj~sbc.__skb_queue_tailasbuh1hhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~ubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]j~c.__skb_queue_tailasbuh1hhj&ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubj%)}(hnewskh]hnewsk}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjw~hhhj~hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjs~hhhj~hM ubah}(h]jn~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hM hjp~hhubjS)}(hhh]jX)}(hqueue a buffer at the list tailh]hqueue a buffer at the list tail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjp~hhhj~hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXC**Parameters** ``struct sk_buff_head *list`` list to use ``struct sk_buff *newsk`` buffer to queue **Description** Queue a buffer at the end of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh](j)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(h list to useh]h list to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``struct sk_buff *newsk`` buffer to queue h](j)}(h``struct sk_buff *newsk``h]j)}(hj%h]hstruct sk_buff *newsk}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(hbuffer to queueh]hbuffer to queue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hM hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj )}(hQueue a buffer at the end of a list. This function takes no locks and you must therefore hold required locks before calling it. A buffer cannot be placed on two lists at the same time.h](jX)}(hQueue a buffer at the end of a list. This function takes no locks and you must therefore hold required locks before calling it.h]hQueue a buffer at the end of a list. This function takes no locks and you must therefore hold required locks before calling it.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjvubjX)}(h8A buffer cannot be placed on two lists at the same time.h]h8A buffer cannot be placed on two lists at the same time.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjvubeh}(h]h ]h"]h$]h&]uh1j hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_dequeue (C function)c.__skb_dequeuehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:struct sk_buff * __skb_dequeue (struct sk_buff_head *list)h]h)}(h8struct sk_buff *__skb_dequeue(struct sk_buff_head *list)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hj̀hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjˀhM ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj݀hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjڀubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj߀modnameN classnameNjj!)}j$]j')}j __skb_dequeuesbc.__skb_dequeueasbuh1hhjhhhjˀhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjˀhM ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjˀhM ubj)}(h __skb_dequeueh]j%)}(hjh]h __skb_dequeue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjˀhM ubj)}(h(struct sk_buff_head *list)h]j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]jc.__skb_dequeueasbuh1hhj4ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjˀhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjˀhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjˀhM hjhhubjS)}(hhh]jX)}(h!remove from the head of the queueh]h!remove from the head of the queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjˀhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjсjxjсjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff_head *list`` list to dequeue from **Description** Remove the head of the list. This function does not take any locks so must be used with appropriate locks held only. The head item is returned or ``NULL`` if the list is empty.h](jX)}(h**Parameters**h]j)}(hjہh]h Parameters}(hj݁hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjفubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjՁubj)}(hhh]j)}(h3``struct sk_buff_head *list`` list to dequeue from h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(hlist to dequeue fromh]hlist to dequeue from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjՁubjX)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjՁubj )}(hRemove the head of the list. This function does not take any locks so must be used with appropriate locks held only. The head item is returned or ``NULL`` if the list is empty.h]jX)}(hRemove the head of the list. This function does not take any locks so must be used with appropriate locks held only. The head item is returned or ``NULL`` if the list is empty.h](hRemove the head of the list. This function does not take any locks so must be used with appropriate locks held only. The head item is returned or }(hjOhhhNhNubj)}(h``NULL``h]hNULL}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubh if the list is empty.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjKubah}(h]h ]h"]h$]h&]uh1j hjohM hjՁubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_dequeue_tail (C function)c.__skb_dequeue_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h?struct sk_buff * __skb_dequeue_tail (struct sk_buff_head *list)h]h)}(h=struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j__skb_dequeue_tailsbc.__skb_dequeue_tailasbuh1hhjhhhjhM ubj)}(h h]h }(hjւhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM ubj)}(h__skb_dequeue_tailh]j%)}(hjӂh]h__skb_dequeue_tail}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct sk_buff_head *list)h]j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj0modnameN classnameNjj!)}j$]jтc.__skb_dequeue_tailasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hlisth]hlist}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h!remove from the tail of the queueh]h!remove from the tail of the queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff_head *list`` list to dequeue from **Description** Remove the tail of the list. This function does not take any locks so must be used with appropriate locks held only. The tail item is returned or ``NULL`` if the list is empty.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]j)}(h3``struct sk_buff_head *list`` list to dequeue from h](j)}(h``struct sk_buff_head *list``h]j)}(hj҃h]hstruct sk_buff_head *list}(hjԃhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЃubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj̃ubj)}(hhh]jX)}(hlist to dequeue fromh]hlist to dequeue from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj̃ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjɃubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj )}(hRemove the tail of the list. This function does not take any locks so must be used with appropriate locks held only. The tail item is returned or ``NULL`` if the list is empty.h]jX)}(hRemove the tail of the list. This function does not take any locks so must be used with appropriate locks held only. The tail item is returned or ``NULL`` if the list is empty.h](hRemove the tail of the list. This function does not take any locks so must be used with appropriate locks held only. The tail item is returned or }(hj'hhhNhNubj)}(h``NULL``h]hNULL}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh if the list is empty.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj#ubah}(h]h ]h"]h$]h&]uh1j hjGhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_len_add (C function) c.skb_len_addhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h1void skb_len_add (struct sk_buff *skb, int delta)h]h)}(h0void skb_len_add(struct sk_buff *skb, int delta)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj|hM ubj)}(h skb_len_addh]j%)}(h skb_len_addh]h skb_len_add}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj|hM ubj)}(h (struct sk_buff *skb, int delta)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjɄhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjƄubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj˄modnameN classnameNjj!)}j$]j')}jjsb c.skb_len_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int deltah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdeltah]hdelta}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj|hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj|hM ubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hM hjchhubjS)}(hhh]jX)}(h"adds a number to len fields of skbh]h"adds a number to len fields of skb}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj`hhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj|hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj{jxj{jyjzj{uh1hhhhj[hNhNubj})}(hf**Parameters** ``struct sk_buff *skb`` buffer to add len to ``int delta`` number of bytes to addh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh](j)}(h-``struct sk_buff *skb`` buffer to add len to h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(hbuffer to add len toh]hbuffer to add len to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h$``int delta`` number of bytes to addh](j)}(h ``int delta``h]j)}(hj݅h]h int delta}(hj߅hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۅubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjׅubj)}(hhh]jX)}(hnumber of bytes to addh]hnumber of bytes to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjׅubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#__skb_fill_netmem_desc (C function)c.__skb_fill_netmem_deschNtauh1hhj[hhhNhNubh)}(hhh](h)}(h^void __skb_fill_netmem_desc (struct sk_buff *skb, int i, netmem_ref netmem, int off, int size)h]h)}(h]void __skb_fill_netmem_desc(struct sk_buff *skb, int i, netmem_ref netmem, int off, int size)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM$ ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhjEhM$ ubj)}(h__skb_fill_netmem_desch]j%)}(h__skb_fill_netmem_desch]h__skb_fill_netmem_desc}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhjEhM$ ubj)}(hB(struct sk_buff *skb, int i, netmem_ref netmem, int off, int size)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjZsbc.__skb_fill_netmem_descasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hskbh]hskb}(hj͆hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hih]hi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hnetmem_ref netmemh](h)}(hhh]j%)}(h netmem_refh]h netmem_ref}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jc.__skb_fill_netmem_descasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hnetmemh]hnetmem}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hint offh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(hoffh]hoff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hint sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubeh}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhjEhM$ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhjEhM$ ubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjEhM$ hj,hhubjS)}(hhh]jX)}(hinitialise a fragment in an skbh]hinitialise a fragment in an skb}(hjއhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM$ hjۇhhubah}(h]h ]h"]h$]h&]uh1jRhj,hhhjEhM$ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer containing fragment to be initialised ``int i`` fragment index to initialise ``netmem_ref netmem`` the netmem to use for this fragment ``int off`` the offset to the data with **page** ``int size`` the length of the data **Description** Initialises the **i**'th fragment of **skb** to point to :c:type:`size` bytes at offset **off** within **page**. Does not take any additional reference on the fragment.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM( hjubj)}(hhh](j)}(hE``struct sk_buff *skb`` buffer containing fragment to be initialised h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM% hjubj)}(hhh]jX)}(h,buffer containing fragment to be initialisedh]h,buffer containing fragment to be initialised}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hM% hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM% hjubj)}(h'``int i`` fragment index to initialise h](j)}(h ``int i``h]j)}(hjXh]hint i}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM& hjRubj)}(hhh]jX)}(hfragment index to initialiseh]hfragment index to initialise}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhM& hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM& hjubj)}(h:``netmem_ref netmem`` the netmem to use for this fragment h](j)}(h``netmem_ref netmem``h]j)}(hjh]hnetmem_ref netmem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM' hjubj)}(hhh]jX)}(h#the netmem to use for this fragmenth]h#the netmem to use for this fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM' hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM' hjubj)}(h1``int off`` the offset to the data with **page** h](j)}(h ``int off``h]j)}(hjʈh]hint off}(hj̈hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȈubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM( hjĈubj)}(hhh]jX)}(h$the offset to the data with **page**h](hthe offset to the data with }(hjhhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhj߈hM( hjubah}(h]h ]h"]h$]h&]uh1jhjĈubeh}(h]h ]h"]h$]h&]uh1jhj߈hM( hjubj)}(h$``int size`` the length of the data h](j)}(h ``int size``h]j)}(hjh]hint size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM) hj ubj)}(hhh]jX)}(hthe length of the datah]hthe length of the data}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hM) hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM) hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM+ hjubjX)}(hpInitialises the **i**'th fragment of **skb** to point to :c:type:`size` bytes at offset **off** within **page**.h](hInitialises the }(hjbhhhNhNubj)}(h**i**h]hi}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh’th fragment of }(hjbhhhNhNubj)}(h**skb**h]hskb}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh to point to }(hjbhhhNhNubh)}(h:c:type:`size`h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsizeuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM* hjbubh bytes at offset }(hjbhhhNhNubj)}(h**off**h]hoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh within }(hjbhhhNhNubj)}(h**page**h]hpage}(hjĉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM* hjubjX)}(h7Does not take any additional reference on the fragment.h]h7Does not take any additional reference on the fragment.}(hj܉hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM- hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_fill_page_desc (C function)c.skb_fill_page_deschNtauh1hhj[hhhNhNubh)}(hhh](h)}(hZvoid skb_fill_page_desc (struct sk_buff *skb, int i, struct page *page, int off, int size)h]h)}(hYvoid skb_fill_page_desc(struct sk_buff *skb, int i, struct page *page, int off, int size)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMU ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMU ubj)}(hskb_fill_page_desch]j%)}(hskb_fill_page_desch]hskb_fill_page_desc}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMU ubj)}(hB(struct sk_buff *skb, int i, struct page *page, int off, int size)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhmodnameN classnameNjj!)}j$]j')}jj.sbc.skb_fill_page_descasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hint ih](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjȊhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hjh]hi}(hj֊hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hstruct page *pageh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_fill_page_descasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpageh]hpage}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hint offh](j)}(hinth]hint}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj%)}(hoffh]hoff}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hint sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMU ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMU ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMU hjhhubjS)}(hhh]jX)}(h%initialise a paged fragment in an skbh]h%initialise a paged fragment in an skb}(hjًhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMU hj֋hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMU ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX5**Parameters** ``struct sk_buff *skb`` buffer containing fragment to be initialised ``int i`` paged fragment index to initialise ``struct page *page`` the page to use for this fragment ``int off`` the offset to the data with **page** ``int size`` the length of the data **Description** As per __skb_fill_page_desc() -- initialises the **i**'th fragment of **skb** to point to **size** bytes at offset **off** within **page**. In addition updates **skb** such that **i** is the last fragment. Does not take any additional reference on the fragment.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMY hjubj)}(hhh](j)}(hE``struct sk_buff *skb`` buffer containing fragment to be initialised h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMV hjubj)}(hhh]jX)}(h,buffer containing fragment to be initialisedh]h,buffer containing fragment to be initialised}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMV hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMV hjubj)}(h-``int i`` paged fragment index to initialise h](j)}(h ``int i``h]j)}(hjSh]hint i}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMW hjMubj)}(hhh]jX)}(h"paged fragment index to initialiseh]h"paged fragment index to initialise}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMW hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMW hjubj)}(h8``struct page *page`` the page to use for this fragment h](j)}(h``struct page *page``h]j)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMX hjubj)}(hhh]jX)}(h!the page to use for this fragmenth]h!the page to use for this fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMX hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMX hjubj)}(h1``int off`` the offset to the data with **page** h](j)}(h ``int off``h]j)}(hjŌh]hint off}(hjnjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÌubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMY hjubj)}(hhh]jX)}(h$the offset to the data with **page**h](hthe offset to the data with }(hjތhhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjތubeh}(h]h ]h"]h$]h&]uh1jWhjڌhMY hjیubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڌhMY hjubj)}(h$``int size`` the length of the data h](j)}(h ``int size``h]j)}(hj h]hint size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMZ hjubj)}(hhh]jX)}(hthe length of the datah]hthe length of the data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMZ hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMZ hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM\ hjubjX)}(hAs per __skb_fill_page_desc() -- initialises the **i**'th fragment of **skb** to point to **size** bytes at offset **off** within **page**. In addition updates **skb** such that **i** is the last fragment.h](h1As per __skb_fill_page_desc() -- initialises the }(hj]hhhNhNubj)}(h**i**h]hi}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh’th fragment of }(hj]hhhNhNubj)}(h**skb**h]hskb}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh to point to }(hj]hhhNhNubj)}(h**size**h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh bytes at offset }(hj]hhhNhNubj)}(h**off**h]hoff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh within }(hj]hhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh. In addition updates }(hj]hhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh such that }(hj]hhhNhNubj)}(h**i**h]hi}(hjэhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh is the last fragment.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[ hjubjX)}(h7Does not take any additional reference on the fragment.h]h7Does not take any additional reference on the fragment.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM_ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%skb_fill_page_desc_noacc (C function)c.skb_fill_page_desc_noacchNtauh1hhj[hhhNhNubh)}(hhh](h)}(h`void skb_fill_page_desc_noacc (struct sk_buff *skb, int i, struct page *page, int off, int size)h]h)}(h_void skb_fill_page_desc_noacc(struct sk_buff *skb, int i, struct page *page, int off, int size)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMi ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj'hMi ubj)}(hskb_fill_page_desc_noacch]j%)}(hskb_fill_page_desc_noacch]hskb_fill_page_desc_noacc}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj'hMi ubj)}(hB(struct sk_buff *skb, int i, struct page *page, int off, int size)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j')}jj<sbc.skb_fill_page_desc_noaccasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hint ih](j)}(hinth]hint}(hjȎhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĎubj)}(h h]h }(hj֎hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjĎubj%)}(hjh]hi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjĎubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hstruct page *pageh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_fill_page_desc_noaccasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpageh]hpage}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hint offh](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhubj%)}(hoffh]hoff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hint sizeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj'hMi ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj'hMi ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMi hjhhubjS)}(hhh]jX)}(h%initialise a paged fragment in an skbh]h%initialise a paged fragment in an skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMi hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj'hMi ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer containing fragment to be initialised ``int i`` paged fragment index to initialise ``struct page *page`` the page to use for this fragment ``int off`` the offset to the data with **page** ``int size`` the length of the data **Description** Variant of skb_fill_page_desc() which does not deal with pfmemalloc, if page is not owned by us.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMm hjubj)}(hhh](j)}(hE``struct sk_buff *skb`` buffer containing fragment to be initialised h](j)}(h``struct sk_buff *skb``h]j)}(hj(h]hstruct sk_buff *skb}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMj hj"ubj)}(hhh]jX)}(h,buffer containing fragment to be initialisedh]h,buffer containing fragment to be initialised}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMj hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMj hjubj)}(h-``int i`` paged fragment index to initialise h](j)}(h ``int i``h]j)}(hjah]hint i}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMk hj[ubj)}(hhh]jX)}(h"paged fragment index to initialiseh]h"paged fragment index to initialise}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMk hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMk hjubj)}(h8``struct page *page`` the page to use for this fragment h](j)}(h``struct page *page``h]j)}(hjh]hstruct page *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMl hjubj)}(hhh]jX)}(h!the page to use for this fragmenth]h!the page to use for this fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMl hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMl hjubj)}(h1``int off`` the offset to the data with **page** h](j)}(h ``int off``h]j)}(hjӐh]hint off}(hjՐhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѐubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMm hj͐ubj)}(hhh]jX)}(h$the offset to the data with **page**h](hthe offset to the data with }(hjhhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMm hjubah}(h]h ]h"]h$]h&]uh1jhj͐ubeh}(h]h ]h"]h$]h&]uh1jhjhMm hjubj)}(h$``int size`` the length of the data h](j)}(h ``int size``h]j)}(hjh]hint size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMn hjubj)}(hhh]jX)}(hthe length of the datah]hthe length of the data}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMn hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMn hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMp hjubjX)}(h`Variant of skb_fill_page_desc() which does not deal with pfmemalloc, if page is not owned by us.h]h`Variant of skb_fill_page_desc() which does not deal with pfmemalloc, if page is not owned by us.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMo hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_headroom (C function)c.skb_headroomhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h5unsigned int skb_headroom (const struct sk_buff *skb)h]h)}(h4unsigned int skb_headroom(const struct sk_buff *skb)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMB ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMB ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMB ubj)}(h h]h }(hjőhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMB ubj)}(h skb_headroomh]j%)}(h skb_headroomh]h skb_headroom}(hjבhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjӑubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMB ubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]j')}jjّsbc.skb_headroomasbuh1hhjubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMB ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMB ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMB hjhhubjS)}(hhh]jX)}(hbytes at buffer headh]hbytes at buffer head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMB hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMB ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Return the number of bytes of free space at the head of an :c:type:`sk_buff`.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMF hjubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjҒh]hconst struct sk_buff *skb}(hjԒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjВubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMC hj̒ubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhj̒ubeh}(h]h ]h"]h$]h&]uh1jhjhMC hjɒubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhME hjubj )}(hMReturn the number of bytes of free space at the head of an :c:type:`sk_buff`.h]jX)}(hj%h](h;Return the number of bytes of free space at the head of an }(hj'hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj0h]hsk_buff}(hj2hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMD hj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjMhMD hj#ubah}(h]h ]h"]h$]h&]uh1j hjMhMD hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_tailroom (C function)c.skb_tailroomhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h,int skb_tailroom (const struct sk_buff *skb)h]h)}(h+int skb_tailroom(const struct sk_buff *skb)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzhhhjhMM ubj)}(h skb_tailroomh]j%)}(h skb_tailroomh]h skb_tailroom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjzhhhjhMM ubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjȓhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj֓hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_tailroomasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjzhhhjhMM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjvhhhjhMM ubah}(h]jqah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMM hjshhubjS)}(hhh]jX)}(hbytes at buffer endh]hbytes at buffer end}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMM hjVhhubah}(h]h ]h"]h$]h&]uh1jRhjshhhjhMM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjqjxjqjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Return the number of bytes of free space at the tail of an sk_buffh](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMQ hjuubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMN hjubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMN hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMN hjubah}(h]h ]h"]h$]h&]uh1jhjuubjX)}(h**Description**h]j)}(hjՔh]h Description}(hjהhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӔubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMP hjuubj )}(hBReturn the number of bytes of free space at the tail of an sk_buffh]jX)}(hjh]hBReturn the number of bytes of free space at the tail of an sk_buff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMO hjubah}(h]h ]h"]h$]h&]uh1j hjhMO hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_availroom (C function)c.skb_availroomhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h-int skb_availroom (const struct sk_buff *skb)h]h)}(h,int skb_availroom(const struct sk_buff *skb)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMX ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj1hMX ubj)}(h skb_availroomh]j%)}(h skb_availroomh]h skb_availroom}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj1hMX ubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjFsbc.skb_availroomasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjǕhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hskbh]hskb}(hjԕhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj1hMX ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMX ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMX hjhhubjS)}(hhh]jX)}(hbytes at buffer endh]hbytes at buffer end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMX hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMX ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check **Description** Return the number of bytes of free space at the tail of an sk_buff allocated by sk_stream_alloc()h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM\ hjubj)}(hhh]j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hj?h]hconst struct sk_buff *skb}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMY hj9ubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMY hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMY hj6ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[ hjubj )}(haReturn the number of bytes of free space at the tail of an sk_buff allocated by sk_stream_alloc()h]jX)}(haReturn the number of bytes of free space at the tail of an sk_buff allocated by sk_stream_alloc()h]haReturn the number of bytes of free space at the tail of an sk_buff allocated by sk_stream_alloc()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMZ hjubah}(h]h ]h"]h$]h&]uh1j hjhMZ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_reserve (C function) c.skb_reservehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h/void skb_reserve (struct sk_buff *skb, int len)h]h)}(h.void skb_reserve(struct sk_buff *skb, int len)h](j)}(hvoidh]hvoid}(hjɖhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŖhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMg ubj)}(h h]h }(hjؖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjŖhhhjזhMg ubj)}(h skb_reserveh]j%)}(h skb_reserveh]h skb_reserve}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjŖhhhjזhMg ubj)}(h(struct sk_buff *skb, int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&modnameN classnameNjj!)}j$]j')}jjsb c.skb_reserveasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjŖhhhjזhMg ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjזhMg ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjזhMg hjhhubjS)}(hhh]jX)}(hadjust headroomh]hadjust headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMg hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjזhMg ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj֗jxj֗jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer to alter ``int len`` bytes to move **Description** Increase the headroom of an empty :c:type:`sk_buff` by reducing the tail room. This is only allowed for an empty buffer.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjޗubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMk hjڗubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMh hjubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMh hjubj)}(h``int len`` bytes to move h](j)}(h ``int len``h]j)}(hj8h]hint len}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMi hj2ubj)}(hhh]jX)}(h bytes to moveh]h bytes to move}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMi hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMi hjubeh}(h]h ]h"]h$]h&]uh1jhjڗubjX)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMk hjڗubj )}(hxIncrease the headroom of an empty :c:type:`sk_buff` by reducing the tail room. This is only allowed for an empty buffer.h]jX)}(hxIncrease the headroom of an empty :c:type:`sk_buff` by reducing the tail room. This is only allowed for an empty buffer.h](h"Increase the headroom of an empty }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMj hjubhE by reducing the tail room. This is only allowed for an empty buffer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMj hjubah}(h]h ]h"]h$]h&]uh1j hjhMj hjڗubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_tailroom_reserve (C function)c.skb_tailroom_reservehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_void skb_tailroom_reserve (struct sk_buff *skb, unsigned int mtu, unsigned int needed_tailroom)h]h)}(h^void skb_tailroom_reserve(struct sk_buff *skb, unsigned int mtu, unsigned int needed_tailroom)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMu ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMu ubj)}(hskb_tailroom_reserveh]j%)}(hskb_tailroom_reserveh]hskb_tailroom_reserve}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMu ubj)}(hE(struct sk_buff *skb, unsigned int mtu, unsigned int needed_tailroom)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBmodnameN classnameNjj!)}j$]j')}jjsbc.skb_tailroom_reserveasbuh1hhjubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjnhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int mtuh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmtuh]hmtu}(hj̙hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int needed_tailroomh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hneeded_tailroomh]hneeded_tailroom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMu ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjݘhhhjhMu ubah}(h]jؘah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMu hjژhhubjS)}(hhh]jX)}(hadjust reserved_tailroomh]hadjust reserved_tailroom}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMu hjDhhubah}(h]h ]h"]h$]h&]uh1jRhjژhhhjhMu ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj_jxj_jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to alter ``unsigned int mtu`` maximum amount of headlen permitted ``unsigned int needed_tailroom`` minimum amount of reserved_tailroom **Description** Set reserved_tailroom so that headlen can be as large as possible but not larger than mtu and tailroom cannot be smaller than needed_tailroom. The required headroom should already have been reserved before using this function.h](jX)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMy hjcubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMv hjubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMv hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMv hjubj)}(h9``unsigned int mtu`` maximum amount of headlen permitted h](j)}(h``unsigned int mtu``h]j)}(hjh]hunsigned int mtu}(hjÚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMw hjubj)}(hhh]jX)}(h#maximum amount of headlen permittedh]h#maximum amount of headlen permitted}(hjښhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj֚hMw hjךubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֚hMw hjubj)}(hE``unsigned int needed_tailroom`` minimum amount of reserved_tailroom h](j)}(h ``unsigned int needed_tailroom``h]j)}(hjh]hunsigned int needed_tailroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMx hjubj)}(hhh]jX)}(h#minimum amount of reserved_tailroomh]h#minimum amount of reserved_tailroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMx hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMx hjubeh}(h]h ]h"]h$]h&]uh1jhjcubjX)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMz hjcubj )}(hSet reserved_tailroom so that headlen can be as large as possible but not larger than mtu and tailroom cannot be smaller than needed_tailroom. The required headroom should already have been reserved before using this function.h]jX)}(hSet reserved_tailroom so that headlen can be as large as possible but not larger than mtu and tailroom cannot be smaller than needed_tailroom. The required headroom should already have been reserved before using this function.h]hSet reserved_tailroom so that headlen can be as large as possible but not larger than mtu and tailroom cannot be smaller than needed_tailroom. The required headroom should already have been reserved before using this function.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMy hjKubah}(h]h ]h"]h$]h&]uh1j hj]hMy hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/skb_reset_transport_header_careful (C function)$c.skb_reset_transport_header_carefulhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=bool skb_reset_transport_header_careful (struct sk_buff *skb)h]h)}(hh]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhjhM ubah}(h]jwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjyhhubjS)}(hhh]jX)}(h$conditionally reset transport headerh]h$conditionally reset transport header}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj@hhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj[jxj[jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer to alter **Description** Hardened version of skb_reset_transport_header(). **Return** true if the operation was a success.h](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj_ubj)}(hhh]j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj~ubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj_ubjX)}(h1Hardened version of skb_reset_transport_header().h]h1Hardened version of skb_reset_transport_header().}(hj՜hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj_ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj_ubjX)}(h$true if the operation was a success.h]h$true if the operation was a success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpskb_trim_unique (C function)c.pskb_trim_uniquehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=void pskb_trim_unique (struct sk_buff *skb, unsigned int len)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjڝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֝ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj֝ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֝ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj֝ubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj֝ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj9hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj#hhhj9hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9hM hj hhubjS)}(hhh]jX)}(h2remove end from a paged unique (not cloned) bufferh]h2remove end from a paged unique (not cloned) buffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj9hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj9hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjTjxjTjyjzj{uh1hhhhj[hNhNubj})}(hX **Parameters** ``struct sk_buff *skb`` buffer to alter ``unsigned int len`` new length **Description** This is identical to pskb_trim except that the caller knows that the skb is not cloned so we should never get an error due to out- of-memory.h](jX)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjXubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hj}h]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjwubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM hjtubj)}(h ``unsigned int len`` new length h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(h new lengthh]h new length}(hjϞhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj˞hM hj̞ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˞hM hjtubeh}(h]h ]h"]h$]h&]uh1jhjXubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjXubj )}(hThis is identical to pskb_trim except that the caller knows that the skb is not cloned so we should never get an error due to out- of-memory.h]jX)}(hThis is identical to pskb_trim except that the caller knows that the skb is not cloned so we should never get an error due to out- of-memory.h]hThis is identical to pskb_trim except that the caller knows that the skb is not cloned so we should never get an error due to out- of-memory.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_orphan (C function) c.skb_orphanhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h%void skb_orphan (struct sk_buff *skb)h]h)}(h$void skb_orphan(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM' ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<hhhjNhM' ubj)}(h skb_orphanh]j%)}(h skb_orphanh]h skb_orphan}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj<hhhjNhM' ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjcsb c.skb_orphanasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hjɟhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hskbh]hskb}(hj֟hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubah}(h]h ]h"]h$]h&]j<j=uh1jhj<hhhjNhM' ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj8hhhjNhM' ubah}(h]j3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjNhM' hj5hhubjS)}(hhh]jX)}(horphan a bufferh]horphan a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM' hjhhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhjNhM' ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to orphan **Description** If a buffer currently has an owner then we call the owner's destructor function and make the **skb** unowned. The buffer continues to exist but is no longer charged to its former owner.h](jX)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM+ hjubj)}(hhh]j)}(h)``struct sk_buff *skb`` buffer to orphan h](j)}(h``struct sk_buff *skb``h]j)}(hjAh]hstruct sk_buff *skb}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM( hj;ubj)}(hhh]jX)}(hbuffer to orphanh]hbuffer to orphan}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhM( hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM( hj8ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM* hjubj )}(hIf a buffer currently has an owner then we call the owner's destructor function and make the **skb** unowned. The buffer continues to exist but is no longer charged to its former owner.h]jX)}(hIf a buffer currently has an owner then we call the owner's destructor function and make the **skb** unowned. The buffer continues to exist but is no longer charged to its former owner.h](h_If a buffer currently has an owner then we call the owner’s destructor function and make the }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhU unowned. The buffer continues to exist but is no longer charged to its former owner.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM) hjubah}(h]h ]h"]h$]h&]uh1j hjhM) hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_orphan_frags (C function)c.skb_orphan_fragshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:int skb_orphan_frags (struct sk_buff *skb, gfp_t gfp_mask)h]h)}(h9int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hinth]hint}(hjݠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٠hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM: ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj٠hhhjhM: ubj)}(hskb_orphan_fragsh]j%)}(hskb_orphan_fragsh]hskb_orphan_frags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj٠hhhjhM: ubj)}(h%(struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jjsbc.skb_orphan_fragsasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jTc.skb_orphan_fragsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj٠hhhjhM: ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjՠhhhjhM: ubah}(h]jРah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM: hjҠhhubjS)}(hhh]jX)}(h&orphan the frags contained in a bufferh]h&orphan the frags contained in a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM: hjhhubah}(h]h ]h"]h$]h&]uh1jRhjҠhhhjhM: ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX<**Parameters** ``struct sk_buff *skb`` buffer to orphan frags from ``gfp_t gfp_mask`` allocation mask for replacement pages **Description** For each frag in the SKB which needs a destructor (i.e. has an owner) create a copy of that frag and release the original page by calling the destructor.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM> hjubj)}(hhh](j)}(h4``struct sk_buff *skb`` buffer to orphan frags from h](j)}(h``struct sk_buff *skb``h]j)}(hj&h]hstruct sk_buff *skb}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM; hj ubj)}(hhh]jX)}(hbuffer to orphan frags fromh]hbuffer to orphan frags from}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hM; hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hM; hjubj)}(h9``gfp_t gfp_mask`` allocation mask for replacement pages h](j)}(h``gfp_t gfp_mask``h]j)}(hj_h]hgfp_t gfp_mask}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM< hjYubj)}(hhh]jX)}(h%allocation mask for replacement pagesh]h%allocation mask for replacement pages}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjthM< hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM< hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM> hjubj )}(hFor each frag in the SKB which needs a destructor (i.e. has an owner) create a copy of that frag and release the original page by calling the destructor.h]jX)}(hFor each frag in the SKB which needs a destructor (i.e. has an owner) create a copy of that frag and release the original page by calling the destructor.h]hFor each frag in the SKB which needs a destructor (i.e. has an owner) create a copy of that frag and release the original page by calling the destructor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM= hjubah}(h]h ]h"]h$]h&]uh1j hj¢hM= hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%__skb_queue_purge_reason (C function)c.__skb_queue_purge_reasonhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hVvoid __skb_queue_purge_reason (struct sk_buff_head *list, enum skb_drop_reason reason)h]h)}(hUvoid __skb_queue_purge_reason(struct sk_buff_head *list, enum skb_drop_reason reason)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMT ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMT ubj)}(h__skb_queue_purge_reasonh]j%)}(h__skb_queue_purge_reasonh]h__skb_queue_purge_reason}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMT ubj)}(h8(struct sk_buff_head *list, enum skb_drop_reason reason)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjFmodnameN classnameNjj!)}j$]j')}jj sbc.__skb_queue_purge_reasonasbuh1hhj"ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(henum skb_drop_reason reasonh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_drop_reasonh]hskb_drop_reason}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j`c.__skb_queue_purge_reasonasbuh1hhjubj)}(h h]h }(hjԣhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hreasonh]hreason}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMT ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMT ubah}(h]jܢah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMT hjޢhhubjS)}(hhh]jX)}(h empty a listh]h empty a list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMT hj hhubah}(h]h ]h"]h$]h&]uh1jRhjޢhhhjhMT ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$jxj$jyjzj{uh1hhhhj[hNhNubj})}(hX_**Parameters** ``struct sk_buff_head *list`` list to empty ``enum skb_drop_reason reason`` drop reason **Description** Delete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function does not take the list lock and the caller must hold the relevant locks to use it.h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMX hj(ubj)}(hhh](j)}(h,``struct sk_buff_head *list`` list to empty h](j)}(h``struct sk_buff_head *list``h]j)}(hjMh]hstruct sk_buff_head *list}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMU hjGubj)}(hhh]jX)}(h list to emptyh]h list to empty}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMU hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMU hjDubj)}(h,``enum skb_drop_reason reason`` drop reason h](j)}(h``enum skb_drop_reason reason``h]j)}(hjh]henum skb_drop_reason reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMV hjubj)}(hhh]jX)}(h drop reasonh]h drop reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMV hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMV hjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjX)}(h**Description**h]j)}(hjh]h Description}(hjähhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMX hj(ubj )}(hDelete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function does not take the list lock and the caller must hold the relevant locks to use it.h]jX)}(hDelete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function does not take the list lock and the caller must hold the relevant locks to use it.h](hDelete all buffers on an }(hjۤhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMW hjۤubh list. Each buffer is removed from the list and one reference dropped. This function does not take the list lock and the caller must hold the relevant locks to use it.}(hjۤhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMW hjפubah}(h]h ]h"]h$]h&]uh1j hjhMW hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_alloc_frag (C function)c.netdev_alloc_fraghNtauh1hhj[hhhNhNubh)}(hhh](h)}(h.void * netdev_alloc_frag (unsigned int fragsz)h]h)}(h,void *netdev_alloc_frag(unsigned int fragsz)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMx ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhjAhMx ubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/hhhjAhMx ubj)}(hnetdev_alloc_fragh]j%)}(hnetdev_alloc_fragh]hnetdev_alloc_frag}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/hhhjAhMx ubj)}(h(unsigned int fragsz)h]j)}(hunsigned int fragszh](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj%)}(hfragszh]hfragsz}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubah}(h]h ]h"]h$]h&]j<j=uh1jhj/hhhjAhMx ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+hhhjAhMx ubah}(h]j&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhMx hj(hhubjS)}(hhh]jX)}(hallocate a page fragmenth]hallocate a page fragment}(hjߥhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMx hjܥhhubah}(h]h ]h"]h$]h&]uh1jRhj(hhhjAhMx ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``unsigned int fragsz`` fragment size **Description** Allocates a frag from a page for receive buffer. Uses GFP_ATOMIC allocations.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM| hjubj)}(hhh]j)}(h&``unsigned int fragsz`` fragment size h](j)}(h``unsigned int fragsz``h]j)}(hj h]hunsigned int fragsz}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMy hjubj)}(hhh]jX)}(h fragment sizeh]h fragment size}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMy hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMy hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM{ hjubjX)}(hMAllocates a frag from a page for receive buffer. Uses GFP_ATOMIC allocations.h]hMAllocates a frag from a page for receive buffer. Uses GFP_ATOMIC allocations.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMz hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_alloc_skb (C function)c.netdev_alloc_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hOstruct sk_buff * netdev_alloc_skb (struct net_device *dev, unsigned int length)h]h)}(hMstruct sk_buff *netdev_alloc_skb(struct net_device *dev, unsigned int length)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jnetdev_alloc_skbsbc.netdev_alloc_skbasbuh1hhjhhhjhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM ubj)}(hnetdev_alloc_skbh]j%)}(hjݦh]hnetdev_alloc_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h-(struct net_device *dev, unsigned int length)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]jۦc.netdev_alloc_skbasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lengthh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlengthh]hlength}(hj§hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h.allocate an skbuff for rx on a specific deviceh]h.allocate an skbuff for rx on a specific device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX)**Parameters** ``struct net_device *dev`` network device to receive on ``unsigned int length`` length to allocate **Description** Allocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has unspecified headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations. ``NULL`` is returned if there is no free memory. Although this function allocates memory it can be called from an interrupt.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh](j)}(h8``struct net_device *dev`` network device to receive on h](j)}(h``struct net_device *dev``h]j)}(hj-h]hstruct net_device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj'ubj)}(hhh]jX)}(hnetwork device to receive onh]hnetwork device to receive on}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM hj$ubj)}(h+``unsigned int length`` length to allocate h](j)}(h``unsigned int length``h]j)}(hjfh]hunsigned int length}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj`ubj)}(hhh]jX)}(hlength to allocateh]hlength to allocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM hj$ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj )}(hXAllocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has unspecified headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations. ``NULL`` is returned if there is no free memory. Although this function allocates memory it can be called from an interrupt.h](jX)}(hXAllocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has unspecified headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations.h](hAllocate a new }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjŨh]hsk_buff}(hjǨhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjèubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubh and assign it a usage count of one. The buffer has unspecified headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM hjubjX)}(h|``NULL`` is returned if there is no free memory. Although this function allocates memory it can be called from an interrupt.h](j)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubht is returned if there is no free memory. Although this function allocates memory it can be called from an interrupt.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubeh}(h]h ]h"]h$]h&]uh1j hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_alloc_pages (C function)c.__dev_alloc_pageshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hDstruct page * __dev_alloc_pages (gfp_t gfp_mask, unsigned int order)h]h)}(hBstruct page *__dev_alloc_pages(gfp_t gfp_mask, unsigned int order)h](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhhj=hM ubh)}(hhh]j%)}(hpageh]hpage}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j')}j__dev_alloc_pagessbc.__dev_alloc_pagesasbuh1hhj,hhhj=hM ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhhj=hM ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,hhhj=hM ubj)}(h__dev_alloc_pagesh]j%)}(hjmh]h__dev_alloc_pages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj,hhhj=hM ubj)}(h$(gfp_t gfp_mask, unsigned int order)h](j)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jkc.__dev_alloc_pagesasbuh1hhjubj)}(h h]h }(hj˩hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hj٩hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int orderh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(horderh]horder}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj,hhhj=hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj(hhhj=hM ubah}(h]j#ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hM hj%hhubjS)}(hhh]jX)}(hallocate page for network Rxh]hallocate page for network Rx}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjQhhubah}(h]h ]h"]h$]h&]uh1jRhj%hhhj=hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjljxjljyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``gfp_t gfp_mask`` allocation priority. Set __GFP_NOMEMALLOC if not for network Rx ``unsigned int order`` size of the allocation **Description** Allocate a new page. ``NULL`` is returned if there is no free memory.h](jX)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjpubj)}(hhh](j)}(hS``gfp_t gfp_mask`` allocation priority. Set __GFP_NOMEMALLOC if not for network Rx h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh]jX)}(h?allocation priority. Set __GFP_NOMEMALLOC if not for network Rxh]h?allocation priority. Set __GFP_NOMEMALLOC if not for network Rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``unsigned int order`` size of the allocation h](j)}(h``unsigned int order``h]j)}(hjΪh]hunsigned int order}(hjЪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̪ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjȪubj)}(hhh]jX)}(hsize of the allocationh]hsize of the allocation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjȪubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjpubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjpubjX)}(hAllocate a new page.h]hAllocate a new page.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjpubjX)}(h0``NULL`` is returned if there is no free memory.h](j)}(h``NULL``h]hNULL}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh( is returned if there is no free memory.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_alloc_page (C function)c.__dev_alloc_pagehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h/struct page * __dev_alloc_page (gfp_t gfp_mask)h]h)}(h-struct page *__dev_alloc_page(gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjghhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjghhhjxhM ubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j__dev_alloc_pagesbc.__dev_alloc_pageasbuh1hhjghhhjxhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjghhhjxhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjghhhjxhM ubj)}(h__dev_alloc_pageh]j%)}(hjh]h__dev_alloc_page}(hjʫhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjƫubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjghhhjxhM ubj)}(h(gfp_t gfp_mask)h]j)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__dev_alloc_pageasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjݫubah}(h]h ]h"]h$]h&]j<j=uh1jhjghhhjxhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjxhM ubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjxhM hj`hhubjS)}(hhh]jX)}(hallocate a page for network Rxh]hallocate a page for network Rx}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj;hhubah}(h]h ]h"]h$]h&]uh1jRhj`hhhjxhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjVjxjVjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``gfp_t gfp_mask`` allocation priority. Set __GFP_NOMEMALLOC if not for network Rx **Description** Allocate a new page. ``NULL`` is returned if there is no free memory.h](jX)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjZubj)}(hhh]j)}(hS``gfp_t gfp_mask`` allocation priority. Set __GFP_NOMEMALLOC if not for network Rx h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjyubj)}(hhh]jX)}(h?allocation priority. Set __GFP_NOMEMALLOC if not for network Rxh]h?allocation priority. Set __GFP_NOMEMALLOC if not for network Rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM hjvubah}(h]h ]h"]h$]h&]uh1jhjZubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjZubjX)}(hAllocate a new page.h]hAllocate a new page.}(hjЬhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjZubjX)}(h0``NULL`` is returned if there is no free memory.h](j)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߬ubh( is returned if there is no free memory.}(hj߬hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!dev_page_is_reusable (C function)c.dev_page_is_reusablehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3bool dev_page_is_reusable (const struct page *page)h]h)}(h2bool dev_page_is_reusable(const struct page *page)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj)hM ubj)}(hdev_page_is_reusableh]j%)}(hdev_page_is_reusableh]hdev_page_is_reusable}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj)hM ubj)}(h(const struct page *page)h]j)}(hconst struct page *pageh](h)}(hjh]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj>sbc.dev_page_is_reusableasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hpageh]hpage}(hj̭hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj)hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj)hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hM hjhhubjS)}(hhh]jX)}(h1check whether a page can be reused for network Rxh]h1check whether a page can be reused for network Rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj)hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX"**Parameters** ``const struct page *page`` the page to test **Description** A page shouldn't be considered for reusing/recycling if it was allocated under memory pressure or at a distant memory node. **Return** false if this page should be returned to page allocator, true otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h-``const struct page *page`` the page to test h](j)}(h``const struct page *page``h]j)}(hj7h]hconst struct page *page}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hj1ubj)}(hhh]jX)}(hthe page to testh]hthe page to test}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjLhM hjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhM hj.ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h{A page shouldn't be considered for reusing/recycling if it was allocated under memory pressure or at a distant memory node.h]h}A page shouldn’t be considered for reusing/recycling if it was allocated under memory pressure or at a distant memory node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(hHfalse if this page should be returned to page allocator, true otherwise.h]hHfalse if this page should be returned to page allocator, true otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%skb_propagate_pfmemalloc (C function)c.skb_propagate_pfmemallochNtauh1hhj[hhhNhNubh)}(hhh](h)}(hLvoid skb_propagate_pfmemalloc (const struct page *page, struct sk_buff *skb)h]h)}(hKvoid skb_propagate_pfmemalloc(const struct page *page, struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjޮhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڮhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڮhhhjhMubj)}(hskb_propagate_pfmemalloch]j%)}(hskb_propagate_pfmemalloch]hskb_propagate_pfmemalloc}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjڮhhhjhMubj)}(h.(const struct page *page, struct sk_buff *skb)h](j)}(hconst struct page *pageh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVmodnameN classnameNjj!)}j$]j')}jjsbc.skb_propagate_pfmemallocasbuh1hhjubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjƯhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjïubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjȯmodnameN classnameNjj!)}j$]jpc.skb_propagate_pfmemallocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjڮhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj֮hhhjhMubah}(h]jѮah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjӮhhubjS)}(hhh]jX)}(h6Propagate pfmemalloc if skb is allocated after RX pageh]h6Propagate pfmemalloc if skb is allocated after RX page}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1jRhjӮhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjAjxjAjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct page *page`` The page that was allocated from skb_alloc_page ``struct sk_buff *skb`` The skb that may need pfmemalloc seth](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjEubj)}(hhh](j)}(hL``const struct page *page`` The page that was allocated from skb_alloc_page h](j)}(h``const struct page *page``h]j)}(hjjh]hconst struct page *page}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjdubj)}(hhh]jX)}(h/The page that was allocated from skb_alloc_pageh]h/The page that was allocated from skb_alloc_page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(h<``struct sk_buff *skb`` The skb that may need pfmemalloc seth](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h$The skb that may need pfmemalloc seth]h$The skb that may need pfmemalloc set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_off (C function)c.skb_frag_offhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h2unsigned int skb_frag_off (const skb_frag_t *frag)h]h)}(h1unsigned int skb_frag_off(const skb_frag_t *frag)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM(ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hM(ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hM(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hM(ubj)}(h skb_frag_offh]j%)}(h skb_frag_offh]h skb_frag_off}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hM(ubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j')}jj<sbc.skb_frag_offasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hM(ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hM(ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM(hjhhubjS)}(hhh]jX)}(h$Returns the offset of a skb fragmenth]h$Returns the offset of a skb fragment}(hjٱhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM(hjֱhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hM(ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h?**Parameters** ``const skb_frag_t *frag`` the paged fragmenth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM,hjubj)}(hhh]j)}(h-``const skb_frag_t *frag`` the paged fragmenth](j)}(h``const skb_frag_t *frag``h]j)}(hjh]hconst skb_frag_t *frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM.hjubj)}(hhh]jX)}(hthe paged fragmenth]hthe paged fragment}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM)hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_off_add (C function)c.skb_frag_off_addhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3void skb_frag_off_add (skb_frag_t *frag, int delta)h]h)}(h2void skb_frag_off_add(skb_frag_t *frag, int delta)h](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhjhM1ubj)}(hskb_frag_off_addh]j%)}(hskb_frag_off_addh]hskb_frag_off_add}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjphhhjhM1ubj)}(h(skb_frag_t *frag, int delta)h](j)}(hskb_frag_t *fragh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_frag_off_addasbuh1hhjubj)}(h h]h }(hjԲhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int deltah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdeltah]hdelta}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjphhhjhM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjhM1ubah}(h]jgah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM1hjihhubjS)}(hhh]jX)}(h4Increments the offset of a skb fragment by **delta**h](h+Increments the offset of a skb fragment by }(hjNhhhNhNubj)}(h **delta**h]hdelta}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM1hjKhhubah}(h]h ]h"]h$]h&]uh1jRhjihhhjhM1ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1hhhhj[hNhNubj})}(hQ**Parameters** ``skb_frag_t *frag`` skb fragment ``int delta`` value to addh](jX)}(h**Parameters**h]j)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM5hjxubj)}(hhh](j)}(h"``skb_frag_t *frag`` skb fragment h](j)}(h``skb_frag_t *frag``h]j)}(hjh]hskb_frag_t *frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM2hjubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubj)}(h``int delta`` value to addh](j)}(h ``int delta``h]j)}(hjֳh]h int delta}(hjسhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԳubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM4hjгubj)}(hhh]jX)}(h value to addh]h value to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM3hjubah}(h]h ]h"]h$]h&]uh1jhjгubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_off_set (C function)c.skb_frag_off_sethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=void skb_frag_off_set (skb_frag_t *frag, unsigned int offset)h]h)}(hhM;ubj)}(hskb_frag_off_seth]j%)}(hskb_frag_off_seth]hskb_frag_off_set}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj,hhhj>hM;ubj)}(h'(skb_frag_t *frag, unsigned int offset)h](j)}(hskb_frag_t *fragh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjrmodnameN classnameNjj!)}j$]j')}jjSsbc.skb_frag_off_setasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjĴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjҴhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubeh}(h]h ]h"]h$]h&]j<j=uh1jhj,hhhj>hM;ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj(hhhj>hM;ubah}(h]j#ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>hM;hj%hhubjS)}(hhh]jX)}(h!Sets the offset of a skb fragmenth]h!Sets the offset of a skb fragment}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM;hj#hhubah}(h]h ]h"]h$]h&]uh1jRhj%hhhj>hM;ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhj[hNhNubj})}(ha**Parameters** ``skb_frag_t *frag`` skb fragment ``unsigned int offset`` offset of fragmenth](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM?hjBubj)}(hhh](j)}(h"``skb_frag_t *frag`` skb fragment h](j)}(h``skb_frag_t *frag``h]j)}(hjgh]hskb_frag_t *frag}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM<hjaubj)}(hhh]jX)}(h skb fragmenth]h skb fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hM<hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM<hj^ubj)}(h*``unsigned int offset`` offset of fragmenth](j)}(h``unsigned int offset``h]j)}(hjh]hunsigned int offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM>hjubj)}(hhh]jX)}(hoffset of fragmenth]hoffset of fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM>hj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_off_copy (C function)c.skb_frag_off_copyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hGvoid skb_frag_off_copy (skb_frag_t *fragto, const skb_frag_t *fragfrom)h]h)}(hFvoid skb_frag_off_copy(skb_frag_t *fragto, const skb_frag_t *fragfrom)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMEubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMEubj)}(hskb_frag_off_copyh]j%)}(hskb_frag_off_copyh]hskb_frag_off_copy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMEubj)}(h0(skb_frag_t *fragto, const skb_frag_t *fragfrom)h](j)}(hskb_frag_t *fragtoh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jjsbc.skb_frag_off_copyasbuh1hhj3ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hfragtoh]hfragto}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubj)}(hconst skb_frag_t *fragfromh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jVc.skb_frag_off_copyasbuh1hhjubj)}(h h]h }(hjʶhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjضhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfragfromh]hfragfrom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMEubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMEhjhhubjS)}(hhh]jX)}(h7Sets the offset of a skb fragment from another fragmenth]h7Sets the offset of a skb fragment from another fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMEhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMEubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``skb_frag_t *fragto`` skb fragment where offset is set ``const skb_frag_t *fragfrom`` skb fragment offset is copied fromh](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMIhj+ubj)}(hhh](j)}(h8``skb_frag_t *fragto`` skb fragment where offset is set h](j)}(h``skb_frag_t *fragto``h]j)}(hjPh]hskb_frag_t *fragto}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMFhjJubj)}(hhh]jX)}(h skb fragment where offset is seth]h skb fragment where offset is set}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMFhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMFhjGubj)}(hA``const skb_frag_t *fragfrom`` skb fragment offset is copied fromh](j)}(h``const skb_frag_t *fragfrom``h]j)}(hjh]hconst skb_frag_t *fragfrom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhjubj)}(hhh]jX)}(h"skb fragment offset is copied fromh]h"skb fragment offset is copied from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_net_iov (C function)c.skb_frag_net_iovhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:struct net_iov * skb_frag_net_iov (const skb_frag_t *frag)h]h)}(h8struct net_iov *skb_frag_net_iov(const skb_frag_t *frag)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj߷hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj߷hhhjhMVubh)}(hhh]j%)}(hnet_iovh]hnet_iov}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jskb_frag_net_iovsbc.skb_frag_net_iovasbuh1hhj߷hhhjhMVubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj߷hhhjhMVubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj߷hhhjhMVubj)}(hskb_frag_net_iovh]j%)}(hj h]hskb_frag_net_iov}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj߷hhhjhMVubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]jc.skb_frag_net_iovasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubah}(h]h ]h"]h$]h&]j<j=uh1jhj߷hhhjhMVubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj۷hhhjhMVubah}(h]jַah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMVhjطhhubjS)}(hhh]jX)}(h,retrieve the net_iov referred to by fragmenth]h,retrieve the net_iov referred to by fragment}(hj޸hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMVhj۸hhubah}(h]h ]h"]h$]h&]uh1jRhjطhhhjhMVubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const skb_frag_t *frag`` the fragment **Return** the :c:type:`struct net_iov ` associated with **frag**. Returns NULL if this frag has no associated net_iov.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMZhjubj)}(hhh]j)}(h(``const skb_frag_t *frag`` the fragment h](j)}(h``const skb_frag_t *frag``h]j)}(hjh]hconst skb_frag_t *frag}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMWhjubj)}(hhh]jX)}(h the fragmenth]h the fragment}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hMWhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMWhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjZh]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMYhjubjX)}(huthe :c:type:`struct net_iov ` associated with **frag**. Returns NULL if this frag has no associated net_iov.h](hthe }(hjphhhNhNubh)}(h":c:type:`struct net_iov `h]j)}(hjzh]hstruct net_iov}(hj|hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjnet_iovuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMYhjpubh associated with }(hjphhhNhNubj)}(h**frag**h]hfrag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh6. Returns NULL if this frag has no associated net_iov.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_page (C function)c.skb_frag_pagehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4struct page * skb_frag_page (const skb_frag_t *frag)h]h)}(h2struct page *skb_frag_page(const skb_frag_t *frag)h](h)}(hjh]hstruct}(hjԹhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjйhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjйhhhjhMeubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j skb_frag_pagesbc.skb_frag_pageasbuh1hhjйhhhjhMeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjйhhhjhMeubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjйhhhjhMeubj)}(h skb_frag_pageh]j%)}(hjh]h skb_frag_page}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjйhhhjhMeubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]jc.skb_frag_pageasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubah}(h]h ]h"]h$]h&]j<j=uh1jhjйhhhjhMeubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj̹hhhjhMeubah}(h]jǹah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMehjɹhhubjS)}(hhh]jX)}(h1retrieve the page referred to by a paged fragmenth]h1retrieve the page referred to by a paged fragment}(hjϺhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMehj̺hhubah}(h]h ]h"]h$]h&]uh1jRhjɹhhhjhMeubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const skb_frag_t *frag`` the paged fragment **Return** the :c:type:`struct page ` associated with **frag**. Returns NULL if this frag has no associated page.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMihjubj)}(hhh]j)}(h.``const skb_frag_t *frag`` the paged fragment h](j)}(h``const skb_frag_t *frag``h]j)}(hjh]hconst skb_frag_t *frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMfhj ubj)}(hhh]jX)}(hthe paged fragmenth]hthe paged fragment}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMfhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMfhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhhjubjX)}(hlthe :c:type:`struct page ` associated with **frag**. Returns NULL if this frag has no associated page.h](hthe }(hjahhhNhNubh)}(h:c:type:`struct page `h]j)}(hjkh]h struct page}(hjmhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjpageuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhhjaubh associated with }(hjahhhNhNubj)}(h**frag**h]hfrag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh3. Returns NULL if this frag has no associated page.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_netmem (C function)c.skb_frag_netmemhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3netmem_ref skb_frag_netmem (const skb_frag_t *frag)h]h)}(h2netmem_ref skb_frag_netmem(const skb_frag_t *frag)h](h)}(hhh]j%)}(h netmem_refh]h netmem_ref}(hjȻhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjŻubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjʻmodnameN classnameNjj!)}j$]j')}jskb_frag_netmemsbc.skb_frag_netmemasbuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMtubj)}(hskb_frag_netmemh]j%)}(hjh]hskb_frag_netmem}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMtubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]jc.skb_frag_netmemasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfragh]hfrag}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMtubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMtubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMthjhhubjS)}(hhh]jX)}(h-retrieve the netmem referred to by a fragmenth]h-retrieve the netmem referred to by a fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMthjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMtubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hy**Parameters** ``const skb_frag_t *frag`` the fragment **Return** the :c:type:`netmem_ref` associated with **frag**.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMxhjubj)}(hhh]j)}(h(``const skb_frag_t *frag`` the fragment h](j)}(h``const skb_frag_t *frag``h]j)}(hjټh]hconst skb_frag_t *frag}(hjۼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׼ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMuhjӼubj)}(hhh]jX)}(h the fragmenth]h the fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjӼubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjмubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMwhjubjX)}(h2the :c:type:`netmem_ref` associated with **frag**.h](hthe }(hj*hhhNhNubh)}(h:c:type:`netmem_ref`h]j)}(hj4h]h netmem_ref}(hj6hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj netmem_refuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMwhj*ubh associated with }(hj*hhhNhNubj)}(h**frag**h]hfrag}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjQhMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_address (C function)c.skb_frag_addresshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h0void * skb_frag_address (const skb_frag_t *frag)h]h)}(h.void *skb_frag_address(const skb_frag_t *frag)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hskb_frag_addressh]j%)}(hskb_frag_addressh]hskb_frag_address}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjؽhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjԽubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjԽubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_frag_addressasbuh1hhjԽubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjԽubj;)}(hj>h]h*}(hj$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjԽubj%)}(hfragh]hfrag}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjԽubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjнubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h:gets the address of the data contained in a paged fragmenth]h:gets the address of the data contained in a paged fragment}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const skb_frag_t *frag`` the paged fragment buffer **Return** the address of the data within **frag**. The page must already be mapped.h](jX)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjwubj)}(hhh]j)}(h5``const skb_frag_t *frag`` the paged fragment buffer h](j)}(h``const skb_frag_t *frag``h]j)}(hjh]hconst skb_frag_t *frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hthe paged fragment bufferh]hthe paged fragment buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubjX)}(h **Return**h]j)}(hj׾h]hReturn}(hjپhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjվubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjwubjX)}(hIthe address of the data within **frag**. The page must already be mapped.h](hthe address of the data within }(hjhhhNhNubj)}(h**frag**h]hfrag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh". The page must already be mapped.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"skb_frag_address_safe (C function)c.skb_frag_address_safehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h5void * skb_frag_address_safe (const skb_frag_t *frag)h]h)}(h3void *skb_frag_address_safe(const skb_frag_t *frag)h](j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj<hMubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*hhhj<hMubj)}(hskb_frag_address_safeh]j%)}(hskb_frag_address_safeh]hskb_frag_address_safe}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj<hMubj)}(h(const skb_frag_t *frag)h]j)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj^sbc.skb_frag_address_safeasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hjĿhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(hfragh]hfrag}(hjѿhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpubah}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj<hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&hhhj<hMubah}(h]j!ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hMhj#hhubjS)}(hhh]jX)}(h:gets the address of the data contained in a paged fragmenth]h:gets the address of the data contained in a paged fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj#hhhj<hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const skb_frag_t *frag`` the paged fragment buffer **Return** the address of the data within **frag**. Checks that the page is mapped and returns ``NULL`` otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h5``const skb_frag_t *frag`` the paged fragment buffer h](j)}(h``const skb_frag_t *frag``h]j)}(hj<h]hconst skb_frag_t *frag}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj6ubj)}(hhh]jX)}(hthe paged fragment bufferh]hthe paged fragment buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjwh]hReturn}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(hgthe address of the data within **frag**. Checks that the page is mapped and returns ``NULL`` otherwise.h](hthe address of the data within }(hjhhhNhNubj)}(h**frag**h]hfrag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh-. Checks that the page is mapped and returns }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_frag_page_copy (C function)c.skb_frag_page_copyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hHvoid skb_frag_page_copy (skb_frag_t *fragto, const skb_frag_t *fragfrom)h]h)}(hGvoid skb_frag_page_copy(skb_frag_t *fragto, const skb_frag_t *fragfrom)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_frag_page_copyh]j%)}(hskb_frag_page_copyh]hskb_frag_page_copy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h0(skb_frag_t *fragto, const skb_frag_t *fragfrom)h](j)}(hskb_frag_t *fragtoh](h)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jjsbc.skb_frag_page_copyasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfragtoh]hfragto}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst skb_frag_t *fragfromh](h)}(hjh]hconst}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j<c.skb_frag_page_copyasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hfragfromh]hfragfrom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h1sets the page in a fragment from another fragmenth]h1sets the page in a fragment from another fragment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``skb_frag_t *fragto`` skb fragment where page is set ``const skb_frag_t *fragfrom`` skb fragment page is copied fromh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h6``skb_frag_t *fragto`` skb fragment where page is set h](j)}(h``skb_frag_t *fragto``h]j)}(hj6h]hskb_frag_t *fragto}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj0ubj)}(hhh]jX)}(hskb fragment where page is seth]hskb fragment where page is set}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h?``const skb_frag_t *fragfrom`` skb fragment page is copied fromh](j)}(h``const skb_frag_t *fragfrom``h]j)}(hjoh]hconst skb_frag_t *fragfrom}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjiubj)}(hhh]jX)}(h skb fragment page is copied fromh]h skb fragment page is copied from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_frag_dma_map (C function)c.__skb_frag_dma_maphNtauh1hhj[hhhNhNubh)}(hhh](h)}(hdma_addr_t __skb_frag_dma_map (struct device *dev, const skb_frag_t *frag, size_t offset, size_t size, enum dma_data_direction dir)h]h)}(hdma_addr_t __skb_frag_dma_map(struct device *dev, const skb_frag_t *frag, size_t offset, size_t size, enum dma_data_direction dir)h](h)}(hhh]j%)}(h dma_addr_th]h dma_addr_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j__skb_frag_dma_mapsbc.__skb_frag_dma_mapasbuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h__skb_frag_dma_maph]j%)}(hjh]h__skb_frag_dma_map}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(he(struct device *dev, const skb_frag_t *frag, size_t offset, size_t size, enum dma_data_direction dir)h](j)}(hstruct device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hdeviceh]hdevice}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]jc.__skb_frag_dma_mapasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst skb_frag_t *fragh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_frag_th]h skb_frag_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__skb_frag_dma_mapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfragh]hfrag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t offseth](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__skb_frag_dma_mapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t sizeh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]jc.__skb_frag_dma_mapasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hsizeh]hsize}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(henum dma_data_direction dirh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hdma_data_directionh]hdma_data_direction}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__skb_frag_dma_mapasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdirh]hdir}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h%maps a paged fragment via the DMA APIh]h%maps a paged fragment via the DMA API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct device *dev`` the device to map the fragment to ``const skb_frag_t *frag`` the paged fragment to map ``size_t offset`` the offset within the fragment (starting at the fragment's own offset) ``size_t size`` the number of bytes to map ``enum dma_data_direction dir`` the direction of the mapping (``PCI_DMA_*``) **Description** Maps the page associated with **frag** to **device**.h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h9``struct device *dev`` the device to map the fragment to h](j)}(h``struct device *dev``h]j)}(hj@h]hstruct device *dev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj:ubj)}(hhh]jX)}(h!the device to map the fragment toh]h!the device to map the fragment to}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h5``const skb_frag_t *frag`` the paged fragment to map h](j)}(h``const skb_frag_t *frag``h]j)}(hjyh]hconst skb_frag_t *frag}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjsubj)}(hhh]jX)}(hthe paged fragment to maph]hthe paged fragment to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(hY``size_t offset`` the offset within the fragment (starting at the fragment's own offset) h](j)}(h``size_t offset``h]j)}(hjh]h size_t offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hFthe offset within the fragment (starting at the fragment's own offset)h]hHthe offset within the fragment (starting at the fragment’s own offset)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(h+``size_t size`` the number of bytes to map h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hthe number of bytes to maph]hthe number of bytes to map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(hM``enum dma_data_direction dir`` the direction of the mapping (``PCI_DMA_*``) h](j)}(h``enum dma_data_direction dir``h]j)}(hj%h]henum dma_data_direction dir}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h,the direction of the mapping (``PCI_DMA_*``)h](hthe direction of the mapping (}(hj>hhhNhNubj)}(h ``PCI_DMA_*``h]h PCI_DMA_*}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh)}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h5Maps the page associated with **frag** to **device**.h](hMaps the page associated with }(hjhhhNhNubj)}(h**frag**h]hfrag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h **device**h]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_clone_writable (C function)c.skb_clone_writablehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hDint skb_clone_writable (const struct sk_buff *skb, unsigned int len)h]h)}(hCint skb_clone_writable(const struct sk_buff *skb, unsigned int len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_clone_writableh]j%)}(hskb_clone_writableh]hskb_clone_writable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h-(const struct sk_buff *skb, unsigned int len)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]j')}jjsbc.skb_clone_writableasbuh1hhjubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h!is the header of a clone writableh]h!is the header of a clone writable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to check ``unsigned int len`` length up to which to write **Description** Returns true if modifying the header part of the cloned buffer does not requires the data to be copied.h](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj#ubj)}(hhh](j)}(h.``const struct sk_buff *skb`` buffer to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjHh]hconst struct sk_buff *skb}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjBubj)}(hhh]jX)}(hbuffer to checkh]hbuffer to check}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubj)}(h1``unsigned int len`` length up to which to write h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj{ubj)}(hhh]jX)}(hlength up to which to writeh]hlength up to which to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj#ubj )}(hgReturns true if modifying the header part of the cloned buffer does not requires the data to be copied.h]jX)}(hgReturns true if modifying the header part of the cloned buffer does not requires the data to be copied.h]hgReturns true if modifying the header part of the cloned buffer does not requires the data to be copied.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_cow (C function) c.skb_cowhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h8int skb_cow (struct sk_buff *skb, unsigned int headroom)h]h)}(h7int skb_cow(struct sk_buff *skb, unsigned int headroom)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_cowh]j%)}(hskb_cowh]hskb_cow}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h,(struct sk_buff *skb, unsigned int headroom)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhmodnameN classnameNjj!)}j$]j')}jj.sb c.skb_cowasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubj)}(hunsigned int headroomh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hheadroomh]hheadroom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h© header of skb when it is requiredh]h© header of skb when it is required}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to cow ``unsigned int headroom`` needed headroom **Description** If the skb passed lacks sufficient headroom or its data part is shared, data is reallocated. If reallocation fails, an error is returned and original skb is not changed. The result is skb with writable area skb->head...skb->tail and at least **headroom** of space at head.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj8ubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to cow h](j)}(h``struct sk_buff *skb``h]j)}(hj]h]hstruct sk_buff *skb}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjWubj)}(hhh]jX)}(h buffer to cowh]h buffer to cow}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h*``unsigned int headroom`` needed headroom h](j)}(h``unsigned int headroom``h]j)}(hjh]hunsigned int headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hneeded headroomh]hneeded headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj8ubj )}(hXIf the skb passed lacks sufficient headroom or its data part is shared, data is reallocated. If reallocation fails, an error is returned and original skb is not changed. The result is skb with writable area skb->head...skb->tail and at least **headroom** of space at head.h](jX)}(hIf the skb passed lacks sufficient headroom or its data part is shared, data is reallocated. If reallocation fails, an error is returned and original skb is not changed.h]hIf the skb passed lacks sufficient headroom or its data part is shared, data is reallocated. If reallocation fails, an error is returned and original skb is not changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(hfThe result is skb with writable area skb->head...skb->tail and at least **headroom** of space at head.h](hHThe result is skb with writable area skb->head...skb->tail and at least }(hjhhhNhNubj)}(h **headroom**h]hheadroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh of space at head.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_cow_head (C function)c.skb_cow_headhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=int skb_cow_head (struct sk_buff *skb, unsigned int headroom)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubj)}(hunsigned int headroomh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hheadroomh]hheadroom}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubeh}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhjOhM%ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj9hhhjOhM%ubah}(h]j4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhM%hj6hhubjS)}(hhh]jX)}(h)skb_cow but only making the head writableh]h)skb_cow but only making the head writable}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM%hjOhhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhjOhM%ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhj[hNhNubj})}(hXS**Parameters** ``struct sk_buff *skb`` buffer to cow ``unsigned int headroom`` needed headroom **Description** This function is identical to skb_cow except that we replace the skb_cloned check by skb_header_cloned. It should be used when you only need to push on some header and do not need to modify the data.h](jX)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM)hjnubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to cow h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM&hjubj)}(hhh]jX)}(h buffer to cowh]h buffer to cow}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(h*``unsigned int headroom`` needed headroom h](j)}(h``unsigned int headroom``h]j)}(hjh]hunsigned int headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM'hjubj)}(hhh]jX)}(hneeded headroomh]hneeded headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubeh}(h]h ]h"]h$]h&]uh1jhjnubjX)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM)hjnubj )}(hThis function is identical to skb_cow except that we replace the skb_cloned check by skb_header_cloned. It should be used when you only need to push on some header and do not need to modify the data.h]jX)}(hThis function is identical to skb_cow except that we replace the skb_cloned check by skb_header_cloned. It should be used when you only need to push on some header and do not need to modify the data.h]hThis function is identical to skb_cow except that we replace the skb_cloned check by skb_header_cloned. It should be used when you only need to push on some header and do not need to modify the data.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM(hjubah}(h]h ]h"]h$]h&]uh1j hj/hM(hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_padto (C function) c.skb_padtohNtauh1hhj[hhhNhNubh)}(hhh](h)}(h5int skb_padto (struct sk_buff *skb, unsigned int len)h]h)}(h4int skb_padto(struct sk_buff *skb, unsigned int len)h](j)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM4ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhjdhM4ubj)}(h skb_padtoh]j%)}(h skb_padtoh]h skb_padto}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhjdhM4ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjysb c.skb_padtoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhjdhM4ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjNhhhjdhM4ubah}(h]jIah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjdhM4hjKhhubjS)}(hhh]jX)}(h"pad an skbuff up to a minimal sizeh]h"pad an skbuff up to a minimal size}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM4hjdhhubah}(h]h ]h"]h$]h&]uh1jRhjKhhhjdhM4ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXW**Parameters** ``struct sk_buff *skb`` buffer to pad ``unsigned int len`` minimal length **Description** Pads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM8hjubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM5hjubj)}(hhh]jX)}(h buffer to padh]h buffer to pad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(h$``unsigned int len`` minimal length h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM6hjubj)}(hhh]jX)}(hminimal lengthh]hminimal length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM8hjubj )}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h]jX)}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h]hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM7hj2ubah}(h]h ]h"]h$]h&]uh1j hjDhM7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_put_padto (C function)c.__skb_put_padtohNtauh1hhj[hhhNhNubh)}(hhh](h)}(hOint __skb_put_padto (struct sk_buff *skb, unsigned int len, bool free_on_error)h]h)}(hNint __skb_put_padto(struct sk_buff *skb, unsigned int len, bool free_on_error)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMFubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjghhhjyhMFubj)}(h__skb_put_padtoh]j%)}(h__skb_put_padtoh]h__skb_put_padto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjghhhjyhMFubj)}(h;(struct sk_buff *skb, unsigned int len, bool free_on_error)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__skb_put_padtoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hbool free_on_errorh](j)}(hjTh]hbool}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj%)}(h free_on_errorh]h free_on_error}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjghhhjyhMFubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjyhMFubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMFhj`hhubjS)}(hhh]jX)}(h4increase size and pad an skbuff up to a minimal sizeh]h4increase size and pad an skbuff up to a minimal size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMFhjhhubah}(h]h ]h"]h$]h&]uh1jRhj`hhhjyhMFubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to pad ``unsigned int len`` minimal length ``bool free_on_error`` free buffer on error **Description** Pads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error if **free_on_error** is true.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMJhjubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMGhjubj)}(hhh]jX)}(h buffer to padh]h buffer to pad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjubj)}(h$``unsigned int len`` minimal length h](j)}(h``unsigned int len``h]j)}(hj*h]hunsigned int len}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhj$ubj)}(hhh]jX)}(hminimal lengthh]hminimal length}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMHhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMHhjubj)}(h,``bool free_on_error`` free buffer on error h](j)}(h``bool free_on_error``h]j)}(hjch]hbool free_on_error}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMIhj]ubj)}(hhh]jX)}(hfree buffer on errorh]hfree buffer on error}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhMIhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMIhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMKhjubj )}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error if **free_on_error** is true.h]jX)}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error if **free_on_error** is true.h](hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error if }(hjhhhNhNubj)}(h**free_on_error**h]h free_on_error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMJhjubah}(h]h ]h"]h$]h&]uh1j hjhMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_put_padto (C function)c.skb_put_padtohNtauh1hhj[hhhNhNubh)}(hhh](h)}(h9int skb_put_padto (struct sk_buff *skb, unsigned int len)h]h)}(h8int skb_put_padto(struct sk_buff *skb, unsigned int len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hM`ubj)}(h skb_put_padtoh]j%)}(h skb_put_padtoh]h skb_put_padto}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hM`ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj"sbc.skb_put_padtoasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hM`ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hM`ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM`hjhhubjS)}(hhh]jX)}(h4increase size and pad an skbuff up to a minimal sizeh]h4increase size and pad an skbuff up to a minimal size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM`hj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hM`ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(jxj(jyjzj{uh1hhhhj[hNhNubj})}(hXW**Parameters** ``struct sk_buff *skb`` buffer to pad ``unsigned int len`` minimal length **Description** Pads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h](jX)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMdhj,ubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjQh]hstruct sk_buff *skb}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMahjKubj)}(hhh]jX)}(h buffer to padh]h buffer to pad}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhMahjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMahjHubj)}(h$``unsigned int len`` minimal length h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMbhjubj)}(hhh]jX)}(hminimal lengthh]hminimal length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMdhj,ubj )}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h]jX)}(hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.h]hPads up a buffer to ensure the trailing bytes exist and are blanked. If the buffer already contains sufficient data it is untouched. Otherwise it is extended. Returns zero on success. The skb is freed on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMchjubah}(h]h ]h"]h$]h&]uh1j hjhMchj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_linearize (C function)c.skb_linearizehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h'int skb_linearize (struct sk_buff *skb)h]h)}(h&int skb_linearize(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj"hMubj)}(h skb_linearizeh]j%)}(h skb_linearizeh]h skb_linearize}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj"hMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqmodnameN classnameNjj!)}j$]j')}jj7sbc.skb_linearizeasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj"hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"hMhj hhubjS)}(hhh]jX)}(hconvert paged skb to linear oneh]hconvert paged skb to linear one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj"hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer to linarize **Description** If there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h+``struct sk_buff *skb`` buffer to linarize h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hbuffer to linarizeh]hbuffer to linarize}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj )}(hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h]jX)}(hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h]hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjfubah}(h]h ]h"]h$]h&]uh1j hjxhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h skb_has_shared_frag (C function)c.skb_has_shared_fraghNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4bool skb_has_shared_frag (const struct sk_buff *skb)h]h)}(h3bool skb_has_shared_frag(const struct sk_buff *skb)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_has_shared_fragh]j%)}(hskb_has_shared_fragh]hskb_has_shared_frag}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_has_shared_fragasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hcan any frag be overwrittenh]hcan any frag be overwritten}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjvhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to test **Return** true if the skb has at least one frag that might be modified by an external entity (as in vmsplice()/sendfile())h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h-``const struct sk_buff *skb`` buffer to test h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hbuffer to testh]hbuffer to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(hptrue if the skb has at least one frag that might be modified by an external entity (as in vmsplice()/sendfile())h]hptrue if the skb has at least one frag that might be modified by an external entity (as in vmsplice()/sendfile())}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_linearize_cow (C function)c.skb_linearize_cowhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h+int skb_linearize_cow (struct sk_buff *skb)h]h)}(h*int skb_linearize_cow(struct sk_buff *skb)h](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhjHhMubj)}(hskb_linearize_cowh]j%)}(hskb_linearize_cowh]hskb_linearize_cow}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhjHhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj]sbc.skb_linearize_cowasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjsubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjoubah}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhjHhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2hhhjHhMubah}(h]j-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhMhj/hhubjS)}(hhh]jX)}(h$make sure skb is linear and writableh]h$make sure skb is linear and writable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj/hhhjHhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer to process **Description** If there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h*``struct sk_buff *skb`` buffer to process h](j)}(h``struct sk_buff *skb``h]j)}(hj;h]hstruct sk_buff *skb}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj5ubj)}(hhh]jX)}(hbuffer to processh]hbuffer to process}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj )}(hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h]jX)}(hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.h]hiIf there is no free memory -ENOMEM is returned, otherwise zero is returned and the old skb data released.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_postpull_rcsum (C function)c.skb_postpull_rcsumhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hRvoid skb_postpull_rcsum (struct sk_buff *skb, const void *start, unsigned int len)h]h)}(hQvoid skb_postpull_rcsum(struct sk_buff *skb, const void *start, unsigned int len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_postpull_rcsumh]j%)}(hskb_postpull_rcsumh]hskb_postpull_rcsum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h:(struct sk_buff *skb, const void *start, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jjsbc.skb_postpull_rcsumasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst void *starth](h)}(hjh]hconst}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h+update checksum for received skb after pullh]h+update checksum for received skb after pull}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhj[hNhNubj})}(hXr**Parameters** ``struct sk_buff *skb`` buffer to update ``const void *start`` start of data before pull ``unsigned int len`` length of data pulled **Description** After doing a pull on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum, or set ip_summed to CHECKSUM_NONE so that it can be recomputed from scratch.h](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjOubj)}(hhh](j)}(h)``struct sk_buff *skb`` buffer to update h](j)}(h``struct sk_buff *skb``h]j)}(hjth]hstruct sk_buff *skb}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjnubj)}(hhh]jX)}(hbuffer to updateh]hbuffer to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h0``const void *start`` start of data before pull h](j)}(h``const void *start``h]j)}(hjh]hconst void *start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hstart of data before pullh]hstart of data before pull}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h+``unsigned int len`` length of data pulled h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hlength of data pulledh]hlength of data pulled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjOubj )}(hAfter doing a pull on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum, or set ip_summed to CHECKSUM_NONE so that it can be recomputed from scratch.h]jX)}(hAfter doing a pull on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum, or set ip_summed to CHECKSUM_NONE so that it can be recomputed from scratch.h]hAfter doing a pull on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum, or set ip_summed to CHECKSUM_NONE so that it can be recomputed from scratch.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj7ubah}(h]h ]h"]h$]h&]uh1j hjIhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_postpush_rcsum (C function)c.skb_postpush_rcsumhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hRvoid skb_postpush_rcsum (struct sk_buff *skb, const void *start, unsigned int len)h]h)}(hQvoid skb_postpush_rcsum(struct sk_buff *skb, const void *start, unsigned int len)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhj~hMubj)}(hskb_postpush_rcsumh]j%)}(hskb_postpush_rcsumh]hskb_postpush_rcsum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjlhhhj~hMubj)}(h:(struct sk_buff *skb, const void *start, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_postpush_rcsumasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst void *starth](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstarth]hstart}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhj~hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhj~hMubah}(h]jcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hMhjehhubjS)}(hhh]jX)}(h+update checksum for received skb after pushh]h+update checksum for received skb after push}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjehhhj~hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to update ``const void *start`` start of data after push ``unsigned int len`` length of data pushed **Description** After doing a push on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h)``struct sk_buff *skb`` buffer to update h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hbuffer to updateh]hbuffer to update}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h/``const void *start`` start of data after push h](j)}(h``const void *start``h]j)}(hjXh]hconst void *start}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjRubj)}(hhh]jX)}(hstart of data after pushh]hstart of data after push}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(h+``unsigned int len`` length of data pushed h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hlength of data pushedh]hlength of data pushed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj )}(hhAfter doing a push on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum.h]jX)}(hhAfter doing a push on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum.h]hhAfter doing a push on a received packet, you need to call this to update the CHECKSUM_COMPLETE checksum.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_push_rcsum (C function)c.skb_push_rcsumhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=void * skb_push_rcsum (struct sk_buff *skb, unsigned int len)h]h)}(h;void *skb_push_rcsum(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj)hMubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhj)hMubj)}(hskb_push_rcsumh]j%)}(hskb_push_rcsumh]hskb_push_rcsum}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj)hMubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjKsbc.skb_push_rcsumasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjaubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj)hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMhjhhubjS)}(hhh]jX)}(h$push skb and update receive checksumh]h$push skb and update receive checksum}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj)hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjQjxjQjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to update ``unsigned int len`` length of data pulled **Description** This function performs an skb_push on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_push unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h](jX)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjUubj)}(hhh](j)}(h)``struct sk_buff *skb`` buffer to update h](j)}(h``struct sk_buff *skb``h]j)}(hjzh]hstruct sk_buff *skb}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjtubj)}(hhh]jX)}(hbuffer to updateh]hbuffer to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubj)}(h+``unsigned int len`` length of data pulled h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hlength of data pulledh]hlength of data pulled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjqubeh}(h]h ]h"]h$]h&]uh1jhjUubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjUubj )}(hXThis function performs an skb_push on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_push unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h]jX)}(hXThis function performs an skb_push on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_push unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h]hXThis function performs an skb_push on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_push unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpskb_trim_rcsum (C function)c.pskb_trim_rcsumhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h;int pskb_trim_rcsum (struct sk_buff *skb, unsigned int len)h]h)}(h:int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)h](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhjKhMubj)}(hpskb_trim_rcsumh]j%)}(hpskb_trim_rcsumh]hpskb_trim_rcsum}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9hhhjKhMubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj`sbc.pskb_trim_rcsumasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubeh}(h]h ]h"]h$]h&]j<j=uh1jhj9hhhjKhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhjKhMubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhMhj2hhubjS)}(hhh]jX)}(h%trim received skb and update checksumh]h%trim received skb and update checksum}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjKhhubah}(h]h ]h"]h$]h&]uh1jRhj2hhhjKhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjfjxjfjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to trim ``unsigned int len`` new length **Description** This is exactly the same as pskb_trim except that it ensures the checksum of received packets are still valid after the operation. It can change skb pointers.h](jX)}(h**Parameters**h]j)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjjubj)}(hhh](j)}(h'``struct sk_buff *skb`` buffer to trim h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hbuffer to trimh]hbuffer to trim}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``unsigned int len`` new length h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h new lengthh]h new length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjjubj )}(hThis is exactly the same as pskb_trim except that it ensures the checksum of received packets are still valid after the operation. It can change skb pointers.h]jX)}(hThis is exactly the same as pskb_trim except that it ensures the checksum of received packets are still valid after the operation. It can change skb pointers.h]hThis is exactly the same as pskb_trim except that it ensures the checksum of received packets are still valid after the operation. It can change skb pointers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1j hj+hMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h skb_needs_linearize (C function)c.skb_needs_linearizehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hJbool skb_needs_linearize (struct sk_buff *skb, netdev_features_t features)h]h)}(hIbool skb_needs_linearize(struct sk_buff *skb, netdev_features_t features)h](j)}(hjTh]hbool}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNhhhj_hMubj)}(hskb_needs_linearizeh]j%)}(hskb_needs_linearizeh]hskb_needs_linearize}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjNhhhj_hMubj)}(h1(struct sk_buff *skb, netdev_features_t features)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjtsbc.skb_needs_linearizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hnetdev_features_t featuresh](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_needs_linearizeasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hfeaturesh]hfeatures}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjNhhhj_hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjJhhhj_hMubah}(h]jEah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj_hMhjGhhubjS)}(hhh]jX)}(hQcheck if we need to linearize a given skb depending on the given device features.h]hQcheck if we need to linearize a given skb depending on the given device features.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjVhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhj_hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjqjxjqjyjzj{uh1hhhhj[hNhNubj})}(hX)**Parameters** ``struct sk_buff *skb`` socket buffer to check ``netdev_features_t features`` net device features **Description** Returns true if either: 1. skb has frag_list and the device doesn't support FRAGLIST, or 2. skb is fragmented and the device does not support SG.h](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjuubj)}(hhh](j)}(h/``struct sk_buff *skb`` socket buffer to check h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hsocket buffer to checkh]hsocket buffer to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``netdev_features_t features`` net device features h](j)}(h``netdev_features_t features``h]j)}(hjh]hnetdev_features_t features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hnet device featuresh]hnet device features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjuubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjuubj )}(hReturns true if either: 1. skb has frag_list and the device doesn't support FRAGLIST, or 2. skb is fragmented and the device does not support SG.h]jX)}(hReturns true if either: 1. skb has frag_list and the device doesn't support FRAGLIST, or 2. skb is fragmented and the device does not support SG.h]hReturns true if either: 1. skb has frag_list and the device doesn’t support FRAGLIST, or 2. skb is fragmented and the device does not support SG.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj6hMhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_get_timestamp (C function)c.skb_get_timestamphNtauh1hhj[hhhNhNubh)}(hhh](h)}(hVvoid skb_get_timestamp (const struct sk_buff *skb, struct __kernel_old_timeval *stamp)h]h)}(hUvoid skb_get_timestamp(const struct sk_buff *skb, struct __kernel_old_timeval *stamp)h](j)}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYhhhjkhMubj)}(hskb_get_timestamph]j%)}(hskb_get_timestamph]hskb_get_timestamp}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYhhhjkhMubj)}(h?(const struct sk_buff *skb, struct __kernel_old_timeval *stamp)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_get_timestampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h"struct __kernel_old_timeval *stamph](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubh)}(hhh]j%)}(h__kernel_old_timevalh]h__kernel_old_timeval}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]jc.skb_get_timestampasbuh1hhj#ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hstamph]hstamp}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjYhhhjkhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUhhhjkhMubah}(h]jPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkhMhjRhhubjS)}(hhh]jX)}(hget timestamp from a skbh]hget timestamp from a skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjRhhhjkhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX]**Parameters** ``const struct sk_buff *skb`` skb to get stamp from ``struct __kernel_old_timeval *stamp`` pointer to struct __kernel_old_timeval to store stamp in **Description** Timestamps are stored in the skb as offsets to a base timestamp. This function converts the offset back to a struct timeval and stores it in stamp.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj)}(hhh](j)}(h4``const struct sk_buff *skb`` skb to get stamp from h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hskb to get stamp fromh]hskb to get stamp from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h```struct __kernel_old_timeval *stamp`` pointer to struct __kernel_old_timeval to store stamp in h](j)}(h&``struct __kernel_old_timeval *stamp``h]j)}(hj"h]h"struct __kernel_old_timeval *stamp}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h8pointer to struct __kernel_old_timeval to store stamp inh]h8pointer to struct __kernel_old_timeval to store stamp in}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjubj )}(hTimestamps are stored in the skb as offsets to a base timestamp. This function converts the offset back to a struct timeval and stores it in stamp.h]jX)}(hTimestamps are stored in the skb as offsets to a base timestamp. This function converts the offset back to a struct timeval and stores it in stamp.h]hTimestamps are stored in the skb as offsets to a base timestamp. This function converts the offset back to a struct timeval and stores it in stamp.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjsubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_data_move (C function)c.skb_data_movehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hMvoid skb_data_move (struct sk_buff *skb, const int len, const unsigned int n)h]h)}(hLvoid skb_data_move(struct sk_buff *skb, const int len, const unsigned int n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h skb_data_moveh]j%)}(h skb_data_moveh]h skb_data_move}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h:(struct sk_buff *skb, const int len, const unsigned int n)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.skb_data_moveasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const int lenh](h)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst unsigned int nh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h=Move packet data and metadata after skb_push() or skb_pull().h]h=Move packet data and metadata after skb_push() or skb_pull().}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?jxj?jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` packet to operate on ``const int len`` number of bytes pushed or pulled from :c:type:`sk_buff->data ` ``const unsigned int n`` number of bytes to memmove() from pre-push/pull :c:type:`sk_buff->data ` **Description** Moves **n** bytes of packet data, can be zero, and all bytes of skb metadata. Assumes metadata is located immediately before :c:type:`sk_buff->data ` prior to the push/pull, and that sufficient headroom exists to hold it after an skb_push(). Otherwise, metadata is cleared and a one-time warning is issued. Prefer skb_postpull_data_move() or skb_postpush_data_move() to calling this helper directly.h](jX)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjCubj)}(hhh](j)}(h-``struct sk_buff *skb`` packet to operate on h](j)}(h``struct sk_buff *skb``h]j)}(hjhh]hstruct sk_buff *skb}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjbubj)}(hhh]jX)}(hpacket to operate onh]hpacket to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj_ubj)}(hZ``const int len`` number of bytes pushed or pulled from :c:type:`sk_buff->data ` h](j)}(h``const int len``h]j)}(hjh]h const int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hGnumber of bytes pushed or pulled from :c:type:`sk_buff->data `h](h&number of bytes pushed or pulled from }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubj)}(hk``const unsigned int n`` number of bytes to memmove() from pre-push/pull :c:type:`sk_buff->data ` h](j)}(h``const unsigned int n``h]j)}(hjh]hconst unsigned int n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hQnumber of bytes to memmove() from pre-push/pull :c:type:`sk_buff->data `h](h0number of bytes to memmove() from pre-push/pull }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubjX)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjCubjX)}(hMMoves **n** bytes of packet data, can be zero, and all bytes of skb metadata.h](hMoves }(hjihhhNhNubj)}(h**n**h]hn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhB bytes of packet data, can be zero, and all bytes of skb metadata.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjCubjX)}(hAssumes metadata is located immediately before :c:type:`sk_buff->data ` prior to the push/pull, and that sufficient headroom exists to hold it after an skb_push(). Otherwise, metadata is cleared and a one-time warning is issued.h](h/Assumes metadata is located immediately before }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubh prior to the push/pull, and that sufficient headroom exists to hold it after an skb_push(). Otherwise, metadata is cleared and a one-time warning is issued.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjCubjX)}(h\Prefer skb_postpull_data_move() or skb_postpush_data_move() to calling this helper directly.h]h\Prefer skb_postpull_data_move() or skb_postpush_data_move() to calling this helper directly.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#skb_postpull_data_move (C function)c.skb_postpull_data_movehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_void skb_postpull_data_move (struct sk_buff *skb, const unsigned int len, const unsigned int n)h]h)}(h^void skb_postpull_data_move(struct sk_buff *skb, const unsigned int len, const unsigned int n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_postpull_data_moveh]j%)}(hskb_postpull_data_moveh]hskb_postpull_data_move}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hC(struct sk_buff *skb, const unsigned int len, const unsigned int n)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j')}jjsbc.skb_postpull_data_moveasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hconst unsigned int lenh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hconst unsigned int nh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hj0h]hn}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h/Move packet data and metadata after skb_pull().h]h/Move packet data and metadata after skb_pull().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX6**Parameters** ``struct sk_buff *skb`` packet to operate on ``const unsigned int len`` number of bytes pulled from :c:type:`sk_buff->data ` ``const unsigned int n`` number of bytes to memmove() from pre-pull :c:type:`sk_buff->data ` **Description** See skb_data_move() for details.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h-``struct sk_buff *skb`` packet to operate on h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hpacket to operate onh]hpacket to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hY``const unsigned int len`` number of bytes pulled from :c:type:`sk_buff->data ` h](j)}(h``const unsigned int len``h]j)}(hjh]hconst unsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h=number of bytes pulled from :c:type:`sk_buff->data `h](hnumber of bytes pulled from }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hj!hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hf``const unsigned int n`` number of bytes to memmove() from pre-pull :c:type:`sk_buff->data ` h](j)}(h``const unsigned int n``h]j)}(hjTh]hconst unsigned int n}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjNubj)}(hhh]jX)}(hLnumber of bytes to memmove() from pre-pull :c:type:`sk_buff->data `h](h+number of bytes to memmove() from pre-pull }(hjmhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjwh]h sk_buff->data}(hjyhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjihMhjmubeh}(h]h ]h"]h$]h&]uh1jWhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h See skb_data_move() for details.h]h See skb_data_move() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#skb_postpush_data_move (C function)c.skb_postpush_data_movehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_void skb_postpush_data_move (struct sk_buff *skb, const unsigned int len, const unsigned int n)h]h)}(h^void skb_postpush_data_move(struct sk_buff *skb, const unsigned int len, const unsigned int n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hskb_postpush_data_moveh]j%)}(hskb_postpush_data_moveh]hskb_postpush_data_move}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(hC(struct sk_buff *skb, const unsigned int len, const unsigned int n)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j')}jjsbc.skb_postpush_data_moveasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hconst unsigned int lenh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hconst unsigned int nh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hj0h]hn}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h/Move packet data and metadata after skb_push().h]h/Move packet data and metadata after skb_push().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX6**Parameters** ``struct sk_buff *skb`` packet to operate on ``const unsigned int len`` number of bytes pushed onto :c:type:`sk_buff->data ` ``const unsigned int n`` number of bytes to memmove() from pre-push :c:type:`sk_buff->data ` **Description** See skb_data_move() for details.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM$hjubj)}(hhh](j)}(h-``struct sk_buff *skb`` packet to operate on h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM!hjubj)}(hhh]jX)}(hpacket to operate onh]hpacket to operate on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(hY``const unsigned int len`` number of bytes pushed onto :c:type:`sk_buff->data ` h](j)}(h``const unsigned int len``h]j)}(hjh]hconst unsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM"hjubj)}(hhh]jX)}(h=number of bytes pushed onto :c:type:`sk_buff->data `h](hnumber of bytes pushed onto }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hj'h]h sk_buff->data}(hj)hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhM"hjubeh}(h]h ]h"]h$]h&]uh1jWhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(hf``const unsigned int n`` number of bytes to memmove() from pre-push :c:type:`sk_buff->data ` h](j)}(h``const unsigned int n``h]j)}(hj\h]hconst unsigned int n}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM#hjVubj)}(hhh]jX)}(hLnumber of bytes to memmove() from pre-push :c:type:`sk_buff->data `h](h+number of bytes to memmove() from pre-push }(hjuhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjqhM#hjuubeh}(h]h ]h"]h$]h&]uh1jWhjqhM#hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM#hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM%hjubjX)}(h See skb_data_move() for details.h]h See skb_data_move() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&skb_complete_tx_timestamp (C function)c.skb_complete_tx_timestamphNtauh1hhj[hhhNhNubh)}(hhh](h)}(h\void skb_complete_tx_timestamp (struct sk_buff *skb, struct skb_shared_hwtstamps *hwtstamps)h]h)}(h[void skb_complete_tx_timestamp(struct sk_buff *skb, struct skb_shared_hwtstamps *hwtstamps)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMDubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMDubj)}(hskb_complete_tx_timestamph]j%)}(hskb_complete_tx_timestamph]hskb_complete_tx_timestamp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMDubj)}(h=(struct sk_buff *skb, struct skb_shared_hwtstamps *hwtstamps)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j')}jjsbc.skb_complete_tx_timestampasbuh1hhj4ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(h&struct skb_shared_hwtstamps *hwtstampsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_shared_hwtstampsh]hskb_shared_hwtstamps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jrc.skb_complete_tx_timestampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h hwtstampsh]h hwtstamps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMDubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMDhjhhubjS)}(hhh]jX)}(h%deliver cloned skb with tx timestampsh]h%deliver cloned skb with tx timestamps}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMDhj(hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhj[hNhNubj})}(hXl**Parameters** ``struct sk_buff *skb`` clone of the original outgoing packet ``struct skb_shared_hwtstamps *hwtstamps`` hardware time stamps **Description** PHY drivers may accept clones of transmitted packets for timestamping via their phy_driver.txtstamp method. These drivers must call this function to return the skb back to the stack with a timestamp.h](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMHhjGubj)}(hhh](j)}(h>``struct sk_buff *skb`` clone of the original outgoing packet h](j)}(h``struct sk_buff *skb``h]j)}(hjlh]hstruct sk_buff *skb}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMKhjfubj)}(hhh]jX)}(h%clone of the original outgoing packeth]h%clone of the original outgoing packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjcubj)}(h@``struct skb_shared_hwtstamps *hwtstamps`` hardware time stamps h](j)}(h*``struct skb_shared_hwtstamps *hwtstamps``h]j)}(hjh]h&struct skb_shared_hwtstamps *hwtstamps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMLhjubj)}(hhh]jX)}(hhardware time stampsh]hhardware time stamps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMNhjGubjX)}(hPHY drivers may accept clones of transmitted packets for timestamping via their phy_driver.txtstamp method. These drivers must call this function to return the skb back to the stack with a timestamp.h]hPHY drivers may accept clones of transmitted packets for timestamping via their phy_driver.txtstamp method. These drivers must call this function to return the skb back to the stack with a timestamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMEhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_tstamp_tx (C function)c.skb_tstamp_txhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hUvoid skb_tstamp_tx (struct sk_buff *orig_skb, struct skb_shared_hwtstamps *hwtstamps)h]h)}(hTvoid skb_tstamp_tx(struct sk_buff *orig_skb, struct skb_shared_hwtstamps *hwtstamps)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMWubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhj3hMWubj)}(h skb_tstamp_txh]j%)}(h skb_tstamp_txh]h skb_tstamp_tx}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj!hhhj3hMWubj)}(hB(struct sk_buff *orig_skb, struct skb_shared_hwtstamps *hwtstamps)h](j)}(hstruct sk_buff *orig_skbh](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjHsbc.skb_tstamp_txasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(horig_skbh]horig_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(h&struct skb_shared_hwtstamps *hwtstampsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_shared_hwtstampsh]hskb_shared_hwtstamps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_tstamp_txasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h hwtstampsh]h hwtstamps}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubeh}(h]h ]h"]h$]h&]j<j=uh1jhj!hhhj3hMWubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj3hMWubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj3hMWhjhhubjS)}(hhh]jX)}(h(queue clone of skb with send time stampsh]h(queue clone of skb with send time stamps}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMWhjRhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj3hMWubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *orig_skb`` the original outgoing packet ``struct skb_shared_hwtstamps *hwtstamps`` hardware time stamps, may be NULL if not available **Description** If the skb has a socket associated, then this function clones the skb (thus sharing the actual data and optional structures), stores the optional hardware time stamping information (if non NULL) or generates a software time stamp (otherwise), then queues the clone to the error queue of the socket. Errors are silently ignored.h](jX)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[hjqubj)}(hhh](j)}(h:``struct sk_buff *orig_skb`` the original outgoing packet h](j)}(h``struct sk_buff *orig_skb``h]j)}(hjh]hstruct sk_buff *orig_skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMXhjubj)}(hhh]jX)}(hthe original outgoing packeth]hthe original outgoing packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubj)}(h^``struct skb_shared_hwtstamps *hwtstamps`` hardware time stamps, may be NULL if not available h](j)}(h*``struct skb_shared_hwtstamps *hwtstamps``h]j)}(hjh]h&struct skb_shared_hwtstamps *hwtstamps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMYhjubj)}(hhh]jX)}(h2hardware time stamps, may be NULL if not availableh]h2hardware time stamps, may be NULL if not available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjqubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM[hjqubjX)}(hXHIf the skb has a socket associated, then this function clones the skb (thus sharing the actual data and optional structures), stores the optional hardware time stamping information (if non NULL) or generates a software time stamp (otherwise), then queues the clone to the error queue of the socket. Errors are silently ignored.h]hXHIf the skb has a socket associated, then this function clones the skb (thus sharing the actual data and optional structures), stores the optional hardware time stamping information (if non NULL) or generates a software time stamp (otherwise), then queues the clone to the error queue of the socket. Errors are silently ignored.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMZhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_tx_timestamp (C function)c.skb_tx_timestamphNtauh1hhj[hhhNhNubh)}(hhh](h)}(h+void skb_tx_timestamp (struct sk_buff *skb)h]h)}(h*void skb_tx_timestamp(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMeubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKhhhj]hMeubj)}(hskb_tx_timestamph]j%)}(hskb_tx_timestamph]hskb_tx_timestamp}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKhhhj]hMeubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjrsbc.skb_tx_timestampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjKhhhj]hMeubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGhhhj]hMeubah}(h]jBah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]hMehjDhhubjS)}(hhh]jX)}(h%Driver hook for transmit timestampingh]h%Driver hook for transmit timestamping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMehj hhubah}(h]h ]h"]h$]h&]uh1jRhjDhhhj]hMeubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` A socket buffer. **Description** Ethernet MAC Drivers should call this function in their hard_xmit() function immediately before giving the sk_buff to the MAC hardware. Specifically, one should make absolutely sure that this function is called before TX completion of this packet can trigger. Otherwise the packet could potentially already be freed.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMihj+ubj)}(hhh]j)}(h)``struct sk_buff *skb`` A socket buffer. h](j)}(h``struct sk_buff *skb``h]j)}(hjPh]hstruct sk_buff *skb}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMnhjJubj)}(hhh]jX)}(hA socket buffer.h]hA socket buffer.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMnhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMnhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMphj+ubjX)}(hEthernet MAC Drivers should call this function in their hard_xmit() function immediately before giving the sk_buff to the MAC hardware.h]hEthernet MAC Drivers should call this function in their hard_xmit() function immediately before giving the sk_buff to the MAC hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMfhj+ubjX)}(hSpecifically, one should make absolutely sure that this function is called before TX completion of this packet can trigger. Otherwise the packet could potentially already be freed.h]hSpecifically, one should make absolutely sure that this function is called before TX completion of this packet can trigger. Otherwise the packet could potentially already be freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMihj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"skb_complete_wifi_ack (C function)c.skb_complete_wifi_ackhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hh]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool ackedh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hackedh]hacked}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMxubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMxhjhhubjS)}(hhh]jX)}(hdeliver skb with wifi statush]hdeliver skb with wifi status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMxhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hc**Parameters** ``struct sk_buff *skb`` the original outgoing packet ``bool acked`` ack statush](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM|hjubj)}(hhh](j)}(h5``struct sk_buff *skb`` the original outgoing packet h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMzhjubj)}(hhh]jX)}(hthe original outgoing packeth]hthe original outgoing packet}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMzhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMzhj ubj)}(h``bool acked`` ack statush](j)}(h``bool acked``h]j)}(hjMh]h bool acked}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM|hjGubj)}(hhh]jX)}(h ack statush]h ack status}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhM{hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM|hj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"skb_checksum_complete (C function)c.skb_checksum_completehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3__sum16 skb_checksum_complete (struct sk_buff *skb)h]h)}(h2__sum16 skb_checksum_complete(struct sk_buff *skb)h](h)}(hhh]j%)}(h__sum16h]h__sum16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jskb_checksum_completesbc.skb_checksum_completeasbuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_checksum_completeh]j%)}(hjh]hskb_checksum_complete}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_checksum_completeasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h&Calculate checksum of an entire packeth]h&Calculate checksum of an entire packet}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjwhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` packet to process **Description** This function calculates the checksum over the entire packet plus the value of skb->csum. The latter can be used to supply the checksum of a pseudo header as used by TCP/UDP. It returns the checksum. For protocols that contain complete checksums such as ICMP/TCP/UDP, this function can be used to verify that checksum on received packets. In that case the function should return zero if the checksum is correct. In particular, this function will return zero if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the hardware has already verified the correctness of the checksum.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h*``struct sk_buff *skb`` packet to process h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(hpacket to processh]hpacket to process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj )}(hXPThis function calculates the checksum over the entire packet plus the value of skb->csum. The latter can be used to supply the checksum of a pseudo header as used by TCP/UDP. It returns the checksum. For protocols that contain complete checksums such as ICMP/TCP/UDP, this function can be used to verify that checksum on received packets. In that case the function should return zero if the checksum is correct. In particular, this function will return zero if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the hardware has already verified the correctness of the checksum.h](jX)}(hThis function calculates the checksum over the entire packet plus the value of skb->csum. The latter can be used to supply the checksum of a pseudo header as used by TCP/UDP. It returns the checksum.h]hThis function calculates the checksum over the entire packet plus the value of skb->csum. The latter can be used to supply the checksum of a pseudo header as used by TCP/UDP. It returns the checksum.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubjX)}(hXFor protocols that contain complete checksums such as ICMP/TCP/UDP, this function can be used to verify that checksum on received packets. In that case the function should return zero if the checksum is correct. In particular, this function will return zero if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the hardware has already verified the correctness of the checksum.h]hXFor protocols that contain complete checksums such as ICMP/TCP/UDP, this function can be used to verify that checksum on received packets. In that case the function should return zero if the checksum is correct. In particular, this function will return zero if skb->ip_summed is CHECKSUM_UNNECESSARY which indicates that the hardware has already verified the correctness of the checksum.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj ubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_ext (C struct) c.skb_exthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hskb_exth]h)}(hstruct skb_exth](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjahMubj)}(hskb_exth]j%)}(hjNh]hskb_ext}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjahMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjahMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahMhjIhhubjS)}(hhh]jX)}(hsk_buff extensionsh]hsk_buff extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjahMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Definition**:: struct skb_ext { refcount_t refcnt; u8 offset[SKB_EXT_NUM]; u8 chunks; char data[] ; }; **Members** ``refcnt`` 1 on allocation, deallocated on 0 ``offset`` offset to add to **data** to obtain extension address ``chunks`` size currently allocated, stored in SKB_EXT_ALIGN_SHIFT units ``data`` start of extension data, variable sizedh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjU)}(hgstruct skb_ext { refcount_t refcnt; u8 offset[SKB_EXT_NUM]; u8 chunks; char data[] ; };h]hgstruct skb_ext { refcount_t refcnt; u8 offset[SKB_EXT_NUM]; u8 chunks; char data[] ; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh](j)}(h-``refcnt`` 1 on allocation, deallocated on 0 h](j)}(h ``refcnt``h]j)}(hjh]hrefcnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h!1 on allocation, deallocated on 0h]h!1 on allocation, deallocated on 0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``offset`` offset to add to **data** to obtain extension address h](j)}(h ``offset``h]j)}(hj<h]hoffset}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj6ubj)}(hhh]jX)}(h5offset to add to **data** to obtain extension addressh](hoffset to add to }(hjUhhhNhNubj)}(h**data**h]hdata}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh to obtain extension address}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjubj)}(hI``chunks`` size currently allocated, stored in SKB_EXT_ALIGN_SHIFT units h](j)}(h ``chunks``h]j)}(hjh]hchunks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h=size currently allocated, stored in SKB_EXT_ALIGN_SHIFT unitsh]h=size currently allocated, stored in SKB_EXT_ALIGN_SHIFT units}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``data`` start of extension data, variable sizedh](j)}(h``data``h]j)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h'start of extension data, variable sizedh]h'start of extension data, variable sized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhj[hhubj)}(hhh]j)}(hoffsets/lengths are stored in chunks of 8 bytes, this allows to use 'u8' types while allowing up to 2kb worth of extension data. h](j)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjzhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhjzhMubah}(h]j_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjzhMhjahhubjS)}(hhh]jX)}(h(make sure skb ip_summed is CHECKSUM_NONEh]h(make sure skb ip_summed is CHECKSUM_NONE}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjzhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj_jxj_jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` skb to check **Description** fresh skbs have their ip_summed set to CHECKSUM_NONE. Instead of forcing ip_summed to CHECKSUM_NONE, we can use this helper, to document places where we make this assertion.h](jX)}(h**Parameters**h]j)}(hjih]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubj)}(hhh]j)}(h+``const struct sk_buff *skb`` skb to check h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h skb to checkh]h skb to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjcubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubjX)}(hfresh skbs have their ip_summed set to CHECKSUM_NONE. Instead of forcing ip_summed to CHECKSUM_NONE, we can use this helper, to document places where we make this assertion.h]hfresh skbs have their ip_summed set to CHECKSUM_NONE. Instead of forcing ip_summed to CHECKSUM_NONE, we can use this helper, to document places where we make this assertion.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_head_is_locked (C function)c.skb_head_is_lockedhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3bool skb_head_is_locked (const struct sk_buff *skb)h]h)}(h2bool skb_head_is_locked(const struct sk_buff *skb)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_head_is_lockedh]j%)}(hskb_head_is_lockedh]hskb_head_is_locked}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj*sbc.skb_head_is_lockedasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj<ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h)Determine if the skb->head is locked downh]h)Determine if the skb->head is locked down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX?**Parameters** ``const struct sk_buff *skb`` skb to check **Description** The head on skbs build around a head frag can be removed if they are not cloned. This function returns true if the skb head is locked down due to either being allocated via kmalloc, or by being a clone with multiple references to the head.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]j)}(h+``const struct sk_buff *skb`` skb to check h](j)}(h``const struct sk_buff *skb``h]j)}(hj#h]hconst struct sk_buff *skb}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubj)}(hhh]jX)}(h skb to checkh]h skb to check}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj^h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubjX)}(hThe head on skbs build around a head frag can be removed if they are not cloned. This function returns true if the skb head is locked down due to either being allocated via kmalloc, or by being a clone with multiple references to the head.h]hThe head on skbs build around a head frag can be removed if they are not cloned. This function returns true if the skb head is locked down due to either being allocated via kmalloc, or by being a clone with multiple references to the head.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:17: ./include/linux/skbuff.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_common (C struct) c.sock_commonhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h sock_commonh]h)}(hstruct sock_commonh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(h sock_commonh]j%)}(hjh]h sock_common}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h/minimal network layer representation of socketsh]h/minimal network layer representation of sockets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKjhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Definition**:: struct sock_common { union { __addrpair skc_addrpair; struct { __be32 skc_daddr; __be32 skc_rcv_saddr; }; }; union { unsigned int skc_hash; __u16 skc_u16hashes[2]; }; union { __portpair skc_portpair; struct { __be16 skc_dport; __u16 skc_num; }; }; unsigned short skc_family; volatile unsigned char skc_state; unsigned char skc_reuse:4; unsigned char skc_reuseport:1; unsigned char skc_ipv6only:1; unsigned char skc_net_refcnt:1; unsigned char skc_bypass_prot_mem:1; int skc_bound_dev_if; union { struct hlist_node skc_bind_node; struct hlist_node skc_portaddr_node; }; struct proto *skc_prot; possible_net_t skc_net; #if IS_ENABLED(CONFIG_IPV6); struct in6_addr skc_v6_daddr; struct in6_addr skc_v6_rcv_saddr; #endif; atomic64_t skc_cookie; union { unsigned long skc_flags; struct sock *skc_listener; struct inet_timewait_death_row *skc_tw_dr; }; union { struct hlist_node skc_node; struct hlist_nulls_node skc_nulls_node; }; unsigned short skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; unsigned short skc_rx_queue_mapping; #endif; union { int skc_incoming_cpu; u32 skc_rcv_wnd; u32 skc_tw_rcv_nxt; }; refcount_t skc_refcnt; }; **Members** ``{unnamed_union}`` anonymous ``skc_addrpair`` 8-byte-aligned __u64 union of **skc_daddr** & **skc_rcv_saddr** ``{unnamed_struct}`` anonymous ``skc_daddr`` Foreign IPv4 addr ``skc_rcv_saddr`` Bound local IPv4 addr ``{unnamed_union}`` anonymous ``skc_hash`` hash value used with various protocol lookup tables ``skc_u16hashes`` two u16 hash values used by UDP lookup tables ``{unnamed_union}`` anonymous ``skc_portpair`` __u32 union of **skc_dport** & **skc_num** ``{unnamed_struct}`` anonymous ``skc_dport`` placeholder for inet_dport/tw_dport ``skc_num`` placeholder for inet_num/tw_num ``skc_family`` network address family ``skc_state`` Connection state ``skc_reuse`` ``SO_REUSEADDR`` setting ``skc_reuseport`` ``SO_REUSEPORT`` setting ``skc_ipv6only`` socket is IPV6 only ``skc_net_refcnt`` socket is using net ref counting ``skc_bypass_prot_mem`` bypass the per-protocol memory accounting for skb ``skc_bound_dev_if`` bound device index if != 0 ``{unnamed_union}`` anonymous ``skc_bind_node`` bind hash linkage for various protocol lookup tables ``skc_portaddr_node`` second hash linkage for UDP/UDP-Lite protocol ``skc_prot`` protocol handlers inside a network family ``skc_net`` reference to the network namespace of this socket ``skc_v6_daddr`` IPV6 destination address ``skc_v6_rcv_saddr`` IPV6 source address ``skc_cookie`` socket's cookie value ``{unnamed_union}`` anonymous ``skc_flags`` place holder for sk_flags ``SO_LINGER`` (l_onoff), ``SO_BROADCAST``, ``SO_KEEPALIVE``, ``SO_OOBINLINE`` settings, ``SO_TIMESTAMPING`` settings ``skc_listener`` connection request listener socket (aka rsk_listener) [union with **skc_flags**] ``skc_tw_dr`` (aka tw_dr) ptr to :c:type:`struct inet_timewait_death_row ` [union with **skc_flags**] ``{unnamed_union}`` anonymous ``skc_node`` main hash linkage for various protocol lookup tables ``skc_nulls_node`` main hash linkage for TCP/UDP/UDP-Lite protocol ``skc_tx_queue_mapping`` tx queue number for this connection ``skc_rx_queue_mapping`` rx queue number for this connection ``{unnamed_union}`` anonymous ``skc_incoming_cpu`` record/match cpu processing incoming packets ``skc_rcv_wnd`` (aka rsk_rcv_wnd) TCP receive window size (possibly scaled) [union with **skc_incoming_cpu**] ``skc_tw_rcv_nxt`` (aka tw_rcv_nxt) TCP window next expected seq number [union with **skc_incoming_cpu**] ``skc_refcnt`` reference counth](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKnhjubjU)}(hX0struct sock_common { union { __addrpair skc_addrpair; struct { __be32 skc_daddr; __be32 skc_rcv_saddr; }; }; union { unsigned int skc_hash; __u16 skc_u16hashes[2]; }; union { __portpair skc_portpair; struct { __be16 skc_dport; __u16 skc_num; }; }; unsigned short skc_family; volatile unsigned char skc_state; unsigned char skc_reuse:4; unsigned char skc_reuseport:1; unsigned char skc_ipv6only:1; unsigned char skc_net_refcnt:1; unsigned char skc_bypass_prot_mem:1; int skc_bound_dev_if; union { struct hlist_node skc_bind_node; struct hlist_node skc_portaddr_node; }; struct proto *skc_prot; possible_net_t skc_net; #if IS_ENABLED(CONFIG_IPV6); struct in6_addr skc_v6_daddr; struct in6_addr skc_v6_rcv_saddr; #endif; atomic64_t skc_cookie; union { unsigned long skc_flags; struct sock *skc_listener; struct inet_timewait_death_row *skc_tw_dr; }; union { struct hlist_node skc_node; struct hlist_nulls_node skc_nulls_node; }; unsigned short skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; unsigned short skc_rx_queue_mapping; #endif; union { int skc_incoming_cpu; u32 skc_rcv_wnd; u32 skc_tw_rcv_nxt; }; refcount_t skc_refcnt; };h]hX0struct sock_common { union { __addrpair skc_addrpair; struct { __be32 skc_daddr; __be32 skc_rcv_saddr; }; }; union { unsigned int skc_hash; __u16 skc_u16hashes[2]; }; union { __portpair skc_portpair; struct { __be16 skc_dport; __u16 skc_num; }; }; unsigned short skc_family; volatile unsigned char skc_state; unsigned char skc_reuse:4; unsigned char skc_reuseport:1; unsigned char skc_ipv6only:1; unsigned char skc_net_refcnt:1; unsigned char skc_bypass_prot_mem:1; int skc_bound_dev_if; union { struct hlist_node skc_bind_node; struct hlist_node skc_portaddr_node; }; struct proto *skc_prot; possible_net_t skc_net; #if IS_ENABLED(CONFIG_IPV6); struct in6_addr skc_v6_daddr; struct in6_addr skc_v6_rcv_saddr; #endif; atomic64_t skc_cookie; union { unsigned long skc_flags; struct sock *skc_listener; struct inet_timewait_death_row *skc_tw_dr; }; union { struct hlist_node skc_node; struct hlist_nulls_node skc_nulls_node; }; unsigned short skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; unsigned short skc_rx_queue_mapping; #endif; union { int skc_incoming_cpu; u32 skc_rcv_wnd; u32 skc_tw_rcv_nxt; }; refcount_t skc_refcnt; };}hj"sbah}(h]h ]h"]h$]h&]j<j=uh1jThR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKphjubjX)}(h **Members**h]j)}(hj3h]hMembers}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh](j)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjRh]h{unnamed_union}}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjLubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghKhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKhjIubj)}(hQ``skc_addrpair`` 8-byte-aligned __u64 union of **skc_daddr** & **skc_rcv_saddr** h](j)}(h``skc_addrpair``h]j)}(hjh]h skc_addrpair}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKnhjubj)}(hhh]jX)}(h?8-byte-aligned __u64 union of **skc_daddr** & **skc_rcv_saddr**h](h8-byte-aligned __u64 union of }(hjhhhNhNubj)}(h **skc_daddr**h]h skc_daddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**skc_rcv_saddr**h]h skc_rcv_saddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKnhjIubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hjh]h{unnamed_struct}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h ``skc_daddr`` Foreign IPv4 addr h](j)}(h ``skc_daddr``h]j)}(hjh]h skc_daddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKlhjubj)}(hhh]jX)}(hForeign IPv4 addrh]hForeign IPv4 addr}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hKlhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hKlhjIubj)}(h(``skc_rcv_saddr`` Bound local IPv4 addr h](j)}(h``skc_rcv_saddr``h]j)}(hjVh]h skc_rcv_saddr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKmhjPubj)}(hhh]jX)}(hBound local IPv4 addrh]hBound local IPv4 addr}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhKmhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKmhjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(hA``skc_hash`` hash value used with various protocol lookup tables h](j)}(h ``skc_hash``h]j)}(hjh]hskc_hash}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKohjubj)}(hhh]jX)}(h3hash value used with various protocol lookup tablesh]h3hash value used with various protocol lookup tables}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKohjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohjIubj)}(h@``skc_u16hashes`` two u16 hash values used by UDP lookup tables h](j)}(h``skc_u16hashes``h]j)}(hjh]h skc_u16hashes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKphjubj)}(hhh]jX)}(h-two u16 hash values used by UDP lookup tablesh]h-two u16 hash values used by UDP lookup tables}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKphjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj:h]h{unnamed_union}}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj4ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhKhjIubj)}(h<``skc_portpair`` __u32 union of **skc_dport** & **skc_num** h](j)}(h``skc_portpair``h]j)}(hjsh]h skc_portpair}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKshjmubj)}(hhh]jX)}(h*__u32 union of **skc_dport** & **skc_num**h](h__u32 union of }(hjhhhNhNubj)}(h **skc_dport**h]h skc_dport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h **skc_num**h]hskc_num}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKshjIubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hjh]h{unnamed_struct}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h2``skc_dport`` placeholder for inet_dport/tw_dport h](j)}(h ``skc_dport``h]j)}(hjh]h skc_dport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKqhjubj)}(hhh]jX)}(h#placeholder for inet_dport/tw_dporth]h#placeholder for inet_dport/tw_dport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjIubj)}(h,``skc_num`` placeholder for inet_num/tw_num h](j)}(h ``skc_num``h]j)}(hj>h]hskc_num}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKrhj8ubj)}(hhh]jX)}(hplaceholder for inet_num/tw_numh]hplaceholder for inet_num/tw_num}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShKrhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShKrhjIubj)}(h&``skc_family`` network address family h](j)}(h``skc_family``h]j)}(hjwh]h skc_family}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKthjqubj)}(hhh]jX)}(hnetwork address familyh]hnetwork address family}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKthjIubj)}(h``skc_state`` Connection state h](j)}(h ``skc_state``h]j)}(hjh]h skc_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKuhjubj)}(hhh]jX)}(hConnection stateh]hConnection state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKuhjIubj)}(h'``skc_reuse`` ``SO_REUSEADDR`` setting h](j)}(h ``skc_reuse``h]j)}(hjh]h skc_reuse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKvhjubj)}(hhh]jX)}(h``SO_REUSEADDR`` settingh](j)}(h``SO_REUSEADDR``h]h SO_REUSEADDR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhKvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKvhjIubj)}(h+``skc_reuseport`` ``SO_REUSEPORT`` setting h](j)}(h``skc_reuseport``h]j)}(hj0h]h skc_reuseport}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKwhj*ubj)}(hhh]jX)}(h``SO_REUSEPORT`` settingh](j)}(h``SO_REUSEPORT``h]h SO_REUSEPORT}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh setting}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjEhKwhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKwhjIubj)}(h%``skc_ipv6only`` socket is IPV6 only h](j)}(h``skc_ipv6only``h]j)}(hjwh]h skc_ipv6only}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKxhjqubj)}(hhh]jX)}(hsocket is IPV6 onlyh]hsocket is IPV6 only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKxhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKxhjIubj)}(h4``skc_net_refcnt`` socket is using net ref counting h](j)}(h``skc_net_refcnt``h]j)}(hjh]hskc_net_refcnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKyhjubj)}(hhh]jX)}(h socket is using net ref countingh]h socket is using net ref counting}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKyhjIubj)}(hJ``skc_bypass_prot_mem`` bypass the per-protocol memory accounting for skb h](j)}(h``skc_bypass_prot_mem``h]j)}(hjh]hskc_bypass_prot_mem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKzhjubj)}(hhh]jX)}(h1bypass the per-protocol memory accounting for skbh]h1bypass the per-protocol memory accounting for skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjIubj)}(h0``skc_bound_dev_if`` bound device index if != 0 h](j)}(h``skc_bound_dev_if``h]j)}(hj"h]hskc_bound_dev_if}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhK{hjubj)}(hhh]jX)}(hbound device index if != 0h]hbound device index if != 0}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hK{hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hK{hjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj[h]h{unnamed_union}}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjUubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjIubj)}(hG``skc_bind_node`` bind hash linkage for various protocol lookup tables h](j)}(h``skc_bind_node``h]j)}(hjh]h skc_bind_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhK|hjubj)}(hhh]jX)}(h4bind hash linkage for various protocol lookup tablesh]h4bind hash linkage for various protocol lookup tables}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjIubj)}(hD``skc_portaddr_node`` second hash linkage for UDP/UDP-Lite protocol h](j)}(h``skc_portaddr_node``h]j)}(hjh]hskc_portaddr_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhK}hjubj)}(hhh]jX)}(h-second hash linkage for UDP/UDP-Lite protocolh]h-second hash linkage for UDP/UDP-Lite protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjIubj)}(h7``skc_prot`` protocol handlers inside a network family h](j)}(h ``skc_prot``h]j)}(hjh]hskc_prot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhK~hjubj)}(hhh]jX)}(h)protocol handlers inside a network familyh]h)protocol handlers inside a network family}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK~hjIubj)}(h>``skc_net`` reference to the network namespace of this socket h](j)}(h ``skc_net``h]j)}(hj?h]hskc_net}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj9ubj)}(hhh]jX)}(h1reference to the network namespace of this socketh]h1reference to the network namespace of this socket}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhjIubj)}(h*``skc_v6_daddr`` IPV6 destination address h](j)}(h``skc_v6_daddr``h]j)}(hjxh]h skc_v6_daddr}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjrubj)}(hhh]jX)}(hIPV6 destination addressh]hIPV6 destination address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h)``skc_v6_rcv_saddr`` IPV6 source address h](j)}(h``skc_v6_rcv_saddr``h]j)}(hjh]hskc_v6_rcv_saddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(hIPV6 source addressh]hIPV6 source address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h%``skc_cookie`` socket's cookie value h](j)}(h``skc_cookie``h]j)}(hjh]h skc_cookie}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(hsocket's cookie valueh]hsocket’s cookie value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj#h]h{unnamed_union}}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjIubj)}(h``skc_flags`` place holder for sk_flags ``SO_LINGER`` (l_onoff), ``SO_BROADCAST``, ``SO_KEEPALIVE``, ``SO_OOBINLINE`` settings, ``SO_TIMESTAMPING`` settings h](j)}(h ``skc_flags``h]j)}(hj\h]h skc_flags}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjVubj)}(hhh]jX)}(hplace holder for sk_flags ``SO_LINGER`` (l_onoff), ``SO_BROADCAST``, ``SO_KEEPALIVE``, ``SO_OOBINLINE`` settings, ``SO_TIMESTAMPING`` settingsh](hplace holder for sk_flags }(hjuhhhNhNubj)}(h ``SO_LINGER``h]h SO_LINGER}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh (l_onoff), }(hjuhhhNhNubj)}(h``SO_BROADCAST``h]h SO_BROADCAST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh, }(hjuhhhNhNubj)}(h``SO_KEEPALIVE``h]h SO_KEEPALIVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh, }(hjuhhhNhNubj)}(h``SO_OOBINLINE``h]h SO_OOBINLINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh settings, }(hjuhhhNhNubj)}(h``SO_TIMESTAMPING``h]hSO_TIMESTAMPING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh settings}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjIubj)}(hb``skc_listener`` connection request listener socket (aka rsk_listener) [union with **skc_flags**] h](j)}(h``skc_listener``h]j)}(hjh]h skc_listener}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(hPconnection request listener socket (aka rsk_listener) [union with **skc_flags**]h](hBconnection request listener socket (aka rsk_listener) [union with }(hj hhhNhNubj)}(h **skc_flags**h]h skc_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh]}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h``skc_tw_dr`` (aka tw_dr) ptr to :c:type:`struct inet_timewait_death_row ` [union with **skc_flags**] h](j)}(h ``skc_tw_dr``h]j)}(hj<h]h skc_tw_dr}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj6ubj)}(hhh]jX)}(hp(aka tw_dr) ptr to :c:type:`struct inet_timewait_death_row ` [union with **skc_flags**]h](h(aka tw_dr) ptr to }(hjUhhhNhNubh)}(hB:c:type:`struct inet_timewait_death_row `h]j)}(hj_h]hstruct inet_timewait_death_row}(hjahhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjinet_timewait_death_rowuh1hhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjUubh [union with }(hjUhhhNhNubj)}(h **skc_flags**h]h skc_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh]}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj|hKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(hB``skc_node`` main hash linkage for various protocol lookup tables h](j)}(h ``skc_node``h]j)}(hjh]hskc_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h4main hash linkage for various protocol lookup tablesh]h4main hash linkage for various protocol lookup tables}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(hC``skc_nulls_node`` main hash linkage for TCP/UDP/UDP-Lite protocol h](j)}(h``skc_nulls_node``h]j)}(hjh]hskc_nulls_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h/main hash linkage for TCP/UDP/UDP-Lite protocolh]h/main hash linkage for TCP/UDP/UDP-Lite protocol}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hKhjIubj)}(h=``skc_tx_queue_mapping`` tx queue number for this connection h](j)}(h``skc_tx_queue_mapping``h]j)}(hjVh]hskc_tx_queue_mapping}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjPubj)}(hhh]jX)}(h#tx queue number for this connectionh]h#tx queue number for this connection}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhKhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhKhjIubj)}(h=``skc_rx_queue_mapping`` rx queue number for this connection h](j)}(h``skc_rx_queue_mapping``h]j)}(hjh]hskc_rx_queue_mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h#rx queue number for this connectionh]h#rx queue number for this connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjIubj)}(hB``skc_incoming_cpu`` record/match cpu processing incoming packets h](j)}(h``skc_incoming_cpu``h]j)}(hj h]hskc_incoming_cpu}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h,record/match cpu processing incoming packetsh]h,record/match cpu processing incoming packets}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjIubj)}(hn``skc_rcv_wnd`` (aka rsk_rcv_wnd) TCP receive window size (possibly scaled) [union with **skc_incoming_cpu**] h](j)}(h``skc_rcv_wnd``h]j)}(hj: h]h skc_rcv_wnd}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj4 ubj)}(hhh]jX)}(h](aka rsk_rcv_wnd) TCP receive window size (possibly scaled) [union with **skc_incoming_cpu**]h](hH(aka rsk_rcv_wnd) TCP receive window size (possibly scaled) [union with }(hjS hhhNhNubj)}(h**skc_incoming_cpu**h]hskc_incoming_cpu}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS ubh]}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubeh}(h]h ]h"]h$]h&]uh1jhjO hKhjIubj)}(hj``skc_tw_rcv_nxt`` (aka tw_rcv_nxt) TCP window next expected seq number [union with **skc_incoming_cpu**] h](j)}(h``skc_tw_rcv_nxt``h]j)}(hj h]hskc_tw_rcv_nxt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(hV(aka tw_rcv_nxt) TCP window next expected seq number [union with **skc_incoming_cpu**]h](hA(aka tw_rcv_nxt) TCP window next expected seq number [union with }(hj hhhNhNubj)}(h**skc_incoming_cpu**h]hskc_incoming_cpu}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh]}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjIubj)}(h``skc_refcnt`` reference counth](j)}(h``skc_refcnt``h]j)}(hj h]h skc_refcnt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(hreference counth]hreference count}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjIubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj[hhubj )}(hzThis is the minimal network layer representation of sockets, the header for struct sock and struct inet_timewait_sock. h]jX)}(hvThis is the minimal network layer representation of sockets, the header for struct sock and struct inet_timewait_sock.h]hvThis is the minimal network layer representation of sockets, the header for struct sock and struct inet_timewait_sock.}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj+ ubah}(h]h ]h"]h$]h&]uh1j hj= hKhj[hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock (C struct)c.sockhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hsockh]h)}(h struct sockh](h)}(hjh]hstruct}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjY hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKubj)}(h h]h }(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjY hhhjj hKubj)}(hsockh]j%)}(hjW h]hsock}(hj} hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjy ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjY hhhjj hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjU hhhjj hKubah}(h]jP ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjj hKhjR hhubjS)}(hhh]jX)}(h'network layer representation of socketsh]h'network layer representation of sockets}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jRhjR hhhjj hKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(hX3**Definition**:: struct sock { struct sock_common __sk_common; #define sk_node __sk_common.skc_node; #define sk_nulls_node __sk_common.skc_nulls_node; #define sk_refcnt __sk_common.skc_refcnt; #define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; #define sk_rx_queue_mapping __sk_common.skc_rx_queue_mapping; #endif; #define sk_dontcopy_begin __sk_common.skc_dontcopy_begin; #define sk_dontcopy_end __sk_common.skc_dontcopy_end; #define sk_hash __sk_common.skc_hash; #define sk_portpair __sk_common.skc_portpair; #define sk_num __sk_common.skc_num; #define sk_dport __sk_common.skc_dport; #define sk_addrpair __sk_common.skc_addrpair; #define sk_daddr __sk_common.skc_daddr; #define sk_rcv_saddr __sk_common.skc_rcv_saddr; #define sk_family __sk_common.skc_family; #define sk_state __sk_common.skc_state; #define sk_reuse __sk_common.skc_reuse; #define sk_reuseport __sk_common.skc_reuseport; #define sk_ipv6only __sk_common.skc_ipv6only; #define sk_net_refcnt __sk_common.skc_net_refcnt; #define sk_bypass_prot_mem __sk_common.skc_bypass_prot_mem; #define sk_bound_dev_if __sk_common.skc_bound_dev_if; #define sk_bind_node __sk_common.skc_bind_node; #define sk_prot __sk_common.skc_prot; #define sk_net __sk_common.skc_net; #define sk_v6_daddr __sk_common.skc_v6_daddr; #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr; #define sk_cookie __sk_common.skc_cookie; #define sk_incoming_cpu __sk_common.skc_incoming_cpu; #define sk_flags __sk_common.skc_flags; #define sk_rxhash __sk_common.skc_rxhash; atomic_t sk_drops; __s32 sk_peek_off; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; struct { atomic_t rmem_alloc; int len; struct sk_buff *head; struct sk_buff *tail; } sk_backlog; #define sk_rmem_alloc sk_backlog.rmem_alloc; struct dst_entry *sk_rx_dst; int sk_rx_dst_ifindex; u32 sk_rx_dst_cookie; #ifdef CONFIG_NET_RX_BUSY_POLL; unsigned int sk_ll_usec; unsigned int sk_napi_id; u16 sk_busy_poll_budget; u8 sk_prefer_busy_poll; #endif; u8 sk_userlocks; int sk_rcvbuf; struct sk_filter *sk_filter; union { struct socket_wq *sk_wq; }; void (*sk_data_ready)(struct sock *sk); long sk_rcvtimeo; int sk_rcvlowat; int sk_err; struct socket *sk_socket; #ifdef CONFIG_MEMCG; struct mem_cgroup *sk_memcg; #endif; #ifdef CONFIG_XFRM; struct xfrm_policy *sk_policy[2]; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_assoc *psp_assoc; #endif; socket_lock_t sk_lock; u32 sk_reserved_mem; int sk_forward_alloc; u32 sk_tsflags; int sk_write_pending; atomic_t sk_omem_alloc; int sk_err_soft; int sk_wmem_queued; refcount_t sk_wmem_alloc; unsigned long sk_tsq_flags; union { struct sk_buff *sk_send_head; struct rb_root tcp_rtx_queue; }; struct sk_buff_head sk_write_queue; struct page_frag sk_frag; union { struct timer_list sk_timer; struct timer_list tcp_retransmit_timer; struct timer_list mptcp_retransmit_timer; }; unsigned long sk_pacing_rate; atomic_t sk_zckey; atomic_t sk_tskey; unsigned long sk_tx_queue_mapping_jiffies; u32 sk_dst_pending_confirm; u32 sk_pacing_status; unsigned long sk_max_pacing_rate; long sk_sndtimeo; u32 sk_priority; u32 sk_mark; kuid_t sk_uid; u16 sk_protocol; u16 sk_type; struct dst_entry *sk_dst_cache; netdev_features_t sk_route_caps; #ifdef CONFIG_SOCK_VALIDATE_XMIT; struct sk_buff* (*sk_validate_xmit_skb)(struct sock *sk, struct net_device *dev, struct sk_buff *skb); #endif; u16 sk_gso_type; u16 sk_gso_max_segs; unsigned int sk_gso_max_size; gfp_t sk_allocation; u32 sk_txhash; int sk_sndbuf; u8 sk_pacing_shift; bool sk_use_task_frag; u8 sk_gso_disabled : 1, sk_kern_sock : 1, sk_no_check_tx : 1, sk_no_check_rx : 1; u8 sk_shutdown; unsigned long sk_lingertime; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; u32 sk_ack_backlog; u32 sk_max_ack_backlog; unsigned long sk_ino; spinlock_t sk_peer_lock; int sk_bind_phc; struct pid *sk_peer_pid; const struct cred *sk_peer_cred; ktime_t sk_stamp; #if BITS_PER_LONG==32; seqlock_t sk_stamp_seq; #endif; int sk_disconnects; union { u8 sk_txrehash; u8 sk_scm_recv_flags; struct { u8 sk_scm_credentials : 1, sk_scm_security : 1, sk_scm_pidfd : 1, sk_scm_rights : 1, sk_scm_unused : 4; }; }; u8 sk_clockid; u8 sk_txtime_deadline_mode : 1, sk_txtime_report_errors : 1, sk_txtime_unused : 6; #define SK_BPF_CB_FLAG_TEST(SK, FLAG) ((SK)->sk_bpf_cb_flags & (FLAG)); u8 sk_bpf_cb_flags; void *sk_user_data; #ifdef CONFIG_SECURITY; void *sk_security; #endif; struct sock_cgroup_data sk_cgrp_data; void (*sk_state_change)(struct sock *sk); void (*sk_write_space)(struct sock *sk); void (*sk_error_report)(struct sock *sk); int (*sk_backlog_rcv)(struct sock *sk, struct sk_buff *skb); void (*sk_destruct)(struct sock *sk); struct sock_reuseport *sk_reuseport_cb; #ifdef CONFIG_BPF_SYSCALL; struct bpf_local_storage *sk_bpf_storage; #endif; struct numa_drop_counters *sk_drop_counters; union { struct rcu_head sk_rcu; freeptr_t sk_freeptr; }; netns_tracker ns_tracker; struct xarray sk_user_frags; #if IS_ENABLED(CONFIG_PROVE_LOCKING) && IS_ENABLED(CONFIG_MODULES); struct module *sk_owner; #endif; }; **Members** ``__sk_common`` shared layout with inet_timewait_sock ``sk_drops`` raw/udp drops counter ``sk_peek_off`` current peek_offset value ``sk_error_queue`` rarely used ``sk_receive_queue`` incoming packets ``sk_backlog`` always used with the per-socket spinlock held ``sk_rx_dst`` receive input route used by early demux ``sk_rx_dst_ifindex`` ifindex for **sk_rx_dst** ``sk_rx_dst_cookie`` cookie for **sk_rx_dst** ``sk_ll_usec`` usecs to busypoll when there is no data ``sk_napi_id`` id of the last napi context to receive data for sk ``sk_busy_poll_budget`` napi processing budget when busypolling ``sk_prefer_busy_poll`` prefer busypolling over softirq processing ``sk_userlocks`` ``SO_SNDBUF`` and ``SO_RCVBUF`` settings ``sk_rcvbuf`` size of receive buffer in bytes ``sk_filter`` socket filtering instructions ``{unnamed_union}`` anonymous ``sk_wq`` sock wait queue and async head ``sk_data_ready`` callback to indicate there is data to be processed ``sk_rcvtimeo`` ``SO_RCVTIMEO`` setting ``sk_rcvlowat`` ``SO_RCVLOWAT`` setting ``sk_err`` last error ``sk_socket`` Identd and reporting IO signals ``sk_memcg`` this socket's memory cgroup association ``sk_policy`` flow policy ``psp_assoc`` PSP association, if socket is PSP-secured ``sk_lock`` synchronizer ``sk_reserved_mem`` space reserved and non-reclaimable for the socket ``sk_forward_alloc`` space allocated forward ``sk_tsflags`` SO_TIMESTAMPING flags ``sk_write_pending`` a write to stream socket waits to start ``sk_omem_alloc`` "o" is "option" or "other" ``sk_err_soft`` errors that don't cause failure but are the cause of a persistent failure not just 'timed out' ``sk_wmem_queued`` persistent queue size ``sk_wmem_alloc`` transmit queue bytes committed ``sk_tsq_flags`` TCP Small Queues flags ``{unnamed_union}`` anonymous ``sk_send_head`` front of stuff to transmit ``tcp_rtx_queue`` TCP re-transmit queue [union with **sk_send_head**] ``sk_write_queue`` Packet sending queue ``sk_frag`` cached page frag ``{unnamed_union}`` anonymous ``sk_timer`` sock cleanup timer ``tcp_retransmit_timer`` tcp retransmit timer ``mptcp_retransmit_timer`` mptcp retransmit timer ``sk_pacing_rate`` Pacing rate (if supported by transport/packet scheduler) ``sk_zckey`` counter to order MSG_ZEROCOPY notifications ``sk_tskey`` counter to disambiguate concurrent tstamp requests ``sk_tx_queue_mapping_jiffies`` time in jiffies of last **sk_tx_queue_mapping** refresh. ``sk_dst_pending_confirm`` need to confirm neighbour ``sk_pacing_status`` Pacing status (requested, handled by sch_fq) ``sk_max_pacing_rate`` Maximum pacing rate (``SO_MAX_PACING_RATE``) ``sk_sndtimeo`` ``SO_SNDTIMEO`` setting ``sk_priority`` ``SO_PRIORITY`` setting ``sk_mark`` generic packet mark ``sk_uid`` user id of owner ``sk_protocol`` which protocol this socket belongs in this network family ``sk_type`` socket type (``SOCK_STREAM``, etc) ``sk_dst_cache`` destination cache ``sk_route_caps`` route capabilities (e.g. ``NETIF_F_TSO``) ``sk_validate_xmit_skb`` ptr to an optional validate function ``sk_gso_type`` GSO type (e.g. ``SKB_GSO_TCPV4``) ``sk_gso_max_segs`` Maximum number of GSO segments ``sk_gso_max_size`` Maximum GSO segment size to build ``sk_allocation`` allocation mode ``sk_txhash`` computed flow hash for use on transmit ``sk_sndbuf`` size of send buffer in bytes ``sk_pacing_shift`` scaling factor for TCP Small Queues ``sk_use_task_frag`` allow sk_page_frag() to use current->task_frag. Sockets that can be used under memory reclaim should set this to false. ``sk_gso_disabled`` if set, NETIF_F_GSO_MASK is forbidden. ``sk_kern_sock`` True if sock is using kernel lock classes ``sk_no_check_tx`` ``SO_NO_CHECK`` setting, set checksum in TX packets ``sk_no_check_rx`` allow zero checksum in RX packets ``sk_shutdown`` mask of ``SEND_SHUTDOWN`` and/or ``RCV_SHUTDOWN`` ``sk_lingertime`` ``SO_LINGER`` l_linger setting ``sk_prot_creator`` sk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance) ``sk_callback_lock`` used with the callbacks in the end of this struct ``sk_ack_backlog`` current listen backlog ``sk_max_ack_backlog`` listen backlog set in listen() ``sk_ino`` inode number (zero if orphaned) ``sk_peer_lock`` lock protecting **sk_peer_pid** and **sk_peer_cred** ``sk_bind_phc`` SO_TIMESTAMPING bind PHC index of PTP virtual clock for timestamping ``sk_peer_pid`` :c:type:`struct pid ` for this socket's peer ``sk_peer_cred`` ``SO_PEERCRED`` setting ``sk_stamp`` time stamp of last packet received ``sk_stamp_seq`` lock for accessing sk_stamp on 32 bit architectures only ``sk_disconnects`` number of disconnect operations performed on this sock ``{unnamed_union}`` anonymous ``sk_txrehash`` enable TX hash rethink ``sk_scm_recv_flags`` all flags used by scm_recv() ``{unnamed_struct}`` anonymous ``sk_scm_credentials`` flagged by SO_PASSCRED to recv SCM_CREDENTIALS ``sk_scm_security`` flagged by SO_PASSSEC to recv SCM_SECURITY ``sk_scm_pidfd`` flagged by SO_PASSPIDFD to recv SCM_PIDFD ``sk_scm_rights`` flagged by SO_PASSRIGHTS to recv SCM_RIGHTS ``sk_scm_unused`` unused flags for scm_recv() ``sk_clockid`` clockid used by time-based scheduling (SO_TXTIME) ``sk_txtime_deadline_mode`` set deadline mode for SO_TXTIME ``sk_txtime_report_errors`` set report errors mode for SO_TXTIME ``sk_txtime_unused`` unused txtime flags ``sk_bpf_cb_flags`` used in bpf_setsockopt() ``sk_user_data`` RPC layer private data. Write-protected by **sk_callback_lock**. ``sk_security`` used by security modules ``sk_cgrp_data`` cgroup data for this cgroup ``sk_state_change`` callback to indicate change in the state of the sock ``sk_write_space`` callback to indicate there is bf sending space available ``sk_error_report`` callback to indicate errors (e.g. ``MSG_ERRQUEUE``) ``sk_backlog_rcv`` callback to process the backlog ``sk_destruct`` called at sock freeing time, i.e. when all refcnt == 0 ``sk_reuseport_cb`` reuseport group container ``sk_bpf_storage`` ptr to cache and control for bpf_sk_storage ``sk_drop_counters`` optional pointer to numa_drop_counters ``{unnamed_union}`` anonymous ``sk_rcu`` used during RCU grace period ``sk_freeptr`` used for SLAB_TYPESAFE_BY_RCU managed sockets ``ns_tracker`` tracker for netns reference ``sk_user_frags`` xarray of pages the user is holding a reference on. ``sk_owner`` reference to the real owner of the socket that calls sock_lock_init_class_and_name().h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubjU)}(hX$struct sock { struct sock_common __sk_common; #define sk_node __sk_common.skc_node; #define sk_nulls_node __sk_common.skc_nulls_node; #define sk_refcnt __sk_common.skc_refcnt; #define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; #define sk_rx_queue_mapping __sk_common.skc_rx_queue_mapping; #endif; #define sk_dontcopy_begin __sk_common.skc_dontcopy_begin; #define sk_dontcopy_end __sk_common.skc_dontcopy_end; #define sk_hash __sk_common.skc_hash; #define sk_portpair __sk_common.skc_portpair; #define sk_num __sk_common.skc_num; #define sk_dport __sk_common.skc_dport; #define sk_addrpair __sk_common.skc_addrpair; #define sk_daddr __sk_common.skc_daddr; #define sk_rcv_saddr __sk_common.skc_rcv_saddr; #define sk_family __sk_common.skc_family; #define sk_state __sk_common.skc_state; #define sk_reuse __sk_common.skc_reuse; #define sk_reuseport __sk_common.skc_reuseport; #define sk_ipv6only __sk_common.skc_ipv6only; #define sk_net_refcnt __sk_common.skc_net_refcnt; #define sk_bypass_prot_mem __sk_common.skc_bypass_prot_mem; #define sk_bound_dev_if __sk_common.skc_bound_dev_if; #define sk_bind_node __sk_common.skc_bind_node; #define sk_prot __sk_common.skc_prot; #define sk_net __sk_common.skc_net; #define sk_v6_daddr __sk_common.skc_v6_daddr; #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr; #define sk_cookie __sk_common.skc_cookie; #define sk_incoming_cpu __sk_common.skc_incoming_cpu; #define sk_flags __sk_common.skc_flags; #define sk_rxhash __sk_common.skc_rxhash; atomic_t sk_drops; __s32 sk_peek_off; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; struct { atomic_t rmem_alloc; int len; struct sk_buff *head; struct sk_buff *tail; } sk_backlog; #define sk_rmem_alloc sk_backlog.rmem_alloc; struct dst_entry *sk_rx_dst; int sk_rx_dst_ifindex; u32 sk_rx_dst_cookie; #ifdef CONFIG_NET_RX_BUSY_POLL; unsigned int sk_ll_usec; unsigned int sk_napi_id; u16 sk_busy_poll_budget; u8 sk_prefer_busy_poll; #endif; u8 sk_userlocks; int sk_rcvbuf; struct sk_filter *sk_filter; union { struct socket_wq *sk_wq; }; void (*sk_data_ready)(struct sock *sk); long sk_rcvtimeo; int sk_rcvlowat; int sk_err; struct socket *sk_socket; #ifdef CONFIG_MEMCG; struct mem_cgroup *sk_memcg; #endif; #ifdef CONFIG_XFRM; struct xfrm_policy *sk_policy[2]; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_assoc *psp_assoc; #endif; socket_lock_t sk_lock; u32 sk_reserved_mem; int sk_forward_alloc; u32 sk_tsflags; int sk_write_pending; atomic_t sk_omem_alloc; int sk_err_soft; int sk_wmem_queued; refcount_t sk_wmem_alloc; unsigned long sk_tsq_flags; union { struct sk_buff *sk_send_head; struct rb_root tcp_rtx_queue; }; struct sk_buff_head sk_write_queue; struct page_frag sk_frag; union { struct timer_list sk_timer; struct timer_list tcp_retransmit_timer; struct timer_list mptcp_retransmit_timer; }; unsigned long sk_pacing_rate; atomic_t sk_zckey; atomic_t sk_tskey; unsigned long sk_tx_queue_mapping_jiffies; u32 sk_dst_pending_confirm; u32 sk_pacing_status; unsigned long sk_max_pacing_rate; long sk_sndtimeo; u32 sk_priority; u32 sk_mark; kuid_t sk_uid; u16 sk_protocol; u16 sk_type; struct dst_entry *sk_dst_cache; netdev_features_t sk_route_caps; #ifdef CONFIG_SOCK_VALIDATE_XMIT; struct sk_buff* (*sk_validate_xmit_skb)(struct sock *sk, struct net_device *dev, struct sk_buff *skb); #endif; u16 sk_gso_type; u16 sk_gso_max_segs; unsigned int sk_gso_max_size; gfp_t sk_allocation; u32 sk_txhash; int sk_sndbuf; u8 sk_pacing_shift; bool sk_use_task_frag; u8 sk_gso_disabled : 1, sk_kern_sock : 1, sk_no_check_tx : 1, sk_no_check_rx : 1; u8 sk_shutdown; unsigned long sk_lingertime; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; u32 sk_ack_backlog; u32 sk_max_ack_backlog; unsigned long sk_ino; spinlock_t sk_peer_lock; int sk_bind_phc; struct pid *sk_peer_pid; const struct cred *sk_peer_cred; ktime_t sk_stamp; #if BITS_PER_LONG==32; seqlock_t sk_stamp_seq; #endif; int sk_disconnects; union { u8 sk_txrehash; u8 sk_scm_recv_flags; struct { u8 sk_scm_credentials : 1, sk_scm_security : 1, sk_scm_pidfd : 1, sk_scm_rights : 1, sk_scm_unused : 4; }; }; u8 sk_clockid; u8 sk_txtime_deadline_mode : 1, sk_txtime_report_errors : 1, sk_txtime_unused : 6; #define SK_BPF_CB_FLAG_TEST(SK, FLAG) ((SK)->sk_bpf_cb_flags & (FLAG)); u8 sk_bpf_cb_flags; void *sk_user_data; #ifdef CONFIG_SECURITY; void *sk_security; #endif; struct sock_cgroup_data sk_cgrp_data; void (*sk_state_change)(struct sock *sk); void (*sk_write_space)(struct sock *sk); void (*sk_error_report)(struct sock *sk); int (*sk_backlog_rcv)(struct sock *sk, struct sk_buff *skb); void (*sk_destruct)(struct sock *sk); struct sock_reuseport *sk_reuseport_cb; #ifdef CONFIG_BPF_SYSCALL; struct bpf_local_storage *sk_bpf_storage; #endif; struct numa_drop_counters *sk_drop_counters; union { struct rcu_head sk_rcu; freeptr_t sk_freeptr; }; netns_tracker ns_tracker; struct xarray sk_user_frags; #if IS_ENABLED(CONFIG_PROVE_LOCKING) && IS_ENABLED(CONFIG_MODULES); struct module *sk_owner; #endif; };h]hX$struct sock { struct sock_common __sk_common; #define sk_node __sk_common.skc_node; #define sk_nulls_node __sk_common.skc_nulls_node; #define sk_refcnt __sk_common.skc_refcnt; #define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping; #ifdef CONFIG_SOCK_RX_QUEUE_MAPPING; #define sk_rx_queue_mapping __sk_common.skc_rx_queue_mapping; #endif; #define sk_dontcopy_begin __sk_common.skc_dontcopy_begin; #define sk_dontcopy_end __sk_common.skc_dontcopy_end; #define sk_hash __sk_common.skc_hash; #define sk_portpair __sk_common.skc_portpair; #define sk_num __sk_common.skc_num; #define sk_dport __sk_common.skc_dport; #define sk_addrpair __sk_common.skc_addrpair; #define sk_daddr __sk_common.skc_daddr; #define sk_rcv_saddr __sk_common.skc_rcv_saddr; #define sk_family __sk_common.skc_family; #define sk_state __sk_common.skc_state; #define sk_reuse __sk_common.skc_reuse; #define sk_reuseport __sk_common.skc_reuseport; #define sk_ipv6only __sk_common.skc_ipv6only; #define sk_net_refcnt __sk_common.skc_net_refcnt; #define sk_bypass_prot_mem __sk_common.skc_bypass_prot_mem; #define sk_bound_dev_if __sk_common.skc_bound_dev_if; #define sk_bind_node __sk_common.skc_bind_node; #define sk_prot __sk_common.skc_prot; #define sk_net __sk_common.skc_net; #define sk_v6_daddr __sk_common.skc_v6_daddr; #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr; #define sk_cookie __sk_common.skc_cookie; #define sk_incoming_cpu __sk_common.skc_incoming_cpu; #define sk_flags __sk_common.skc_flags; #define sk_rxhash __sk_common.skc_rxhash; atomic_t sk_drops; __s32 sk_peek_off; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; struct { atomic_t rmem_alloc; int len; struct sk_buff *head; struct sk_buff *tail; } sk_backlog; #define sk_rmem_alloc sk_backlog.rmem_alloc; struct dst_entry *sk_rx_dst; int sk_rx_dst_ifindex; u32 sk_rx_dst_cookie; #ifdef CONFIG_NET_RX_BUSY_POLL; unsigned int sk_ll_usec; unsigned int sk_napi_id; u16 sk_busy_poll_budget; u8 sk_prefer_busy_poll; #endif; u8 sk_userlocks; int sk_rcvbuf; struct sk_filter *sk_filter; union { struct socket_wq *sk_wq; }; void (*sk_data_ready)(struct sock *sk); long sk_rcvtimeo; int sk_rcvlowat; int sk_err; struct socket *sk_socket; #ifdef CONFIG_MEMCG; struct mem_cgroup *sk_memcg; #endif; #ifdef CONFIG_XFRM; struct xfrm_policy *sk_policy[2]; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_assoc *psp_assoc; #endif; socket_lock_t sk_lock; u32 sk_reserved_mem; int sk_forward_alloc; u32 sk_tsflags; int sk_write_pending; atomic_t sk_omem_alloc; int sk_err_soft; int sk_wmem_queued; refcount_t sk_wmem_alloc; unsigned long sk_tsq_flags; union { struct sk_buff *sk_send_head; struct rb_root tcp_rtx_queue; }; struct sk_buff_head sk_write_queue; struct page_frag sk_frag; union { struct timer_list sk_timer; struct timer_list tcp_retransmit_timer; struct timer_list mptcp_retransmit_timer; }; unsigned long sk_pacing_rate; atomic_t sk_zckey; atomic_t sk_tskey; unsigned long sk_tx_queue_mapping_jiffies; u32 sk_dst_pending_confirm; u32 sk_pacing_status; unsigned long sk_max_pacing_rate; long sk_sndtimeo; u32 sk_priority; u32 sk_mark; kuid_t sk_uid; u16 sk_protocol; u16 sk_type; struct dst_entry *sk_dst_cache; netdev_features_t sk_route_caps; #ifdef CONFIG_SOCK_VALIDATE_XMIT; struct sk_buff* (*sk_validate_xmit_skb)(struct sock *sk, struct net_device *dev, struct sk_buff *skb); #endif; u16 sk_gso_type; u16 sk_gso_max_segs; unsigned int sk_gso_max_size; gfp_t sk_allocation; u32 sk_txhash; int sk_sndbuf; u8 sk_pacing_shift; bool sk_use_task_frag; u8 sk_gso_disabled : 1, sk_kern_sock : 1, sk_no_check_tx : 1, sk_no_check_rx : 1; u8 sk_shutdown; unsigned long sk_lingertime; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; u32 sk_ack_backlog; u32 sk_max_ack_backlog; unsigned long sk_ino; spinlock_t sk_peer_lock; int sk_bind_phc; struct pid *sk_peer_pid; const struct cred *sk_peer_cred; ktime_t sk_stamp; #if BITS_PER_LONG==32; seqlock_t sk_stamp_seq; #endif; int sk_disconnects; union { u8 sk_txrehash; u8 sk_scm_recv_flags; struct { u8 sk_scm_credentials : 1, sk_scm_security : 1, sk_scm_pidfd : 1, sk_scm_rights : 1, sk_scm_unused : 4; }; }; u8 sk_clockid; u8 sk_txtime_deadline_mode : 1, sk_txtime_report_errors : 1, sk_txtime_unused : 6; #define SK_BPF_CB_FLAG_TEST(SK, FLAG) ((SK)->sk_bpf_cb_flags & (FLAG)); u8 sk_bpf_cb_flags; void *sk_user_data; #ifdef CONFIG_SECURITY; void *sk_security; #endif; struct sock_cgroup_data sk_cgrp_data; void (*sk_state_change)(struct sock *sk); void (*sk_write_space)(struct sock *sk); void (*sk_error_report)(struct sock *sk); int (*sk_backlog_rcv)(struct sock *sk, struct sk_buff *skb); void (*sk_destruct)(struct sock *sk); struct sock_reuseport *sk_reuseport_cb; #ifdef CONFIG_BPF_SYSCALL; struct bpf_local_storage *sk_bpf_storage; #endif; struct numa_drop_counters *sk_drop_counters; union { struct rcu_head sk_rcu; freeptr_t sk_freeptr; }; netns_tracker ns_tracker; struct xarray sk_user_frags; #if IS_ENABLED(CONFIG_PROVE_LOCKING) && IS_ENABLED(CONFIG_MODULES); struct module *sk_owner; #endif; };}hj sbah}(h]h ]h"]h$]h&]j<j=uh1jThR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubjX)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ubj)}(hhh](j)}(h6``__sk_common`` shared layout with inet_timewait_sock h](j)}(h``__sk_common``h]j)}(hj h]h __sk_common}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(h%shared layout with inet_timewait_sockh]h%shared layout with inet_timewait_sock}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj! hKhj" ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj! hKhj ubj)}(h#``sk_drops`` raw/udp drops counter h](j)}(h ``sk_drops``h]j)}(hjE h]hsk_drops}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hj? ubj)}(hhh]jX)}(hraw/udp drops counterh]hraw/udp drops counter}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZ hM hj[ ubah}(h]h ]h"]h$]h&]uh1jhj? ubeh}(h]h ]h"]h$]h&]uh1jhjZ hM hj ubj)}(h*``sk_peek_off`` current peek_offset value h](j)}(h``sk_peek_off``h]j)}(hj~ h]h sk_peek_off}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj| ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMFhjx ubj)}(hhh]jX)}(hcurrent peek_offset valueh]hcurrent peek_offset value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMFhj ubah}(h]h ]h"]h$]h&]uh1jhjx ubeh}(h]h ]h"]h$]h&]uh1jhj hMFhj ubj)}(h``sk_error_queue`` rarely used h](j)}(h``sk_error_queue``h]j)}(hj h]hsk_error_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ubj)}(hhh]jX)}(h rarely usedh]h rarely used}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h&``sk_receive_queue`` incoming packets h](j)}(h``sk_receive_queue``h]j)}(hj h]hsk_receive_queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ubj)}(hhh]jX)}(hincoming packetsh]hincoming packets}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h=``sk_backlog`` always used with the per-socket spinlock held h](j)}(h``sk_backlog``h]j)}(hj) h]h sk_backlog}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj# ubj)}(hhh]jX)}(h-always used with the per-socket spinlock heldh]h-always used with the per-socket spinlock held}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj> hMhj? ubah}(h]h ]h"]h$]h&]uh1jhj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hMhj ubj)}(h6``sk_rx_dst`` receive input route used by early demux h](j)}(h ``sk_rx_dst``h]j)}(hjb h]h sk_rx_dst}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj\ ubj)}(hhh]jX)}(h'receive input route used by early demuxh]h'receive input route used by early demux}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw hKhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hKhj ubj)}(h0``sk_rx_dst_ifindex`` ifindex for **sk_rx_dst** h](j)}(h``sk_rx_dst_ifindex``h]j)}(hj h]hsk_rx_dst_ifindex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(hifindex for **sk_rx_dst**h](h ifindex for }(hj hhhNhNubj)}(h **sk_rx_dst**h]h sk_rx_dst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h.``sk_rx_dst_cookie`` cookie for **sk_rx_dst** h](j)}(h``sk_rx_dst_cookie``h]j)}(hj h]hsk_rx_dst_cookie}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(hcookie for **sk_rx_dst**h](h cookie for }(hj hhhNhNubj)}(h **sk_rx_dst**h]h sk_rx_dst}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h7``sk_ll_usec`` usecs to busypoll when there is no data h](j)}(h``sk_ll_usec``h]j)}(hj) h]h sk_ll_usec}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hj# ubj)}(hhh]jX)}(h'usecs to busypoll when there is no datah]h'usecs to busypoll when there is no data}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj> hM hj? ubah}(h]h ]h"]h$]h&]uh1jhj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hM hj ubj)}(hB``sk_napi_id`` id of the last napi context to receive data for sk h](j)}(h``sk_napi_id``h]j)}(hjb h]h sk_napi_id}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj\ ubj)}(hhh]jX)}(h2id of the last napi context to receive data for skh]h2id of the last napi context to receive data for sk}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw hMhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hMhj ubj)}(h@``sk_busy_poll_budget`` napi processing budget when busypolling h](j)}(h``sk_busy_poll_budget``h]j)}(hj h]hsk_busy_poll_budget}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM'hj ubj)}(hhh]jX)}(h'napi processing budget when busypollingh]h'napi processing budget when busypolling}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM'hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM'hj ubj)}(hC``sk_prefer_busy_poll`` prefer busypolling over softirq processing h](j)}(h``sk_prefer_busy_poll``h]j)}(hj h]hsk_prefer_busy_poll}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM&hj ubj)}(hhh]jX)}(h*prefer busypolling over softirq processingh]h*prefer busypolling over softirq processing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM&hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM&hj ubj)}(h:``sk_userlocks`` ``SO_SNDBUF`` and ``SO_RCVBUF`` settings h](j)}(h``sk_userlocks``h]j)}(hj h]h sk_userlocks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h(``SO_SNDBUF`` and ``SO_RCVBUF`` settingsh](j)}(h ``SO_SNDBUF``h]h SO_SNDBUF}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh and }(hj&hhhNhNubj)}(h ``SO_RCVBUF``h]h SO_RCVBUF}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh settings}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj"hKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hKhj ubj)}(h.``sk_rcvbuf`` size of receive buffer in bytes h](j)}(h ``sk_rcvbuf``h]j)}(hjfh]h sk_rcvbuf}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj`ubj)}(hhh]jX)}(hsize of receive buffer in bytesh]hsize of receive buffer in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hKhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hKhj ubj)}(h,``sk_filter`` socket filtering instructions h](j)}(h ``sk_filter``h]j)}(hjh]h sk_filter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM3hjubj)}(hhh]jX)}(hsocket filtering instructionsh]hsocket filtering instructions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h)``sk_wq`` sock wait queue and async head h](j)}(h ``sk_wq``h]j)}(hjh]hsk_wq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj ubj)}(hhh]jX)}(hsock wait queue and async headh]hsock wait queue and async head}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj ubj)}(hE``sk_data_ready`` callback to indicate there is data to be processed h](j)}(h``sk_data_ready``h]j)}(hjJh]h sk_data_ready}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMPhjDubj)}(hhh]jX)}(h2callback to indicate there is data to be processedh]h2callback to indicate there is data to be processed}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMPhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMPhj ubj)}(h(``sk_rcvtimeo`` ``SO_RCVTIMEO`` setting h](j)}(h``sk_rcvtimeo``h]j)}(hjh]h sk_rcvtimeo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM/hj}ubj)}(hhh]jX)}(h``SO_RCVTIMEO`` settingh](j)}(h``SO_RCVTIMEO``h]h SO_RCVTIMEO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM/hj ubj)}(h(``sk_rcvlowat`` ``SO_RCVLOWAT`` setting h](j)}(h``sk_rcvlowat``h]j)}(hjh]h sk_rcvlowat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM.hjubj)}(hhh]jX)}(h``SO_RCVLOWAT`` settingh](j)}(h``SO_RCVLOWAT``h]h SO_RCVLOWAT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hj ubj)}(h``sk_err`` last error h](j)}(h ``sk_err``h]j)}(hjh]hsk_err}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ubj)}(hhh]jX)}(h last errorh]h last error}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj ubj)}(h.``sk_socket`` Identd and reporting IO signals h](j)}(h ``sk_socket``h]j)}(hjJh]h sk_socket}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMChjDubj)}(hhh]jX)}(hIdentd and reporting IO signalsh]hIdentd and reporting IO signals}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMChj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMChj ubj)}(h5``sk_memcg`` this socket's memory cgroup association h](j)}(h ``sk_memcg``h]j)}(hjh]hsk_memcg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMLhj}ubj)}(hhh]jX)}(h'this socket's memory cgroup associationh]h)this socket’s memory cgroup association}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMLhj ubj)}(h``sk_policy`` flow policy h](j)}(h ``sk_policy``h]j)}(hjh]h sk_policy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h flow policyh]h flow policy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h8``psp_assoc`` PSP association, if socket is PSP-secured h](j)}(h ``psp_assoc``h]j)}(hjh]h psp_assoc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h)PSP association, if socket is PSP-securedh]h)PSP association, if socket is PSP-secured}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h``sk_lock`` synchronizer h](j)}(h ``sk_lock``h]j)}(hj.h]hsk_lock}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj(ubj)}(hhh]jX)}(h synchronizerh]h synchronizer}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChKhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhj ubj)}(hF``sk_reserved_mem`` space reserved and non-reclaimable for the socket h](j)}(h``sk_reserved_mem``h]j)}(hjgh]hsk_reserved_mem}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjaubj)}(hhh]jX)}(h1space reserved and non-reclaimable for the socketh]h1space reserved and non-reclaimable for the socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj ubj)}(h-``sk_forward_alloc`` space allocated forward h](j)}(h``sk_forward_alloc``h]j)}(hjh]hsk_forward_alloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(hspace allocated forwardh]hspace allocated forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h%``sk_tsflags`` SO_TIMESTAMPING flags h](j)}(h``sk_tsflags``h]j)}(hjh]h sk_tsflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM9hjubj)}(hhh]jX)}(hSO_TIMESTAMPING flagsh]hSO_TIMESTAMPING flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hj ubj)}(h=``sk_write_pending`` a write to stream socket waits to start h](j)}(h``sk_write_pending``h]j)}(hjh]hsk_write_pending}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMMhj ubj)}(hhh]jX)}(h'a write to stream socket waits to starth]h'a write to stream socket waits to start}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMMhj ubj)}(h-``sk_omem_alloc`` "o" is "option" or "other" h](j)}(h``sk_omem_alloc``h]j)}(hjKh]h sk_omem_alloc}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjEubj)}(hhh]jX)}(h"o" is "option" or "other"h]h&“o” is “option” or “other”}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubj)}(ho``sk_err_soft`` errors that don't cause failure but are the cause of a persistent failure not just 'timed out' h](j)}(h``sk_err_soft``h]j)}(hjh]h sk_err_soft}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj~ubj)}(hhh]jX)}(h^errors that don't cause failure but are the cause of a persistent failure not just 'timed out'h]hderrors that don’t cause failure but are the cause of a persistent failure not just ‘timed out’}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h)``sk_wmem_queued`` persistent queue size h](j)}(h``sk_wmem_queued``h]j)}(hjh]hsk_wmem_queued}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(hpersistent queue sizeh]hpersistent queue size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h1``sk_wmem_alloc`` transmit queue bytes committed h](j)}(h``sk_wmem_alloc``h]j)}(hjh]h sk_wmem_alloc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(htransmit queue bytes committedh]htransmit queue bytes committed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h(``sk_tsq_flags`` TCP Small Queues flags h](j)}(h``sk_tsq_flags``h]j)}(hj0h]h sk_tsq_flags}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj*ubj)}(hhh]jX)}(hTCP Small Queues flagsh]hTCP Small Queues flags}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjih]h{unnamed_union}}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjcubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj ubj)}(h,``sk_send_head`` front of stuff to transmit h](j)}(h``sk_send_head``h]j)}(hjh]h sk_send_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMGhjubj)}(hhh]jX)}(hfront of stuff to transmith]hfront of stuff to transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhj ubj)}(hF``tcp_rtx_queue`` TCP re-transmit queue [union with **sk_send_head**] h](j)}(h``tcp_rtx_queue``h]j)}(hjh]h tcp_rtx_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMHhjubj)}(hhh]jX)}(h3TCP re-transmit queue [union with **sk_send_head**]h](h"TCP re-transmit queue [union with }(hjhhhNhNubj)}(h**sk_send_head**h]h sk_send_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh]}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMHhj ubj)}(h(``sk_write_queue`` Packet sending queue h](j)}(h``sk_write_queue``h]j)}(hj&h]hsk_write_queue}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ubj)}(hhh]jX)}(hPacket sending queueh]hPacket sending queue}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj ubj)}(h``sk_frag`` cached page frag h](j)}(h ``sk_frag``h]j)}(hj_h]hsk_frag}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMEhjYubj)}(hhh]jX)}(hcached page fragh]hcached page frag}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjthMEhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMEhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h ``sk_timer`` sock cleanup timer h](j)}(h ``sk_timer``h]j)}(hjh]hsk_timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM4hjubj)}(hhh]jX)}(hsock cleanup timerh]hsock cleanup timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj ubj)}(h.``tcp_retransmit_timer`` tcp retransmit timer h](j)}(h``tcp_retransmit_timer``h]j)}(hj h]htcp_retransmit_timer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM5hjubj)}(hhh]jX)}(htcp retransmit timerh]htcp retransmit timer}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM5hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hj ubj)}(h2``mptcp_retransmit_timer`` mptcp retransmit timer h](j)}(h``mptcp_retransmit_timer``h]j)}(hjCh]hmptcp_retransmit_timer}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM6hj=ubj)}(hhh]jX)}(hmptcp retransmit timerh]hmptcp retransmit timer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhM6hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM6hj ubj)}(hL``sk_pacing_rate`` Pacing rate (if supported by transport/packet scheduler) h](j)}(h``sk_pacing_rate``h]j)}(hj|h]hsk_pacing_rate}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjvubj)}(hhh]jX)}(h8Pacing rate (if supported by transport/packet scheduler)h]h8Pacing rate (if supported by transport/packet scheduler)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM hj ubj)}(h9``sk_zckey`` counter to order MSG_ZEROCOPY notifications h](j)}(h ``sk_zckey``h]j)}(hjh]hsk_zckey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMBhjubj)}(hhh]jX)}(h+counter to order MSG_ZEROCOPY notificationsh]h+counter to order MSG_ZEROCOPY notifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhj ubj)}(h@``sk_tskey`` counter to disambiguate concurrent tstamp requests h](j)}(h ``sk_tskey``h]j)}(hjh]hsk_tskey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM@hjubj)}(hhh]jX)}(h2counter to disambiguate concurrent tstamp requestsh]h2counter to disambiguate concurrent tstamp requests}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hj ubj)}(hY``sk_tx_queue_mapping_jiffies`` time in jiffies of last **sk_tx_queue_mapping** refresh. h](j)}(h``sk_tx_queue_mapping_jiffies``h]j)}(hj'h]hsk_tx_queue_mapping_jiffies}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMAhj!ubj)}(hhh]jX)}(h8time in jiffies of last **sk_tx_queue_mapping** refresh.h](htime in jiffies of last }(hj@hhhNhNubj)}(h**sk_tx_queue_mapping**h]hsk_tx_queue_mapping}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh refresh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj<hMAhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMAhj ubj)}(h5``sk_dst_pending_confirm`` need to confirm neighbour h](j)}(h``sk_dst_pending_confirm``h]j)}(hjrh]hsk_dst_pending_confirm}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjlubj)}(hhh]jX)}(hneed to confirm neighbourh]hneed to confirm neighbour}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(hB``sk_pacing_status`` Pacing status (requested, handled by sch_fq) h](j)}(h``sk_pacing_status``h]j)}(hjh]hsk_pacing_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjubj)}(hhh]jX)}(h,Pacing status (requested, handled by sch_fq)h]h,Pacing status (requested, handled by sch_fq)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj ubj)}(hD``sk_max_pacing_rate`` Maximum pacing rate (``SO_MAX_PACING_RATE``) h](j)}(h``sk_max_pacing_rate``h]j)}(hjh]hsk_max_pacing_rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjubj)}(hhh]jX)}(h,Maximum pacing rate (``SO_MAX_PACING_RATE``)h](hMaximum pacing rate (}(hjhhhNhNubj)}(h``SO_MAX_PACING_RATE``h]hSO_MAX_PACING_RATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj ubj)}(h(``sk_sndtimeo`` ``SO_SNDTIMEO`` setting h](j)}(h``sk_sndtimeo``h]j)}(hj/h]h sk_sndtimeo}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM0hj)ubj)}(hhh]jX)}(h``SO_SNDTIMEO`` settingh](j)}(h``SO_SNDTIMEO``h]h SO_SNDTIMEO}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh setting}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjDhM0hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM0hj ubj)}(h(``sk_priority`` ``SO_PRIORITY`` setting h](j)}(h``sk_priority``h]j)}(hjvh]h sk_priority}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM(hjpubj)}(hhh]jX)}(h``SO_PRIORITY`` settingh](j)}(h``SO_PRIORITY``h]h SO_PRIORITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM(hj ubj)}(h ``sk_mark`` generic packet mark h](j)}(h ``sk_mark``h]j)}(hjh]hsk_mark}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMJhjubj)}(hhh]jX)}(hgeneric packet markh]hgeneric packet mark}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhj ubj)}(h``sk_uid`` user id of owner h](j)}(h ``sk_uid``h]j)}(hjh]hsk_uid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM$hjubj)}(hhh]jX)}(huser id of ownerh]huser id of owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM$hj ubj)}(hJ``sk_protocol`` which protocol this socket belongs in this network family h](j)}(h``sk_protocol``h]j)}(hj/h]h sk_protocol}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM*hj)ubj)}(hhh]jX)}(h9which protocol this socket belongs in this network familyh]h9which protocol this socket belongs in this network family}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhM*hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhM*hj ubj)}(h/``sk_type`` socket type (``SOCK_STREAM``, etc) h](j)}(h ``sk_type``h]j)}(hjhh]hsk_type}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM)hjbubj)}(hhh]jX)}(h"socket type (``SOCK_STREAM``, etc)h](h socket type (}(hjhhhNhNubj)}(h``SOCK_STREAM``h]h SOCK_STREAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, etc)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj}hM)hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM)hj ubj)}(h#``sk_dst_cache`` destination cache h](j)}(h``sk_dst_cache``h]j)}(hjh]h sk_dst_cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(hdestination cacheh]hdestination cache}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h<``sk_route_caps`` route capabilities (e.g. ``NETIF_F_TSO``) h](j)}(h``sk_route_caps``h]j)}(hjh]h sk_route_caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h)route capabilities (e.g. ``NETIF_F_TSO``)h](hroute capabilities (e.g. }(hjhhhNhNubj)}(h``NETIF_F_TSO``h]h NETIF_F_TSO}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h>``sk_validate_xmit_skb`` ptr to an optional validate function h](j)}(h``sk_validate_xmit_skb``h]j)}(hj7h]hsk_validate_xmit_skb}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMThj1ubj)}(hhh]jX)}(h$ptr to an optional validate functionh]h$ptr to an optional validate function}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjLhMThjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMThj ubj)}(h2``sk_gso_type`` GSO type (e.g. ``SKB_GSO_TCPV4``) h](j)}(h``sk_gso_type``h]j)}(hjph]h sk_gso_type}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjjubj)}(hhh]jX)}(h!GSO type (e.g. ``SKB_GSO_TCPV4``)h](hGSO type (e.g. }(hjhhhNhNubj)}(h``SKB_GSO_TCPV4``h]h SKB_GSO_TCPV4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h3``sk_gso_max_segs`` Maximum number of GSO segments h](j)}(h``sk_gso_max_segs``h]j)}(hjh]hsk_gso_max_segs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(hMaximum number of GSO segmentsh]hMaximum number of GSO segments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h6``sk_gso_max_size`` Maximum GSO segment size to build h](j)}(h``sk_gso_max_size``h]j)}(hjh]hsk_gso_max_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h!Maximum GSO segment size to buildh]h!Maximum GSO segment size to build}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h"``sk_allocation`` allocation mode h](j)}(h``sk_allocation``h]j)}(hj-h]h sk_allocation}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hj'ubj)}(hhh]jX)}(hallocation modeh]hallocation mode}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM hj ubj)}(h5``sk_txhash`` computed flow hash for use on transmit h](j)}(h ``sk_txhash``h]j)}(hjfh]h sk_txhash}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM1hj`ubj)}(hhh]jX)}(h&computed flow hash for use on transmith]h&computed flow hash for use on transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM1hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM1hj ubj)}(h+``sk_sndbuf`` size of send buffer in bytes h](j)}(h ``sk_sndbuf``h]j)}(hjh]h sk_sndbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(hsize of send buffer in bytesh]hsize of send buffer in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h8``sk_pacing_shift`` scaling factor for TCP Small Queues h](j)}(h``sk_pacing_shift``h]j)}(hjh]hsk_pacing_shift}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h#scaling factor for TCP Small Queuesh]h#scaling factor for TCP Small Queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h``sk_use_task_frag`` allow sk_page_frag() to use current->task_frag. Sockets that can be used under memory reclaim should set this to false. h](j)}(h``sk_use_task_frag``h]j)}(hjh]hsk_use_task_frag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM=hj ubj)}(hhh]jX)}(hwallow sk_page_frag() to use current->task_frag. Sockets that can be used under memory reclaim should set this to false.h]hwallow sk_page_frag() to use current->task_frag. Sockets that can be used under memory reclaim should set this to false.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM;hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM=hj ubj)}(h;``sk_gso_disabled`` if set, NETIF_F_GSO_MASK is forbidden. h](j)}(h``sk_gso_disabled``h]j)}(hjKh]hsk_gso_disabled}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjEubj)}(hhh]jX)}(h&if set, NETIF_F_GSO_MASK is forbidden.h]h&if set, NETIF_F_GSO_MASK is forbidden.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubj)}(h;``sk_kern_sock`` True if sock is using kernel lock classes h](j)}(h``sk_kern_sock``h]j)}(hjh]h sk_kern_sock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj~ubj)}(hhh]jX)}(h)True if sock is using kernel lock classesh]h)True if sock is using kernel lock classes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(hG``sk_no_check_tx`` ``SO_NO_CHECK`` setting, set checksum in TX packets h](j)}(h``sk_no_check_tx``h]j)}(hjh]hsk_no_check_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h3``SO_NO_CHECK`` setting, set checksum in TX packetsh](j)}(h``SO_NO_CHECK``h]h SO_NO_CHECK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ setting, set checksum in TX packets}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(h5``sk_no_check_rx`` allow zero checksum in RX packets h](j)}(h``sk_no_check_rx``h]j)}(hjh]hsk_no_check_rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h!allow zero checksum in RX packetsh]h!allow zero checksum in RX packets}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(hB``sk_shutdown`` mask of ``SEND_SHUTDOWN`` and/or ``RCV_SHUTDOWN`` h](j)}(h``sk_shutdown``h]j)}(hj=h]h sk_shutdown}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj7ubj)}(hhh]jX)}(h1mask of ``SEND_SHUTDOWN`` and/or ``RCV_SHUTDOWN``h](hmask of }(hjVhhhNhNubj)}(h``SEND_SHUTDOWN``h]h SEND_SHUTDOWN}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh and/or }(hjVhhhNhNubj)}(h``RCV_SHUTDOWN``h]h RCV_SHUTDOWN}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jWhjRhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhj ubj)}(h1``sk_lingertime`` ``SO_LINGER`` l_linger setting h](j)}(h``sk_lingertime``h]j)}(hjh]h sk_lingertime}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h``SO_LINGER`` l_linger settingh](j)}(h ``SO_LINGER``h]h SO_LINGER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh l_linger setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(hg``sk_prot_creator`` sk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance) h](j)}(h``sk_prot_creator``h]j)}(hjh]hsk_prot_creator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(hRsk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance)h]hRsk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubj)}(hG``sk_callback_lock`` used with the callbacks in the end of this struct h](j)}(h``sk_callback_lock``h]j)}(hjh]hsk_callback_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjubj)}(hhh]jX)}(h1used with the callbacks in the end of this structh]h1used with the callbacks in the end of this struct}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhj ubj)}(h*``sk_ack_backlog`` current listen backlog h](j)}(h``sk_ack_backlog``h]j)}(hjPh]hsk_ack_backlog}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM"hjJubj)}(hhh]jX)}(hcurrent listen backlogh]hcurrent listen backlog}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM"hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM"hj ubj)}(h6``sk_max_ack_backlog`` listen backlog set in listen() h](j)}(h``sk_max_ack_backlog``h]j)}(hjh]hsk_max_ack_backlog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM#hjubj)}(hhh]jX)}(hlisten backlog set in listen()h]hlisten backlog set in listen()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hj ubj)}(h+``sk_ino`` inode number (zero if orphaned) h](j)}(h ``sk_ino``h]j)}(hjh]hsk_ino}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM%hjubj)}(hhh]jX)}(hinode number (zero if orphaned)h]hinode number (zero if orphaned)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hj ubj)}(hF``sk_peer_lock`` lock protecting **sk_peer_pid** and **sk_peer_cred** h](j)}(h``sk_peer_lock``h]j)}(hjh]h sk_peer_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM+hjubj)}(hhh]jX)}(h4lock protecting **sk_peer_pid** and **sk_peer_cred**h](hlock protecting }(hjhhhNhNubj)}(h**sk_peer_pid**h]h sk_peer_pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**sk_peer_cred**h]h sk_peer_cred}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hj ubj)}(hU``sk_bind_phc`` SO_TIMESTAMPING bind PHC index of PTP virtual clock for timestamping h](j)}(h``sk_bind_phc``h]j)}(hjTh]h sk_bind_phc}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM?hjNubj)}(hhh]jX)}(hDSO_TIMESTAMPING bind PHC index of PTP virtual clock for timestampingh]hDSO_TIMESTAMPING bind PHC index of PTP virtual clock for timestamping}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM>hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM?hj ubj)}(hB``sk_peer_pid`` :c:type:`struct pid ` for this socket's peer h](j)}(h``sk_peer_pid``h]j)}(hjh]h sk_peer_pid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM,hjubj)}(hhh]jX)}(h1:c:type:`struct pid ` for this socket's peerh](h)}(h:c:type:`struct pid `h]j)}(hjh]h struct pid}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjpiduh1hhjhM,hjubh for this socket’s peer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hj ubj)}(h)``sk_peer_cred`` ``SO_PEERCRED`` setting h](j)}(h``sk_peer_cred``h]j)}(hjh]h sk_peer_cred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM-hjubj)}(hhh]jX)}(h``SO_PEERCRED`` settingh](j)}(h``SO_PEERCRED``h]h SO_PEERCRED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh setting}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hj ubj)}(h0``sk_stamp`` time stamp of last packet received h](j)}(h ``sk_stamp``h]j)}(hj-h]hsk_stamp}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM7hj'ubj)}(hhh]jX)}(h"time stamp of last packet receivedh]h"time stamp of last packet received}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM7hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM7hj ubj)}(hJ``sk_stamp_seq`` lock for accessing sk_stamp on 32 bit architectures only h](j)}(h``sk_stamp_seq``h]j)}(hjfh]h sk_stamp_seq}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM8hj`ubj)}(hhh]jX)}(h8lock for accessing sk_stamp on 32 bit architectures onlyh]h8lock for accessing sk_stamp on 32 bit architectures only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM8hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM8hj ubj)}(hJ``sk_disconnects`` number of disconnect operations performed on this sock h](j)}(h``sk_disconnects``h]j)}(hjh]hsk_disconnects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMNhjubj)}(hhh]jX)}(h6number of disconnect operations performed on this sockh]h6number of disconnect operations performed on this sock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubj)}(h'``sk_txrehash`` enable TX hash rethink h](j)}(h``sk_txrehash``h]j)}(hj h]h sk_txrehash}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM2hj ubj)}(hhh]jX)}(henable TX hash rethinkh]henable TX hash rethink}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj& hM2hj' ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj& hM2hj ubj)}(h3``sk_scm_recv_flags`` all flags used by scm_recv() h](j)}(h``sk_scm_recv_flags``h]j)}(hjJ h]hsk_scm_recv_flags}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM^hjD ubj)}(hhh]jX)}(hall flags used by scm_recv()h]hall flags used by scm_recv()}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_ hM^hj` ubah}(h]h ]h"]h$]h&]uh1jhjD ubeh}(h]h ]h"]h$]h&]uh1jhj_ hM^hj ubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hj h]h{unnamed_struct}}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj} ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hF``sk_scm_credentials`` flagged by SO_PASSCRED to recv SCM_CREDENTIALS h](j)}(h``sk_scm_credentials``h]j)}(hj h]hsk_scm_credentials}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM_hj ubj)}(hhh]jX)}(h.flagged by SO_PASSCRED to recv SCM_CREDENTIALSh]h.flagged by SO_PASSCRED to recv SCM_CREDENTIALS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM_hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM_hj ubj)}(h?``sk_scm_security`` flagged by SO_PASSSEC to recv SCM_SECURITY h](j)}(h``sk_scm_security``h]j)}(hj h]hsk_scm_security}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM`hj ubj)}(hhh]jX)}(h*flagged by SO_PASSSEC to recv SCM_SECURITYh]h*flagged by SO_PASSSEC to recv SCM_SECURITY}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj !hM`hj !ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj !hM`hj ubj)}(h;``sk_scm_pidfd`` flagged by SO_PASSPIDFD to recv SCM_PIDFD h](j)}(h``sk_scm_pidfd``h]j)}(hj.!h]h sk_scm_pidfd}(hj0!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMahj(!ubj)}(hhh]jX)}(h)flagged by SO_PASSPIDFD to recv SCM_PIDFDh]h)flagged by SO_PASSPIDFD to recv SCM_PIDFD}(hjG!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjC!hMahjD!ubah}(h]h ]h"]h$]h&]uh1jhj(!ubeh}(h]h ]h"]h$]h&]uh1jhjC!hMahj ubj)}(h>``sk_scm_rights`` flagged by SO_PASSRIGHTS to recv SCM_RIGHTS h](j)}(h``sk_scm_rights``h]j)}(hjg!h]h sk_scm_rights}(hji!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMbhja!ubj)}(hhh]jX)}(h+flagged by SO_PASSRIGHTS to recv SCM_RIGHTSh]h+flagged by SO_PASSRIGHTS to recv SCM_RIGHTS}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|!hMbhj}!ubah}(h]h ]h"]h$]h&]uh1jhja!ubeh}(h]h ]h"]h$]h&]uh1jhj|!hMbhj ubj)}(h.``sk_scm_unused`` unused flags for scm_recv() h](j)}(h``sk_scm_unused``h]j)}(hj!h]h sk_scm_unused}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMchj!ubj)}(hhh]jX)}(hunused flags for scm_recv()h]hunused flags for scm_recv()}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMchj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMchj ubj)}(hA``sk_clockid`` clockid used by time-based scheduling (SO_TXTIME) h](j)}(h``sk_clockid``h]j)}(hj!h]h sk_clockid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMZhj!ubj)}(hhh]jX)}(h1clockid used by time-based scheduling (SO_TXTIME)h]h1clockid used by time-based scheduling (SO_TXTIME)}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMZhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMZhj ubj)}(h<``sk_txtime_deadline_mode`` set deadline mode for SO_TXTIME h](j)}(h``sk_txtime_deadline_mode``h]j)}(hj"h]hsk_txtime_deadline_mode}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM[hj "ubj)}(hhh]jX)}(hset deadline mode for SO_TXTIMEh]hset deadline mode for SO_TXTIME}(hj+"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'"hM[hj("ubah}(h]h ]h"]h$]h&]uh1jhj "ubeh}(h]h ]h"]h$]h&]uh1jhj'"hM[hj ubj)}(hA``sk_txtime_report_errors`` set report errors mode for SO_TXTIME h](j)}(h``sk_txtime_report_errors``h]j)}(hjK"h]hsk_txtime_report_errors}(hjM"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM\hjE"ubj)}(hhh]jX)}(h$set report errors mode for SO_TXTIMEh]h$set report errors mode for SO_TXTIME}(hjd"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`"hM\hja"ubah}(h]h ]h"]h$]h&]uh1jhjE"ubeh}(h]h ]h"]h$]h&]uh1jhj`"hM\hj ubj)}(h)``sk_txtime_unused`` unused txtime flags h](j)}(h``sk_txtime_unused``h]j)}(hj"h]hsk_txtime_unused}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM]hj~"ubj)}(hhh]jX)}(hunused txtime flagsh]hunused txtime flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM]hj"ubah}(h]h ]h"]h$]h&]uh1jhj~"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM]hj ubj)}(h-``sk_bpf_cb_flags`` used in bpf_setsockopt() h](j)}(h``sk_bpf_cb_flags``h]j)}(hj"h]hsk_bpf_cb_flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM:hj"ubj)}(hhh]jX)}(hused in bpf_setsockopt()h]hused in bpf_setsockopt()}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM:hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM:hj ubj)}(hR``sk_user_data`` RPC layer private data. Write-protected by **sk_callback_lock**. h](j)}(h``sk_user_data``h]j)}(hj"h]h sk_user_data}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMDhj"ubj)}(hhh]jX)}(h@RPC layer private data. Write-protected by **sk_callback_lock**.h](h+RPC layer private data. Write-protected by }(hj#hhhNhNubj)}(h**sk_callback_lock**h]hsk_callback_lock}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj #hMDhj #ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj #hMDhj ubj)}(h)``sk_security`` used by security modules h](j)}(h``sk_security``h]j)}(hjA#h]h sk_security}(hjC#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?#ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMIhj;#ubj)}(hhh]jX)}(hused by security modulesh]hused by security modules}(hjZ#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjV#hMIhjW#ubah}(h]h ]h"]h$]h&]uh1jhj;#ubeh}(h]h ]h"]h$]h&]uh1jhjV#hMIhj ubj)}(h-``sk_cgrp_data`` cgroup data for this cgroup h](j)}(h``sk_cgrp_data``h]j)}(hjz#h]h sk_cgrp_data}(hj|#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx#ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMKhjt#ubj)}(hhh]jX)}(hcgroup data for this cgrouph]hcgroup data for this cgroup}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMKhj#ubah}(h]h ]h"]h$]h&]uh1jhjt#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMKhj ubj)}(hI``sk_state_change`` callback to indicate change in the state of the sock h](j)}(h``sk_state_change``h]j)}(hj#h]hsk_state_change}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMOhj#ubj)}(hhh]jX)}(h4callback to indicate change in the state of the sockh]h4callback to indicate change in the state of the sock}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMOhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMOhj ubj)}(hL``sk_write_space`` callback to indicate there is bf sending space available h](j)}(h``sk_write_space``h]j)}(hj#h]hsk_write_space}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMQhj#ubj)}(hhh]jX)}(h8callback to indicate there is bf sending space availableh]h8callback to indicate there is bf sending space available}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMQhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMQhj ubj)}(hH``sk_error_report`` callback to indicate errors (e.g. ``MSG_ERRQUEUE``) h](j)}(h``sk_error_report``h]j)}(hj%$h]hsk_error_report}(hj'$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMRhj$ubj)}(hhh]jX)}(h3callback to indicate errors (e.g. ``MSG_ERRQUEUE``)h](h"callback to indicate errors (e.g. }(hj>$hhhNhNubj)}(h``MSG_ERRQUEUE``h]h MSG_ERRQUEUE}(hjF$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>$ubh)}(hj>$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj:$hMRhj;$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj:$hMRhj ubj)}(h3``sk_backlog_rcv`` callback to process the backlog h](j)}(h``sk_backlog_rcv``h]j)}(hjp$h]hsk_backlog_rcv}(hjr$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMShjj$ubj)}(hhh]jX)}(hcallback to process the backlogh]hcallback to process the backlog}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMShj$ubah}(h]h ]h"]h$]h&]uh1jhjj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMShj ubj)}(hG``sk_destruct`` called at sock freeing time, i.e. when all refcnt == 0 h](j)}(h``sk_destruct``h]j)}(hj$h]h sk_destruct}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMUhj$ubj)}(hhh]jX)}(h6called at sock freeing time, i.e. when all refcnt == 0h]h6called at sock freeing time, i.e. when all refcnt == 0}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMUhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMUhj ubj)}(h.``sk_reuseport_cb`` reuseport group container h](j)}(h``sk_reuseport_cb``h]j)}(hj$h]hsk_reuseport_cb}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMVhj$ubj)}(hhh]jX)}(hreuseport group containerh]hreuseport group container}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMVhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMVhj ubj)}(h?``sk_bpf_storage`` ptr to cache and control for bpf_sk_storage h](j)}(h``sk_bpf_storage``h]j)}(hj%h]hsk_bpf_storage}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMWhj%ubj)}(hhh]jX)}(h+ptr to cache and control for bpf_sk_storageh]h+ptr to cache and control for bpf_sk_storage}(hj4%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0%hMWhj1%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj0%hMWhj ubj)}(h<``sk_drop_counters`` optional pointer to numa_drop_counters h](j)}(h``sk_drop_counters``h]j)}(hjT%h]hsk_drop_counters}(hjV%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM!hjN%ubj)}(hhh]jX)}(h&optional pointer to numa_drop_countersh]h&optional pointer to numa_drop_counters}(hjm%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhji%hM!hjj%ubah}(h]h ]h"]h$]h&]uh1jhjN%ubeh}(h]h ]h"]h$]h&]uh1jhji%hM!hj ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj%h]h{unnamed_union}}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhKhj%ubj)}(hhh]jX)}(h anonymoush]h anonymous}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhj ubj)}(h(``sk_rcu`` used during RCU grace period h](j)}(h ``sk_rcu``h]j)}(hj%h]hsk_rcu}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMXhj%ubj)}(hhh]jX)}(hused during RCU grace periodh]hused during RCU grace period}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMXhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMXhj ubj)}(h=``sk_freeptr`` used for SLAB_TYPESAFE_BY_RCU managed sockets h](j)}(h``sk_freeptr``h]j)}(hj%h]h sk_freeptr}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMYhj%ubj)}(hhh]jX)}(h-used for SLAB_TYPESAFE_BY_RCU managed socketsh]h-used for SLAB_TYPESAFE_BY_RCU managed sockets}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMYhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hMYhj ubj)}(h+``ns_tracker`` tracker for netns reference h](j)}(h``ns_tracker``h]j)}(hj8&h]h ns_tracker}(hj:&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMdhj2&ubj)}(hhh]jX)}(htracker for netns referenceh]htracker for netns reference}(hjQ&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjM&hMdhjN&ubah}(h]h ]h"]h$]h&]uh1jhj2&ubeh}(h]h ]h"]h$]h&]uh1jhjM&hMdhj ubj)}(hF``sk_user_frags`` xarray of pages the user is holding a reference on. h](j)}(h``sk_user_frags``h]j)}(hjq&h]h sk_user_frags}(hjs&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMehjk&ubj)}(hhh]jX)}(h3xarray of pages the user is holding a reference on.h]h3xarray of pages the user is holding a reference on.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMehj&ubah}(h]h ]h"]h$]h&]uh1jhjk&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMehj ubj)}(hb``sk_owner`` reference to the real owner of the socket that calls sock_lock_init_class_and_name().h](j)}(h ``sk_owner``h]j)}(hj&h]hsk_owner}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMfhj&ubj)}(hhh]jX)}(hUreference to the real owner of the socket that calls sock_lock_init_class_and_name().h]hUreference to the real owner of the socket that calls sock_lock_init_class_and_name().}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMfhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMfhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#sk_user_data_is_nocopy (C function)c.sk_user_data_is_nocopyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3bool sk_user_data_is_nocopy (const struct sock *sk)h]h)}(h2bool sk_user_data_is_nocopy(const struct sock *sk)h](j)}(hjTh]hbool}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM{ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj'hM{ubj)}(hsk_user_data_is_nocopyh]j%)}(hsk_user_data_is_nocopyh]hsk_user_data_is_nocopy}(hj#'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj'hM{ubj)}(h(const struct sock *sk)h]j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj?'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;'ubj)}(h h]h }(hjL'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;'ubh)}(hjh]hstruct}(hjZ'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;'ubj)}(h h]h }(hjg'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;'ubh)}(hhh]j%)}(hsockh]hsock}(hjx'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hju'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjz'modnameN classnameNjj!)}j$]j')}jj%'sbc.sk_user_data_is_nocopyasbuh1hhj;'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;'ubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;'ubj%)}(hskh]hsk}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7'ubah}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj'hM{ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&hhhj'hM{ubah}(h]j&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hM{hj&hhubjS)}(hhh]jX)}(h/Test if sk_user_data pointer must not be copiedh]h/Test if sk_user_data pointer must not be copied}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM{hj'hhubah}(h]h ]h"]h$]h&]uh1jRhj&hhhj'hM{ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhj[hNhNubj})}(h2**Parameters** ``const struct sock *sk`` socketh](jX)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj'ubj)}(hhh]j)}(h ``const struct sock *sk`` socketh](j)}(h``const struct sock *sk``h]j)}(hj(h]hconst struct sock *sk}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj(ubj)}(hhh]jX)}(hsocketh]hsocket}(hj7(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM|hj4(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj3(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h2__locked_read_sk_user_data_with_flags (C function)'c.__locked_read_sk_user_data_with_flagshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hUvoid * __locked_read_sk_user_data_with_flags (const struct sock *sk, uintptr_t flags)h]h)}(hSvoid *__locked_read_sk_user_data_with_flags(const struct sock *sk, uintptr_t flags)h](j)}(hvoidh]hvoid}(hjx(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt(hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjt(hhhj(hMubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjt(hhhj(hMubj)}(h%__locked_read_sk_user_data_with_flagsh]j%)}(h%__locked_read_sk_user_data_with_flagsh]h%__locked_read_sk_user_data_with_flags}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjt(hhhj(hMubj)}(h((const struct sock *sk, uintptr_t flags)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(hsockh]hsock}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j')}jj(sb'c.__locked_read_sk_user_data_with_flagsasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hj))hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hskh]hsk}(hj6)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(huintptr_t flagsh](h)}(hhh]j%)}(h uintptr_th]h uintptr_t}(hjR)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjT)modnameN classnameNjj!)}j$]j)'c.__locked_read_sk_user_data_with_flagsasbuh1hhjK)ubj)}(h h]h }(hjp)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK)ubj%)}(hflagsh]hflags}(hj~)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjK)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjt(hhhj(hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjp(hhhj(hMubah}(h]jk(ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(hMhjm(hhubjS)}(hhh]jX)}(hareturn the pointer only if argument flags all has been set in sk_user_data. Otherwise return NULLh]hareturn the pointer only if argument flags all has been set in sk_user_data. Otherwise return NULL}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1jRhjm(hhhj(hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sock *sk`` socket ``uintptr_t flags`` flag bits **Description** The caller must be holding sk->sk_callback_lock.h](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj)ubj)}(hhh](j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hj)h]hconst struct sock *sk}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj)ubj)}(hhh]jX)}(hsocketh]hsocket}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubj)}(h``uintptr_t flags`` flag bits h](j)}(h``uintptr_t flags``h]j)}(hj"*h]huintptr_t flags}(hj$*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj*ubj)}(hhh]jX)}(h flag bitsh]h flag bits}(hj;*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7*hMhj8*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj7*hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hj]*h]h Description}(hj_*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[*ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj)ubjX)}(h0The caller must be holding sk->sk_callback_lock.h]h0The caller must be holding sk->sk_callback_lock.}(hjs*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h6__rcu_dereference_sk_user_data_with_flags (C function)+c.__rcu_dereference_sk_user_data_with_flagshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hYvoid * __rcu_dereference_sk_user_data_with_flags (const struct sock *sk, uintptr_t flags)h]h)}(hWvoid *__rcu_dereference_sk_user_data_with_flags(const struct sock *sk, uintptr_t flags)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj*hMubj;)}(hj>h]h*}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*hhhj*hMubj)}(h)__rcu_dereference_sk_user_data_with_flagsh]j%)}(h)__rcu_dereference_sk_user_data_with_flagsh]h)__rcu_dereference_sk_user_data_with_flags}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj*hMubj)}(h((const struct sock *sk, uintptr_t flags)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(hsockh]hsock}(hj%+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'+modnameN classnameNjj!)}j$]j')}jj*sb+c.__rcu_dereference_sk_user_data_with_flagsasbuh1hhj*ubj)}(h h]h }(hjE+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjS+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hskh]hsk}(hj`+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubj)}(huintptr_t flagsh](h)}(hhh]j%)}(h uintptr_th]h uintptr_t}(hj|+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjy+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~+modnameN classnameNjj!)}j$]jA++c.__rcu_dereference_sk_user_data_with_flagsasbuh1hhju+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hju+ubj%)}(hflagsh]hflags}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hju+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj*hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*hhhj*hMubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hMhj*hhubjS)}(hhh]jX)}(hareturn the pointer only if argument flags all has been set in sk_user_data. Otherwise return NULLh]hareturn the pointer only if argument flags all has been set in sk_user_data. Otherwise return NULL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jRhj*hhhj*hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj+jxj+jyjzj{uh1hhhhj[hNhNubj})}(hS**Parameters** ``const struct sock *sk`` socket ``uintptr_t flags`` flag bitsh](jX)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj+ubj)}(hhh](j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hj,h]hconst struct sock *sk}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj ,ubj)}(hhh]jX)}(hsocketh]hsocket}(hj,,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(,hMhj),ubah}(h]h ]h"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]uh1jhj(,hMhj ,ubj)}(h``uintptr_t flags`` flag bitsh](j)}(h``uintptr_t flags``h]j)}(hjL,h]huintptr_t flags}(hjN,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ,ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjF,ubj)}(hhh]jX)}(h flag bitsh]h flag bits}(hje,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjb,ubah}(h]h ]h"]h$]h&]uh1jhjF,ubeh}(h]h ]h"]h$]h&]uh1jhja,hMhj ,ubeh}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&sk_for_each_entry_offset_rcu (C macro)c.sk_for_each_entry_offset_rcuhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hsk_for_each_entry_offset_rcuh]h)}(hsk_for_each_entry_offset_rcuh]j)}(hsk_for_each_entry_offset_rcuh]j%)}(hj,h]hsk_for_each_entry_offset_rcu}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj,hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubah}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj,hhhj,hMubah}(h]j,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,hMhj,hhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhj,hhhj,hMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhj[hNhNubjX)}(h:``sk_for_each_entry_offset_rcu (tpos, pos, head, offset)``h]j)}(hj,h]h6sk_for_each_entry_offset_rcu (tpos, pos, head, offset)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj[hhubj )}(h-iterate over a list at a given struct offset h]jX)}(h,iterate over a list at a given struct offseth]h,iterate over a list at a given struct offset}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj,ubah}(h]h ]h"]h$]h&]uh1j hj-hMhj[hhubj})}(h**Parameters** ``tpos`` the type * to use as a loop cursor. ``pos`` the :c:type:`struct hlist_node ` to use as a loop cursor. ``head`` the head for your list. ``offset`` offset of hlist_node within the struct.h](jX)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj -ubj)}(hhh](j)}(h-``tpos`` the type * to use as a loop cursor. h](j)}(h``tpos``h]j)}(hj0-h]htpos}(hj2-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj*-ubj)}(hhh]jX)}(h#the type * to use as a loop cursor.h]h#the type * to use as a loop cursor.}(hjI-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjE-hMhjF-ubah}(h]h ]h"]h$]h&]uh1jhj*-ubeh}(h]h ]h"]h$]h&]uh1jhjE-hMhj'-ubj)}(hN``pos`` the :c:type:`struct hlist_node ` to use as a loop cursor. h](j)}(h``pos``h]j)}(hji-h]hpos}(hjk-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjc-ubj)}(hhh]jX)}(hEthe :c:type:`struct hlist_node ` to use as a loop cursor.h](hthe }(hj-hhhNhNubh)}(h(:c:type:`struct hlist_node `h]j)}(hj-h]hstruct hlist_node}(hj-hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj hlist_nodeuh1hhj~-hMhj-ubh to use as a loop cursor.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj~-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjc-ubeh}(h]h ]h"]h$]h&]uh1jhj~-hMhj'-ubj)}(h!``head`` the head for your list. h](j)}(h``head``h]j)}(hj-h]hhead}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj-ubj)}(hhh]jX)}(hthe head for your list.h]hthe head for your list.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMhj'-ubj)}(h2``offset`` offset of hlist_node within the struct.h](j)}(h ``offset``h]j)}(hj-h]hoffset}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj-ubj)}(hhh]jX)}(h'offset of hlist_node within the struct.h]h'offset of hlist_node within the struct.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj'-ubeh}(h]h ]h"]h$]h&]uh1jhj -ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hSOCK_CONNECT_BIND (C macro)c.SOCK_CONNECT_BINDhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSOCK_CONNECT_BINDh]h)}(hSOCK_CONNECT_BINDh]j)}(hSOCK_CONNECT_BINDh]j%)}(hjR.h]hSOCK_CONNECT_BIND}(hj\.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjX.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjT.hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubah}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjP.hhhjo.hMubah}(h]jK.ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjo.hMhjM.hhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjM.hhhjo.hMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhj[hNhNubjX)}(h``SOCK_CONNECT_BIND``h]j)}(hj.h]hSOCK_CONNECT_BIND}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj[hhubj )}(hJ:c:type:`sock->sk_userlocks ` flag for auto-bind at connect() time h]jX)}(hH:c:type:`sock->sk_userlocks ` flag for auto-bind at connect() timeh](h)}(h#:c:type:`sock->sk_userlocks `h]j)}(hj.h]hsock->sk_userlocks}(hj.hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsockuh1hhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj.ubh% flag for auto-bind at connect() time}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1j hj.hMhj[hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlock_sock_fast (C function)c.lock_sock_fasthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h%bool lock_sock_fast (struct sock *sk)h]h)}(h$bool lock_sock_fast(struct sock *sk)h](j)}(hjTh]hbool}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.hhhj/hMubj)}(hlock_sock_fasth]j%)}(hlock_sock_fasth]hlock_sock_fast}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj.hhhj/hMubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj1/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-/ubj)}(h h]h }(hj>/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-/ubh)}(hhh]j%)}(hsockh]hsock}(hjO/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQ/modnameN classnameNjj!)}j$]j')}jj/sbc.lock_sock_fastasbuh1hhj-/ubj)}(h h]h }(hjo/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-/ubj;)}(hj>h]h*}(hj}/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-/ubj%)}(hskh]hsk}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj)/ubah}(h]h ]h"]h$]h&]j<j=uh1jhj.hhhj/hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.hhhj/hMubah}(h]j.ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj/hMhj.hhubjS)}(hhh]jX)}(hfast version of lock_sockh]hfast version of lock_sock}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhj/hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhj[hNhNubj})}(hX5**Parameters** ``struct sock *sk`` socket **Description** This version should be used for very small section, where process won't block return false if fast path is taken: sk_lock.slock locked, owned = 0, BH disabled return true if slow path is taken: sk_lock.slock unlocked, owned = 1, BH enabledh](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/ubj)}(hhh]j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hj/h]hstruct sock *sk}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/ubj)}(hhh]jX)}(hsocketh]hsocket}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj 0hMhj 0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj 0hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubjX)}(h**Description**h]j)}(hj00h]h Description}(hj20hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.0ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/ubjX)}(hqThis version should be used for very small section, where process won't block return false if fast path is taken:h]hsThis version should be used for very small section, where process won’t block return false if fast path is taken:}(hjF0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/ubj )}(h-sk_lock.slock locked, owned = 0, BH disabled h]jX)}(h,sk_lock.slock locked, owned = 0, BH disabledh]h,sk_lock.slock locked, owned = 0, BH disabled}(hjY0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhjU0ubah}(h]h ]h"]h$]h&]uh1j hjg0hMhj/ubjX)}(h"return true if slow path is taken:h]h"return true if slow path is taken:}(hjn0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj/ubj )}(h-sk_lock.slock unlocked, owned = 1, BH enabledh]jX)}(hj0h]h-sk_lock.slock unlocked, owned = 1, BH enabled}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj}0ubah}(h]h ]h"]h$]h&]uh1j hj0hMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hunlock_sock_fast (C function)c.unlock_sock_fasthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h2void unlock_sock_fast (struct sock *sk, bool slow)h]h)}(h1void unlock_sock_fast(struct sock *sk, bool slow)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMubj)}(hunlock_sock_fasth]j%)}(hunlock_sock_fasth]hunlock_sock_fast}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hMubj)}(h(struct sock *sk, bool slow)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(hsockh]hsock}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jj0sbc.unlock_sock_fastasbuh1hhj0ubj)}(h h]h }(hj01hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hj>1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hskh]hsk}(hjK1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(h bool slowh](j)}(hjTh]hbool}(hjd1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`1ubj)}(h h]h }(hjq1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`1ubj%)}(hslowh]hslow}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hMubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMhj0hhubjS)}(hhh]jX)}(hcomplement of lock_sock_fasth]hcomplement of lock_sock_fast}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sock *sk`` socket ``bool slow`` slow mode **Description** fast unlock socket for user context. If slow mode is on, we call regular release_sock()h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj1ubj)}(hhh](j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hj1h]hstruct sock *sk}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj1ubj)}(hhh]jX)}(hsocketh]hsocket}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubj)}(h``bool slow`` slow mode h](j)}(h ``bool slow``h]j)}(hj#2h]h bool slow}(hj%2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!2ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj2ubj)}(hhh]jX)}(h slow modeh]h slow mode}(hj<2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj82hMhj92ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj82hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubjX)}(h**Description**h]j)}(hj^2h]h Description}(hj`2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\2ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj1ubjX)}(hWfast unlock socket for user context. If slow mode is on, we call regular release_sock()h]hWfast unlock socket for user context. If slow mode is on, we call regular release_sock()}(hjt2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_wmem_alloc_get (C function)c.sk_wmem_alloc_gethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h-int sk_wmem_alloc_get (const struct sock *sk)h]h)}(h,int sk_wmem_alloc_get(const struct sock *sk)h](j)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM# ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhj2hM# ubj)}(hsk_wmem_alloc_geth]j%)}(hsk_wmem_alloc_geth]hsk_wmem_alloc_get}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2hhhj2hM# ubj)}(h(const struct sock *sk)h]j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(hsockh]hsock}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]j')}jj2sbc.sk_wmem_alloc_getasbuh1hhj2ubj)}(h h]h }(hj93hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hjG3hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hskh]hsk}(hjT3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubah}(h]h ]h"]h$]h&]j<j=uh1jhj2hhhj2hM# ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2hhhj2hM# ubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2hM# hj2hhubjS)}(hhh]jX)}(hreturns write allocationsh]hreturns write allocations}(hj~3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM# hj{3hhubah}(h]h ]h"]h$]h&]uh1jRhj2hhhj2hM# ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3jxj3jyjzj{uh1hhhhj[hNhNubj})}(hi**Parameters** ``const struct sock *sk`` socket **Return** sk_wmem_alloc minus initial offset of oneh](jX)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM' hj3ubj)}(hhh]j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hj3h]hconst struct sock *sk}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM$ hj3ubj)}(hhh]jX)}(hsocketh]hsocket}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hM$ hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM$ hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubjX)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM& hj3ubjX)}(h)sk_wmem_alloc minus initial offset of oneh]h)sk_wmem_alloc minus initial offset of one}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM& hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_rmem_alloc_get (C function)c.sk_rmem_alloc_gethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h-int sk_rmem_alloc_get (const struct sock *sk)h]h)}(h,int sk_rmem_alloc_get(const struct sock *sk)h](j)}(hinth]hint}(hj?4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;4hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM. ubj)}(h h]h }(hjN4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;4hhhjM4hM. ubj)}(hsk_rmem_alloc_geth]j%)}(hsk_rmem_alloc_geth]hsk_rmem_alloc_get}(hj`4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;4hhhjM4hM. ubj)}(h(const struct sock *sk)h]j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj|4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjx4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx4ubh)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjx4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx4ubh)}(hhh]j%)}(hsockh]hsock}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j')}jjb4sbc.sk_rmem_alloc_getasbuh1hhjx4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx4ubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjx4ubj%)}(hskh]hsk}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjx4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjt4ubah}(h]h ]h"]h$]h&]j<j=uh1jhj;4hhhjM4hM. ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj74hhhjM4hM. ubah}(h]j24ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjM4hM. hj44hhubjS)}(hhh]jX)}(hreturns read allocationsh]hreturns read allocations}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM. hj5hhubah}(h]h ]h"]h$]h&]uh1jRhj44hhhjM4hM. ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj25jxj25jyjzj{uh1hhhhj[hNhNubj})}(hM**Parameters** ``const struct sock *sk`` socket **Return** sk_rmem_alloch](jX)}(h**Parameters**h]j)}(hj<5h]h Parameters}(hj>5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:5ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM2 hj65ubj)}(hhh]j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hj[5h]hconst struct sock *sk}(hj]5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY5ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM/ hjU5ubj)}(hhh]jX)}(hsocketh]hsocket}(hjt5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp5hM/ hjq5ubah}(h]h ]h"]h$]h&]uh1jhjU5ubeh}(h]h ]h"]h$]h&]uh1jhjp5hM/ hjR5ubah}(h]h ]h"]h$]h&]uh1jhj65ubjX)}(h **Return**h]j)}(hj5h]hReturn}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM1 hj65ubjX)}(h sk_rmem_alloch]h sk_rmem_alloc}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM1 hj65ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_has_allocations (C function)c.sk_has_allocationshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h/bool sk_has_allocations (const struct sock *sk)h]h)}(h.bool sk_has_allocations(const struct sock *sk)h](j)}(hjTh]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM9 ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj5hM9 ubj)}(hsk_has_allocationsh]j%)}(hsk_has_allocationsh]hsk_has_allocations}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhj5hM9 ubj)}(h(const struct sock *sk)h]j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj$6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hjh]hstruct}(hj26hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj?6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hsockh]hsock}(hjP6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR6modnameN classnameNjj!)}j$]j')}jj5sbc.sk_has_allocationsasbuh1hhj6ubj)}(h h]h }(hjp6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj~6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hskh]hsk}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubah}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhj5hM9 ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhj5hM9 ubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj5hM9 hj5hhubjS)}(hhh]jX)}(h$check if allocations are outstandingh]h$check if allocations are outstanding}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM9 hj6hhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhj5hM9 ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj6jxj6jyjzj{uh1hhhhj[hNhNubj})}(hl**Parameters** ``const struct sock *sk`` socket **Return** true if socket has write or read allocationsh](jX)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM= hj6ubj)}(hhh]j)}(h!``const struct sock *sk`` socket h](j)}(h``const struct sock *sk``h]j)}(hj6h]hconst struct sock *sk}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM: hj6ubj)}(hhh]jX)}(hsocketh]hsocket}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj 7hM: hj 7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj 7hM: hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubjX)}(h **Return**h]j)}(hj17h]hReturn}(hj37hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/7ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM< hj6ubjX)}(h,true if socket has write or read allocationsh]h,true if socket has write or read allocations}(hjG7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM< hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskwq_has_sleeper (C function)c.skwq_has_sleeperhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h,bool skwq_has_sleeper (struct socket_wq *wq)h]h)}(h+bool skwq_has_sleeper(struct socket_wq *wq)h](j)}(hjTh]hbool}(hjv7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr7hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMD ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr7hhhj7hMD ubj)}(hskwq_has_sleeperh]j%)}(hskwq_has_sleeperh]hskwq_has_sleeper}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjr7hhhj7hMD ubj)}(h(struct socket_wq *wq)h]j)}(hstruct socket_wq *wqh](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(h socket_wqh]h socket_wq}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jj7sbc.skwq_has_sleeperasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hwqh]hwq}(hj 8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubah}(h]h ]h"]h$]h&]j<j=uh1jhjr7hhhj7hMD ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjn7hhhj7hMD ubah}(h]ji7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj7hMD hjk7hhubjS)}(hhh]jX)}(h(check if there are any waiting processesh]h(check if there are any waiting processes}(hj58hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMD hj28hhubah}(h]h ]h"]h$]h&]uh1jRhjk7hhhj7hMD ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjM8jxjM8jyjzj{uh1hhhhj[hNhNubj})}(hX$**Parameters** ``struct socket_wq *wq`` struct socket_wq **Return** true if socket_wq has waiting processes **Description** The purpose of the skwq_has_sleeper and sock_poll_wait is to wrap the memory barrier call. They were added due to the race found within the tcp code. Consider following tcp code paths:: CPU1 CPU2 sys_select receive packet ... ... __add_wait_queue update tp->rcv_nxt ... ... tp->rcv_nxt check sock_def_readable ... { schedule rcu_read_lock(); wq = rcu_dereference(sk->sk_wq); if (wq && waitqueue_active(&wq->wait)) wake_up_interruptible(&wq->wait) ... } The race for tcp fires when the __add_wait_queue changes done by CPU1 stay in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 could then endup calling schedule and sleep forever if there are no more data on the socket.h](jX)}(h**Parameters**h]j)}(hjW8h]h Parameters}(hjY8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU8ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMH hjQ8ubj)}(hhh]j)}(h*``struct socket_wq *wq`` struct socket_wq h](j)}(h``struct socket_wq *wq``h]j)}(hjv8h]hstruct socket_wq *wq}(hjx8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt8ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhME hjp8ubj)}(hhh]jX)}(hstruct socket_wqh]hstruct socket_wq}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hME hj8ubah}(h]h ]h"]h$]h&]uh1jhjp8ubeh}(h]h ]h"]h$]h&]uh1jhj8hME hjm8ubah}(h]h ]h"]h$]h&]uh1jhjQ8ubjX)}(h **Return**h]j)}(hj8h]hReturn}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMG hjQ8ubjX)}(h'true if socket_wq has waiting processesh]h'true if socket_wq has waiting processes}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMG hjQ8ubjX)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMI hjQ8ubjX)}(hThe purpose of the skwq_has_sleeper and sock_poll_wait is to wrap the memory barrier call. They were added due to the race found within the tcp code.h]hThe purpose of the skwq_has_sleeper and sock_poll_wait is to wrap the memory barrier call. They were added due to the race found within the tcp code.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMH hjQ8ubjX)}(h#Consider following tcp code paths::h]h"Consider following tcp code paths:}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMK hjQ8ubjU)}(hXCPU1 CPU2 sys_select receive packet ... ... __add_wait_queue update tp->rcv_nxt ... ... tp->rcv_nxt check sock_def_readable ... { schedule rcu_read_lock(); wq = rcu_dereference(sk->sk_wq); if (wq && waitqueue_active(&wq->wait)) wake_up_interruptible(&wq->wait) ... }h]hXCPU1 CPU2 sys_select receive packet ... ... __add_wait_queue update tp->rcv_nxt ... ... tp->rcv_nxt check sock_def_readable ... { schedule rcu_read_lock(); wq = rcu_dereference(sk->sk_wq); if (wq && waitqueue_active(&wq->wait)) wake_up_interruptible(&wq->wait) ... }}hj 9sbah}(h]h ]h"]h$]h&]j<j=uh1jThR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMM hjQ8ubjX)}(hThe race for tcp fires when the __add_wait_queue changes done by CPU1 stay in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 could then endup calling schedule and sleep forever if there are no more data on the socket.h]hThe race for tcp fires when the __add_wait_queue changes done by CPU1 stay in its cache, and so does the tp->rcv_nxt update on CPU2 side. The CPU1 could then endup calling schedule and sleep forever if there are no more data on the socket.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM[ hjQ8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_poll_wait (C function)c.sock_poll_waithNtauh1hhj[hhhNhNubh)}(hhh](h)}(hKvoid sock_poll_wait (struct file *filp, struct socket *sock, poll_table *p)h]h)}(hJvoid sock_poll_wait(struct file *filp, struct socket *sock, poll_table *p)h](j)}(hvoidh]hvoid}(hjJ9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF9hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMh ubj)}(h h]h }(hjY9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjF9hhhjX9hMh ubj)}(hsock_poll_waith]j%)}(hsock_poll_waith]hsock_poll_wait}(hjk9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjg9ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjF9hhhjX9hMh ubj)}(h7(struct file *filp, struct socket *sock, poll_table *p)h](j)}(hstruct file *filph](h)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubh)}(hhh]j%)}(hfileh]hfile}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9modnameN classnameNjj!)}j$]j')}jjm9sbc.sock_poll_waitasbuh1hhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9ubj%)}(hfilph]hfilp}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubj)}(hstruct socket *sockh](h)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubh)}(hhh]j%)}(hsocketh]hsocket}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j9c.sock_poll_waitasbuh1hhj9ubj)}(h h]h }(hj5:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj;)}(hj>h]h*}(hjC:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9ubj%)}(hsockh]hsock}(hjP:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubj)}(h poll_table *ph](h)}(hhh]j%)}(h poll_tableh]h poll_table}(hjl:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hji:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjn:modnameN classnameNjj!)}j$]j9c.sock_poll_waitasbuh1hhje:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hje:ubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hje:ubj%)}(hjGh]hp}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hje:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjF9hhhjX9hMh ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjB9hhhjX9hMh ubah}(h]j=9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjX9hMh hj?9hhubjS)}(hhh]jX)}(hwrapper for the poll_wait call.h]hwrapper for the poll_wait call.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMh hj:hhubah}(h]h ]h"]h$]h&]uh1jRhj?9hhhjX9hMh ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj:jxj:jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct file *filp`` file ``struct socket *sock`` socket to wait on ``poll_table *p`` poll_table **Description** See the comments in the wq_has_sleeper function.h](jX)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMl hj:ubj)}(hhh](j)}(h``struct file *filp`` file h](j)}(h``struct file *filp``h]j)}(hj;h]hstruct file *filp}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMi hj ;ubj)}(hhh]jX)}(hfileh]hfile}(hj(;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$;hMi hj%;ubah}(h]h ]h"]h$]h&]uh1jhj ;ubeh}(h]h ]h"]h$]h&]uh1jhj$;hMi hj;ubj)}(h*``struct socket *sock`` socket to wait on h](j)}(h``struct socket *sock``h]j)}(hjH;h]hstruct socket *sock}(hjJ;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMj hjB;ubj)}(hhh]jX)}(hsocket to wait onh]hsocket to wait on}(hja;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj];hMj hj^;ubah}(h]h ]h"]h$]h&]uh1jhjB;ubeh}(h]h ]h"]h$]h&]uh1jhj];hMj hj;ubj)}(h``poll_table *p`` poll_table h](j)}(h``poll_table *p``h]j)}(hj;h]h poll_table *p}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMk hj{;ubj)}(hhh]jX)}(h poll_tableh]h poll_table}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMk hj;ubah}(h]h ]h"]h$]h&]uh1jhj{;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMk hj;ubeh}(h]h ]h"]h$]h&]uh1jhj:ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMm hj:ubjX)}(h0See the comments in the wq_has_sleeper function.h]h0See the comments in the wq_has_sleeper function.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMl hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_page_frag (C function)c.sk_page_fraghNtauh1hhj[hhhNhNubh)}(hhh](h)}(h1struct page_frag * sk_page_frag (struct sock *sk)h]h)}(h/struct page_frag *sk_page_frag(struct sock *sk)h](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM. ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhj<hM. ubh)}(hhh]j%)}(h page_fragh]h page_frag}(hj <hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"<modnameN classnameNjj!)}j$]j')}j sk_page_fragsbc.sk_page_fragasbuh1hhj;hhhj<hM. ubj)}(h h]h }(hjA<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhj<hM. ubj;)}(hj>h]h*}(hjO<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;hhhj<hM. ubj)}(h sk_page_fragh]j%)}(hj><h]h sk_page_frag}(hj`<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhj<hM. ubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj{<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjw<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw<ubh)}(hhh]j%)}(hsockh]hsock}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j<<c.sk_page_fragasbuh1hhjw<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw<ubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjw<ubj%)}(hskh]hsk}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjs<ubah}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhj<hM. ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;hhhj<hM. ubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hM. hj;hhubjS)}(hhh]jX)}(hreturn an appropriate page_fragh]hreturn an appropriate page_frag}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM. hj<hhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhj<hM. ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj=jxj=jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sock *sk`` socket **Description** Use the per task page_frag instead of the per socket one for optimization when we know that we're in process context and own everything that's associated with ``current``. Both direct reclaim and page faults can nest inside other socket operations and end up recursing into sk_page_frag() while it's already in use: explicitly avoid task page_frag when users disable sk_use_task_frag. **Return** a per task page_frag if context allows that, otherwise a per socket one.h](jX)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj =hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM2 hj=ubj)}(hhh]j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hj==h]hstruct sock *sk}(hj?=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;=ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM/ hj7=ubj)}(hhh]jX)}(hsocketh]hsocket}(hjV=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjR=hM/ hjS=ubah}(h]h ]h"]h$]h&]uh1jhj7=ubeh}(h]h ]h"]h$]h&]uh1jhjR=hM/ hj4=ubah}(h]h ]h"]h$]h&]uh1jhj=ubjX)}(h**Description**h]j)}(hjx=h]h Description}(hjz=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv=ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM1 hj=ubjX)}(hUse the per task page_frag instead of the per socket one for optimization when we know that we're in process context and own everything that's associated with ``current``.h](hUse the per task page_frag instead of the per socket one for optimization when we know that we’re in process context and own everything that’s associated with }(hj=hhhNhNubj)}(h ``current``h]hcurrent}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM0 hj=ubjX)}(hBoth direct reclaim and page faults can nest inside other socket operations and end up recursing into sk_page_frag() while it's already in use: explicitly avoid task page_frag when users disable sk_use_task_frag.h]hBoth direct reclaim and page faults can nest inside other socket operations and end up recursing into sk_page_frag() while it’s already in use: explicitly avoid task page_frag when users disable sk_use_task_frag.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM4 hj=ubjX)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM9 hj=ubjX)}(hHa per task page_frag if context allows that, otherwise a per socket one.h]hHa per task page_frag if context allows that, otherwise a per socket one.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM: hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h_sock_tx_timestamp (C function)c._sock_tx_timestamphNtauh1hhj[hhhNhNubh)}(hhh](h)}(hjvoid _sock_tx_timestamp (struct sock *sk, const struct sockcm_cookie *sockc, __u8 *tx_flags, __u32 *tskey)h]h)}(hivoid _sock_tx_timestamp(struct sock *sk, const struct sockcm_cookie *sockc, __u8 *tx_flags, __u32 *tskey)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM@ ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhj>hM@ ubj)}(h_sock_tx_timestamph]j%)}(h_sock_tx_timestamph]h_sock_tx_timestamp}(hj&>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj">ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj>hhhj>hM@ ubj)}(hR(struct sock *sk, const struct sockcm_cookie *sockc, __u8 *tx_flags, __u32 *tskey)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hjB>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>>ubj)}(h h]h }(hjO>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>>ubh)}(hhh]j%)}(hsockh]hsock}(hj`>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjb>modnameN classnameNjj!)}j$]j')}jj(>sbc._sock_tx_timestampasbuh1hhj>>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>>ubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>>ubj%)}(hskh]hsk}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:>ubj)}(h!const struct sockcm_cookie *sockch](h)}(hjh]hconst}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(h sockcm_cookieh]h sockcm_cookie}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]j|>c._sock_tx_timestampasbuh1hhj>ubj)}(h h]h }(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(hsockch]hsockc}(hj&?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:>ubj)}(h__u8 *tx_flagsh](h)}(hhh]j%)}(h__u8h]h__u8}(hjB?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj??ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjD?modnameN classnameNjj!)}j$]j|>c._sock_tx_timestampasbuh1hhj;?ubj)}(h h]h }(hj`?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;?ubj;)}(hj>h]h*}(hjn?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;?ubj%)}(htx_flagsh]htx_flags}(hj{?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:>ubj)}(h __u32 *tskeyh](h)}(hhh]j%)}(h__u32h]h__u32}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j|>c._sock_tx_timestampasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(htskeyh]htskey}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:>ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj>hhhj>hM@ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj=hhhj>hM@ ubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>hM@ hj=hhubjS)}(hhh]jX)}(h8checks whether the outgoing packet is to be time stampedh]h8checks whether the outgoing packet is to be time stamped}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM@ hj?hhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhj>hM@ ubeh}(h]h ](jqfunctione.h"]h$]h&]jvjqjwj@jxj@jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sock *sk`` socket sending this packet ``const struct sockcm_cookie *sockc`` pointer to socket cmsg cookie to get timestamping info ``__u8 *tx_flags`` completed with instructions for time stamping ``__u32 *tskey`` filled in with next sk_tskey (not for TCP, which uses seqno) **Note** callers should take care of initial ``*tx_flags`` value (usually 0)h](jX)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMD hj@ubj)}(hhh](j)}(h/``struct sock *sk`` socket sending this packet h](j)}(h``struct sock *sk``h]j)}(hj;@h]hstruct sock *sk}(hj=@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMA hj5@ubj)}(hhh]jX)}(hsocket sending this packeth]hsocket sending this packet}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjP@hMA hjQ@ubah}(h]h ]h"]h$]h&]uh1jhj5@ubeh}(h]h ]h"]h$]h&]uh1jhjP@hMA hj2@ubj)}(h]``const struct sockcm_cookie *sockc`` pointer to socket cmsg cookie to get timestamping info h](j)}(h%``const struct sockcm_cookie *sockc``h]j)}(hjt@h]h!const struct sockcm_cookie *sockc}(hjv@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMB hjn@ubj)}(hhh]jX)}(h6pointer to socket cmsg cookie to get timestamping infoh]h6pointer to socket cmsg cookie to get timestamping info}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMB hj@ubah}(h]h ]h"]h$]h&]uh1jhjn@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMB hj2@ubj)}(hA``__u8 *tx_flags`` completed with instructions for time stamping h](j)}(h``__u8 *tx_flags``h]j)}(hj@h]h__u8 *tx_flags}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMC hj@ubj)}(hhh]jX)}(h-completed with instructions for time stampingh]h-completed with instructions for time stamping}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMC hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMC hj2@ubj)}(hN``__u32 *tskey`` filled in with next sk_tskey (not for TCP, which uses seqno) h](j)}(h``__u32 *tskey``h]j)}(hj@h]h __u32 *tskey}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhMD hj@ubj)}(hhh]jX)}(hh]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubj%)}(hskh]hsk}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj'BhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#Bubj)}(h h]h }(hj4BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Bubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjEBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGBmodnameN classnameNjj!)}j$]jA c.sk_eat_skbasbuh1hhj#Bubj)}(h h]h }(hjcBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Bubj;)}(hj>h]h*}(hjqBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#Bubj%)}(hskbh]hskb}(hj~BhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#Bubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubeh}(h]h ]h"]h$]h&]j<j=uh1jhjtAhhhjAhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjpAhhhjAhM ubah}(h]jkAah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhM hjmAhhubjS)}(hhh]jX)}(h'Release a skb if it is no longer neededh]h'Release a skb if it is no longer needed}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjBhhubah}(h]h ]h"]h$]h&]uh1jRhjmAhhhjAhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sock *sk`` socket to eat this skb from ``struct sk_buff *skb`` socket buffer to eat **Description** This routine must be called with interrupts disabled or with the socket locked so that the sk_buff queue operation is ok.h](jX)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjBubj)}(hhh](j)}(h0``struct sock *sk`` socket to eat this skb from h](j)}(h``struct sock *sk``h]j)}(hjBh]hstruct sock *sk}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjBubj)}(hhh]jX)}(hsocket to eat this skb fromh]hsocket to eat this skb from}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h-``struct sk_buff *skb`` socket buffer to eat h](j)}(h``struct sk_buff *skb``h]j)}(hj"Ch]hstruct sk_buff *skb}(hj$ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Cubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjCubj)}(hhh]jX)}(hsocket buffer to eath]hsocket buffer to eat}(hj;ChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7ChM hj8Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj7ChM hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubjX)}(h**Description**h]j)}(hj]Ch]h Description}(hj_ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Cubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjBubjX)}(hyThis routine must be called with interrupts disabled or with the socket locked so that the sk_buff queue operation is ok.h]hyThis routine must be called with interrupts disabled or with the socket locked so that the sk_buff queue operation is ok.}(hjsChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:20: ./include/net/sock.hhM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_alloc_file (C function)c.sock_alloc_filehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hQstruct file * sock_alloc_file (struct socket *sock, int flags, const char *dname)h]h)}(hOstruct file *sock_alloc_file(struct socket *sock, int flags, const char *dname)h](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjChhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChMubh)}(hhh]j%)}(hfileh]hfile}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}jsock_alloc_filesbc.sock_alloc_fileasbuh1hhjChhhjChMubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChMubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjChhhjChMubj)}(hsock_alloc_fileh]j%)}(hjCh]hsock_alloc_file}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjChMubj)}(h3(struct socket *sock, int flags, const char *dname)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hj)DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hsocketh]hsocket}(hj:DhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7Dubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjh]h*}(hjfDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hsockh]hsock}(hjsDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(h int flagsh](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj%)}(hflagsh]hflags}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hconst char *dnameh](h)}(hjh]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj)}(hcharh]hchar}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hdnameh]hdname}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjChMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjChMubah}(h]jCah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChMhjChhubjS)}(hhh]jX)}(h+Bind a :c:type:`socket` to a :c:type:`file`h](hBind a }(hj/EhhhNhNubh)}(h:c:type:`socket`h]j)}(hj9Eh]hsocket}(hj;EhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj7Eubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jCc.sock_alloc_fileasbjsocketuh1hhjChMhj/Eubh to a }(hj/EhhhNhNubh)}(h:c:type:`file`h]j)}(hjaEh]hfile}(hjcEhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj_Eubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjUEjfileuh1hhjChMhj/Eubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj,Ehhubah}(h]h ]h"]h$]h&]uh1jRhjChhhjChMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjEjxjEjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct socket *sock`` socket ``int flags`` file status flags ``const char *dname`` protocol name **Description** Returns the :c:type:`file` bound with **sock**, implicitly storing it in sock->file. If dname is ``NULL``, sets to "". On failure **sock** is released, and an ERR pointer is returned. This function uses GFP_KERNEL internally.h](jX)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjEubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjEh]hstruct socket *sock}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjEubj)}(hhh]jX)}(hsocketh]hsocket}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h ``int flags`` file status flags h](j)}(h ``int flags``h]j)}(hjEh]h int flags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjEubj)}(hhh]jX)}(hfile status flagsh]hfile status flags}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjEubj)}(h$``const char *dname`` protocol name h](j)}(h``const char *dname``h]j)}(hj)Fh]hconst char *dname}(hj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Fubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj#Fubj)}(hhh]jX)}(h protocol nameh]h protocol name}(hjBFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>FhMhj?Fubah}(h]h ]h"]h$]h&]uh1jhj#Fubeh}(h]h ]h"]h$]h&]uh1jhj>FhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubjX)}(h**Description**h]j)}(hjdFh]h Description}(hjfFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbFubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjEubj )}(hReturns the :c:type:`file` bound with **sock**, implicitly storing it in sock->file. If dname is ``NULL``, sets to "". On failure **sock** is released, and an ERR pointer is returned. This function uses GFP_KERNEL internally.h](jX)}(hvReturns the :c:type:`file` bound with **sock**, implicitly storing it in sock->file. If dname is ``NULL``, sets to "".h](h Returns the }(hj~FhhhNhNubh)}(h:c:type:`file`h]j)}(hjFh]hfile}(hjFhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjfileuh1hhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj~Fubh bound with }(hj~FhhhNhNubj)}(h**sock**h]hsock}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Fubh3, implicitly storing it in sock->file. If dname is }(hj~FhhhNhNubj)}(h``NULL``h]hNULL}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~Fubh, sets to “”.}(hj~FhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjFhMhjzFubjX)}(h@On failure **sock** is released, and an ERR pointer is returned.h](h On failure }(hjFhhhNhNubj)}(h**sock**h]hsock}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh- is released, and an ERR pointer is returned.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjzFubjX)}(h)This function uses GFP_KERNEL internally.h]h)This function uses GFP_KERNEL internally.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjzFubeh}(h]h ]h"]h$]h&]uh1j hjFhMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_from_file (C function)c.sock_from_filehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h2struct socket * sock_from_file (struct file *file)h]h)}(h0struct socket *sock_from_file(struct file *file)h](h)}(hjh]hstruct}(hj*GhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&GhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hj8GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&Ghhhj7GhM ubh)}(hhh]j%)}(hsocketh]hsocket}(hjIGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKGmodnameN classnameNjj!)}j$]j')}jsock_from_filesbc.sock_from_fileasbuh1hhj&Ghhhj7GhM ubj)}(h h]h }(hjjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&Ghhhj7GhM ubj;)}(hj>h]h*}(hjxGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&Ghhhj7GhM ubj)}(hsock_from_fileh]j%)}(hjgGh]hsock_from_file}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&Ghhhj7GhM ubj)}(h(struct file *file)h]j)}(hstruct file *fileh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]jeGc.sock_from_fileasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hfileh]hfile}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubah}(h]h ]h"]h$]h&]j<j=uh1jhj&Ghhhj7GhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"Ghhhj7GhM ubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj7GhM hjGhhubjS)}(hhh]jX)}(h0Return the :c:type:`socket` bounded to **file**.h](h Return the }(hj%HhhhNhNubh)}(h:c:type:`socket`h]j)}(hj/Hh]hsocket}(hj1HhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj-Hubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jeGc.sock_from_fileasbjsocketuh1hhjChMhj%Hubh bounded to }(hj%HhhhNhNubj)}(h**file**h]hfile}(hjUHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Hubh.}(hj%HhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj"Hhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhj7GhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwHjxjwHjyjzj{uh1hhhhj[hNhNubj})}(h`**Parameters** ``struct file *file`` file **Description** On failure returns ``NULL``.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj{Hubj)}(hhh]j)}(h``struct file *file`` file h](j)}(h``struct file *file``h]j)}(hjHh]hstruct file *file}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjHubj)}(hhh]jX)}(hfileh]hfile}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jhj{HubjX)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj{Hubj )}(hOn failure returns ``NULL``.h]jX)}(hjHh](hOn failure returns }(hjHhhhNhNubj)}(h``NULL``h]hNULL}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjHubah}(h]h ]h"]h$]h&]uh1j hjIhMhj{Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsockfd_lookup (C function)c.sockfd_lookuphNtauh1hhj[hhhNhNubh)}(hhh](h)}(h0struct socket * sockfd_lookup (int fd, int *err)h]h)}(h.struct socket *sockfd_lookup(int fd, int *err)h](h)}(hjh]hstruct}(hj;IhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7IhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjIIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7IhhhjHIhMubh)}(hhh]j%)}(hsocketh]hsocket}(hjZIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\ImodnameN classnameNjj!)}j$]j')}j sockfd_lookupsbc.sockfd_lookupasbuh1hhj7IhhhjHIhMubj)}(h h]h }(hj{IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7IhhhjHIhMubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7IhhhjHIhMubj)}(h sockfd_lookuph]j%)}(hjxIh]h sockfd_lookup}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj7IhhhjHIhMubj)}(h(int fd, int *err)h](j)}(hint fdh](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj%)}(hfdh]hfd}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubj)}(hint *errh](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(herrh]herr}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubeh}(h]h ]h"]h$]h&]j<j=uh1jhj7IhhhjHIhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3IhhhjHIhMubah}(h]j.Iah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHIhMhj0IhhubjS)}(hhh]jX)}(h(Go from a file number to its socket sloth]h(Go from a file number to its socket slot}(hj=JhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj:Jhhubah}(h]h ]h"]h$]h&]uh1jRhj0IhhhjHIhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjUJjxjUJjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``int fd`` file handle ``int *err`` pointer to an error code return **Description** The file handle passed in is locked and the socket it is bound to is returned. If an error occurs the err pointer is overwritten with a negative errno code and NULL is returned. The function checks for both invalid handles and passing a handle which is not a socket. On a success the socket object pointer is returned.h](jX)}(h**Parameters**h]j)}(hj_Jh]h Parameters}(hjaJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Jubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjYJubj)}(hhh](j)}(h``int fd`` file handle h](j)}(h ``int fd``h]j)}(hj~Jh]hint fd}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Jubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjxJubj)}(hhh]jX)}(h file handleh]h file handle}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjxJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjuJubj)}(h-``int *err`` pointer to an error code return h](j)}(h ``int *err``h]j)}(hjJh]hint *err}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjJubj)}(hhh]jX)}(hpointer to an error code returnh]hpointer to an error code return}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjuJubeh}(h]h ]h"]h$]h&]uh1jhjYJubjX)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjYJubj )}(hX?The file handle passed in is locked and the socket it is bound to is returned. If an error occurs the err pointer is overwritten with a negative errno code and NULL is returned. The function checks for both invalid handles and passing a handle which is not a socket. On a success the socket object pointer is returned.h](jX)}(hX The file handle passed in is locked and the socket it is bound to is returned. If an error occurs the err pointer is overwritten with a negative errno code and NULL is returned. The function checks for both invalid handles and passing a handle which is not a socket.h]hX The file handle passed in is locked and the socket it is bound to is returned. If an error occurs the err pointer is overwritten with a negative errno code and NULL is returned. The function checks for both invalid handles and passing a handle which is not a socket.}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjKubjX)}(h3On a success the socket object pointer is returned.h]h3On a success the socket object pointer is returned.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM$hjKubeh}(h]h ]h"]h$]h&]uh1j hjKhMhjYJubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_alloc (C function) c.sock_allochNtauh1hhj[hhhNhNubh)}(hhh](h)}(h!struct socket * sock_alloc (void)h]h)}(hstruct socket *sock_alloc(void)h](h)}(hjh]hstruct}(hjPKhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLKhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMqubj)}(h h]h }(hj^KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLKhhhj]KhMqubh)}(hhh]j%)}(hsocketh]hsocket}(hjoKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqKmodnameN classnameNjj!)}j$]j')}j sock_allocsb c.sock_allocasbuh1hhjLKhhhj]KhMqubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLKhhhj]KhMqubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLKhhhj]KhMqubj)}(h sock_alloch]j%)}(hjKh]h sock_alloc}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLKhhhj]KhMqubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubah}(h]h ]h"]h$]h&]j<j=uh1jhjLKhhhj]KhMqubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHKhhhj]KhMqubah}(h]jCKah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]KhMqhjEKhhubjS)}(hhh]jX)}(hallocate a socketh]hallocate a socket}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMqhjKhhubah}(h]h ]h"]h$]h&]uh1jRhjEKhhhj]KhMqubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj Ljxj Ljyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``void`` no arguments **Description** Allocate a new inode and socket object. The two are bound together and initialised. The socket is then returned. If we are out of inodes NULL is returned. This functions uses GFP_KERNEL internally.h](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMuhjLubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj5Lh]hvoid}(hj7LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Lubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chKhj/Lubj)}(hhh]jX)}(h no argumentsh]h no arguments}(hjNLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJLhKhjKLubah}(h]h ]h"]h$]h&]uh1jhj/Lubeh}(h]h ]h"]h$]h&]uh1jhjJLhKhj,Lubah}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**Description**h]j)}(hjpLh]h Description}(hjrLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnLubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chKhjLubj )}(hAllocate a new inode and socket object. The two are bound together and initialised. The socket is then returned. If we are out of inodes NULL is returned. This functions uses GFP_KERNEL internally.h]jX)}(hAllocate a new inode and socket object. The two are bound together and initialised. The socket is then returned. If we are out of inodes NULL is returned. This functions uses GFP_KERNEL internally.h]hAllocate a new inode and socket object. The two are bound together and initialised. The socket is then returned. If we are out of inodes NULL is returned. This functions uses GFP_KERNEL internally.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMrhjLubah}(h]h ]h"]h$]h&]uh1j hjLhMrhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_release (C function)c.sock_releasehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h'void sock_release (struct socket *sock)h]h)}(h&void sock_release(struct socket *sock)h](j)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLhhhjLhMubj)}(h sock_releaseh]j%)}(h sock_releaseh]h sock_release}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLhhhjLhMubj)}(h(struct socket *sock)h]j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLubj)}(h h]h }(hj MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubh)}(hhh]j%)}(hsocketh]hsocket}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjMmodnameN classnameNjj!)}j$]j')}jjLsbc.sock_releaseasbuh1hhjLubj)}(h h]h }(hj:MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj;)}(hj>h]h*}(hjHMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLubj%)}(hsockh]hsock}(hjUMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLubah}(h]h ]h"]h$]h&]j<j=uh1jhjLhhhjLhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjLhMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjLhMhjLhhubjS)}(hhh]jX)}(hclose a socketh]hclose a socket}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj|Mhhubah}(h]h ]h"]h$]h&]uh1jRhjLhhhjLhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMjxjMjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket to close **Description** The socket is released from the protocol stack if it has a release callback, and the inode is then released if the socket is bound to an inode not a file.h](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjMubj)}(hhh]j)}(h(``struct socket *sock`` socket to close h](j)}(h``struct socket *sock``h]j)}(hjMh]hstruct socket *sock}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjMubj)}(hhh]jX)}(hsocket to closeh]hsocket to close}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjMubjX)}(h**Description**h]j)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjMubj )}(hThe socket is released from the protocol stack if it has a release callback, and the inode is then released if the socket is bound to an inode not a file.h]jX)}(hThe socket is released from the protocol stack if it has a release callback, and the inode is then released if the socket is bound to an inode not a file.h]hThe socket is released from the protocol stack if it has a release callback, and the inode is then released if the socket is bound to an inode not a file.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjNubah}(h]h ]h"]h$]h&]uh1j hj#NhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_sendmsg (C function)c.sock_sendmsghNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:int sock_sendmsg (struct socket *sock, struct msghdr *msg)h]h)}(h9int sock_sendmsg(struct socket *sock, struct msghdr *msg)h](j)}(hinth]hint}(hjJNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFNhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjYNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFNhhhjXNhMubj)}(h sock_sendmsgh]j%)}(h sock_sendmsgh]h sock_sendmsg}(hjkNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgNubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjFNhhhjXNhMubj)}(h)(struct socket *sock, struct msghdr *msg)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubh)}(hhh]j%)}(hsocketh]hsocket}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jjmNsbc.sock_sendmsgasbuh1hhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNubj%)}(hsockh]hsock}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hstruct msghdr *msgh](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjNubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubh)}(hhh]j%)}(hmsghdrh]hmsghdr}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjOmodnameN classnameNjj!)}j$]jNc.sock_sendmsgasbuh1hhjNubj)}(h h]h }(hj5OhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj;)}(hj>h]h*}(hjCOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNubj%)}(hmsgh]hmsg}(hjPOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjFNhhhjXNhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBNhhhjXNhMubah}(h]j=Nah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXNhMhj?NhhubjS)}(hhh]jX)}(hsend a message through **sock**h](hsend a message through }(hjzOhhhNhNubj)}(h**sock**h]hsock}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzOubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjwOhhubah}(h]h ]h"]h$]h&]uh1jRhj?NhhhjXNhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjOjxjOjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket ``struct msghdr *msg`` message to send **Description** Sends **msg** through **sock**, passing through LSM. Returns the number of bytes sent, or an error code.h](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjOubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjOh]hstruct socket *sock}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjOubj)}(hhh]jX)}(hsocketh]hsocket}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjOubj)}(h'``struct msghdr *msg`` message to send h](j)}(h``struct msghdr *msg``h]j)}(hjPh]hstruct msghdr *msg}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjOubj)}(hhh]jX)}(hmessage to sendh]hmessage to send}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hj=Ph]h Description}(hj?PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Pubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjOubj )}(hhSends **msg** through **sock**, passing through LSM. Returns the number of bytes sent, or an error code.h]jX)}(hhSends **msg** through **sock**, passing through LSM. Returns the number of bytes sent, or an error code.h](hSends }(hjWPhhhNhNubj)}(h**msg**h]hmsg}(hj_PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWPubh through }(hjWPhhhNhNubj)}(h**sock**h]hsock}(hjqPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWPubhJ, passing through LSM. Returns the number of bytes sent, or an error code.}(hjWPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjSPubah}(h]h ]h"]h$]h&]uh1j hjPhMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_sendmsg (C function)c.kernel_sendmsghNtauh1hhj[hhhNhNubh)}(hhh](h)}(hgint kernel_sendmsg (struct socket *sock, struct msghdr *msg, struct kvec *vec, size_t num, size_t size)h]h)}(hfint kernel_sendmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec, size_t num, size_t size)h](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjPhMubj)}(hkernel_sendmsgh]j%)}(hkernel_sendmsgh]hkernel_sendmsg}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjPhMubj)}(hT(struct socket *sock, struct msghdr *msg, struct kvec *vec, size_t num, size_t size)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(hsocketh]hsocket}(hj QhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj QmodnameN classnameNjj!)}j$]j')}jjPsbc.kernel_sendmsgasbuh1hhjPubj)}(h h]h }(hj+QhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hj9QhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(hsockh]hsock}(hjFQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hstruct msghdr *msgh](h)}(hjh]hstruct}(hj_QhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[Qubj)}(h h]h }(hjlQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Qubh)}(hhh]j%)}(hmsghdrh]hmsghdr}(hj}QhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j'Qc.kernel_sendmsgasbuh1hhj[Qubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Qubj;)}(hj>h]h*}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[Qubj%)}(hmsgh]hmsg}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[Qubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hstruct kvec *vech](h)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjQubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubh)}(hhh]j%)}(hkvech]hkvec}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j'Qc.kernel_sendmsgasbuh1hhjQubj)}(h h]h }(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjQubj%)}(hvech]hvec}(hj&RhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h size_t numh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjBRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?Rubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDRmodnameN classnameNjj!)}j$]j'Qc.kernel_sendmsgasbuh1hhj;Rubj)}(h h]h }(hj`RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;Rubj%)}(hnumh]hnum}(hjnRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;Rubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h size_t sizeh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j'Qc.kernel_sendmsgasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj%)}(hsizeh]hsize}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubeh}(h]h ]h"]h$]h&]j<j=uh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjPhhhjPhMubah}(h]jPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjPhMhjPhhubjS)}(hhh]jX)}(h.send a message through **sock** (kernel-space)h](hsend a message through }(hjRhhhNhNubj)}(h**sock**h]hsock}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh (kernel-space)}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jRhjPhhhjPhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj Sjxj Sjyjzj{uh1hhhhj[hNhNubj})}(hX^**Parameters** ``struct socket *sock`` socket ``struct msghdr *msg`` message header ``struct kvec *vec`` kernel vec ``size_t num`` vec array length ``size_t size`` total message data size **Description** Builds the message data with **vec** and sends it through **sock**. Returns the number of bytes sent, or an error code.h](jX)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjSubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hj3Sh]hstruct socket *sock}(hj5ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Subah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj-Subj)}(hhh]jX)}(hsocketh]hsocket}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHShMhjISubah}(h]h ]h"]h$]h&]uh1jhj-Subeh}(h]h ]h"]h$]h&]uh1jhjHShMhj*Subj)}(h&``struct msghdr *msg`` message header h](j)}(h``struct msghdr *msg``h]j)}(hjlSh]hstruct msghdr *msg}(hjnShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjSubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjfSubj)}(hhh]jX)}(hmessage headerh]hmessage header}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjfSubeh}(h]h ]h"]h$]h&]uh1jhjShMhj*Subj)}(h ``struct kvec *vec`` kernel vec h](j)}(h``struct kvec *vec``h]j)}(hjSh]hstruct kvec *vec}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjSubj)}(hhh]jX)}(h kernel vech]h kernel vec}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShM hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM hj*Subj)}(h ``size_t num`` vec array length h](j)}(h``size_t num``h]j)}(hjSh]h size_t num}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjSubj)}(hhh]jX)}(hvec array lengthh]hvec array length}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShM hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM hj*Subj)}(h(``size_t size`` total message data size h](j)}(h``size_t size``h]j)}(hjTh]h size_t size}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjTubj)}(hhh]jX)}(htotal message data sizeh]htotal message data size}(hj0ThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,ThM hj-Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj,ThM hj*Subeh}(h]h ]h"]h$]h&]uh1jhjSubjX)}(h**Description**h]j)}(hjRTh]h Description}(hjTThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPTubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjSubj )}(hwBuilds the message data with **vec** and sends it through **sock**. Returns the number of bytes sent, or an error code.h]jX)}(hwBuilds the message data with **vec** and sends it through **sock**. Returns the number of bytes sent, or an error code.h](hBuilds the message data with }(hjlThhhNhNubj)}(h**vec**h]hvec}(hjtThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlTubh and sends it through }(hjlThhhNhNubj)}(h**sock**h]hsock}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlTubh5. Returns the number of bytes sent, or an error code.}(hjlThhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjhTubah}(h]h ]h"]h$]h&]uh1j hjThM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_recvmsg (C function)c.sock_recvmsghNtauh1hhj[hhhNhNubh)}(hhh](h)}(hEint sock_recvmsg (struct socket *sock, struct msghdr *msg, int flags)h]h)}(hDint sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags)h](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM@ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjThhhjThM@ubj)}(h sock_recvmsgh]j%)}(h sock_recvmsgh]h sock_recvmsg}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjThhhjThM@ubj)}(h4(struct socket *sock, struct msghdr *msg, int flags)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hsocketh]hsocket}(hj UhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"UmodnameN classnameNjj!)}j$]j')}jjTsbc.sock_recvmsgasbuh1hhjTubj)}(h h]h }(hj@UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjNUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hsockh]hsock}(hj[UhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(hstruct msghdr *msgh](h)}(hjh]hstruct}(hjtUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpUubh)}(hhh]j%)}(hmsghdrh]hmsghdr}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]jh]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpUubj%)}(hmsgh]hmsg}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(h int flagsh](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj%)}(hflagsh]hflags}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubeh}(h]h ]h"]h$]h&]j<j=uh1jhjThhhjThM@ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjThhhjThM@ubah}(h]jTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThM@hjThhubjS)}(hhh]jX)}(hreceive a message from **sock**h](hreceive a message from }(hj*VhhhNhNubj)}(h**sock**h]hsock}(hj2VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Vubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM@hj'Vhhubah}(h]h ]h"]h$]h&]uh1jRhjThhhjThM@ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjPVjxjPVjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct socket *sock`` socket ``struct msghdr *msg`` message to receive ``int flags`` message flags **Description** Receives **msg** from **sock**, passing through LSM. Returns the total number of bytes received, or an error.h](jX)}(h**Parameters**h]j)}(hjZVh]h Parameters}(hj\VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXVubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMDhjTVubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjyVh]hstruct socket *sock}(hj{VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwVubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMAhjsVubj)}(hhh]jX)}(hsocketh]hsocket}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhMAhjVubah}(h]h ]h"]h$]h&]uh1jhjsVubeh}(h]h ]h"]h$]h&]uh1jhjVhMAhjpVubj)}(h*``struct msghdr *msg`` message to receive h](j)}(h``struct msghdr *msg``h]j)}(hjVh]hstruct msghdr *msg}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMBhjVubj)}(hhh]jX)}(hmessage to receiveh]hmessage to receive}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhMBhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMBhjpVubj)}(h``int flags`` message flags h](j)}(h ``int flags``h]j)}(hjVh]h int flags}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMChjVubj)}(hhh]jX)}(h message flagsh]h message flags}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhMChjWubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjWhMChjpVubeh}(h]h ]h"]h$]h&]uh1jhjTVubjX)}(h**Description**h]j)}(hj&Wh]h Description}(hj(WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Wubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMEhjTVubj )}(hmReceives **msg** from **sock**, passing through LSM. Returns the total number of bytes received, or an error.h]jX)}(hmReceives **msg** from **sock**, passing through LSM. Returns the total number of bytes received, or an error.Ih](h Receives }(hj@WhhhNhNubj)}(h**msg**h]hmsg}(hjHWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Wubh from }(hj@WhhhNhNubj)}(h**sock**h]hsock}(hjZWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@WubhO, passing through LSM. Returns the total number of bytes received, or an error.}(hj@WhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMDhjh]h*}(hj"XhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWubj%)}(hsockh]hsock}(hj/XhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(hstruct msghdr *msgh](h)}(hjh]hstruct}(hjHXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDXubj)}(h h]h }(hjUXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDXubh)}(hhh]j%)}(hmsghdrh]hmsghdr}(hjfXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhXmodnameN classnameNjj!)}j$]jXc.kernel_recvmsgasbuh1hhjDXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDXubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDXubj%)}(hmsgh]hmsg}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(hstruct kvec *vech](h)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubh)}(hhh]j%)}(hkvech]hkvec}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]jXc.kernel_recvmsgasbuh1hhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj;)}(hj>h]h*}(hjYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjXubj%)}(hvech]hvec}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(h size_t numh](h)}(hhh]j%)}(hsize_th]hsize_t}(hj+YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(Yubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-YmodnameN classnameNjj!)}j$]jXc.kernel_recvmsgasbuh1hhj$Yubj)}(h h]h }(hjIYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$Yubj%)}(hnumh]hnum}(hjWYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$Yubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(h size_t sizeh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjsYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjuYmodnameN classnameNjj!)}j$]jXc.kernel_recvmsgasbuh1hhjlYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlYubj%)}(hsizeh]hsize}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(h int flagsh](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(hflagsh]hflags}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubeh}(h]h ]h"]h$]h&]j<j=uh1jhjWhhhjWhMQubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWhhhjWhMQubah}(h]jWah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjWhMQhjWhhubjS)}(hhh]jX)}(h.Receive a message from a socket (kernel space)h]h.Receive a message from a socket (kernel space)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMQhjYhhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjWhMQubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZjxjZjyjzj{uh1hhhhj[hNhNubj})}(hX`**Parameters** ``struct socket *sock`` The socket to receive the message from ``struct msghdr *msg`` Received message ``struct kvec *vec`` Input s/g array for message data ``size_t num`` Size of input s/g array ``size_t size`` Number of bytes to read ``int flags`` Message flags (MSG_DONTWAIT, etc...) **Description** On return the msg structure contains the scatter/gather array passed in the vec argument. The array is modified so that it consists of the unfilled portion of the original array. The returned value is the total number of bytes received, or an error.h](jX)}(h**Parameters**h]j)}(hj Zh]h Parameters}(hj"ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMUhjZubj)}(hhh](j)}(h?``struct socket *sock`` The socket to receive the message from h](j)}(h``struct socket *sock``h]j)}(hj?Zh]hstruct socket *sock}(hjAZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Zubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMRhj9Zubj)}(hhh]jX)}(h&The socket to receive the message fromh]h&The socket to receive the message from}(hjXZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjTZhMRhjUZubah}(h]h ]h"]h$]h&]uh1jhj9Zubeh}(h]h ]h"]h$]h&]uh1jhjTZhMRhj6Zubj)}(h(``struct msghdr *msg`` Received message h](j)}(h``struct msghdr *msg``h]j)}(hjxZh]hstruct msghdr *msg}(hjzZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvZubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMShjrZubj)}(hhh]jX)}(hReceived messageh]hReceived message}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMShjZubah}(h]h ]h"]h$]h&]uh1jhjrZubeh}(h]h ]h"]h$]h&]uh1jhjZhMShj6Zubj)}(h6``struct kvec *vec`` Input s/g array for message data h](j)}(h``struct kvec *vec``h]j)}(hjZh]hstruct kvec *vec}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMThjZubj)}(hhh]jX)}(h Input s/g array for message datah]h Input s/g array for message data}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMThjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMThj6Zubj)}(h'``size_t num`` Size of input s/g array h](j)}(h``size_t num``h]j)}(hjZh]h size_t num}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMUhjZubj)}(hhh]jX)}(hSize of input s/g arrayh]hSize of input s/g array}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMUhj[ubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMUhj6Zubj)}(h(``size_t size`` Number of bytes to read h](j)}(h``size_t size``h]j)}(hj#[h]h size_t size}(hj%[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj![ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMVhj[ubj)}(hhh]jX)}(hNumber of bytes to readh]hNumber of bytes to read}(hj<[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8[hMVhj9[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj8[hMVhj6Zubj)}(h3``int flags`` Message flags (MSG_DONTWAIT, etc...) h](j)}(h ``int flags``h]j)}(hj\[h]h int flags}(hj^[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ[ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMWhjV[ubj)}(hhh]jX)}(h$Message flags (MSG_DONTWAIT, etc...)h]h$Message flags (MSG_DONTWAIT, etc...)}(hju[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjq[hMWhjr[ubah}(h]h ]h"]h$]h&]uh1jhjV[ubeh}(h]h ]h"]h$]h&]uh1jhjq[hMWhj6Zubeh}(h]h ]h"]h$]h&]uh1jhjZubjX)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMYhjZubj )}(hOn return the msg structure contains the scatter/gather array passed in the vec argument. The array is modified so that it consists of the unfilled portion of the original array. The returned value is the total number of bytes received, or an error.h](jX)}(hOn return the msg structure contains the scatter/gather array passed in the vec argument. The array is modified so that it consists of the unfilled portion of the original array.h]hOn return the msg structure contains the scatter/gather array passed in the vec argument. The array is modified so that it consists of the unfilled portion of the original array.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMXhj[ubjX)}(hFThe returned value is the total number of bytes received, or an error.h]hFThe returned value is the total number of bytes received, or an error.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM\hj[ubeh}(h]h ]h"]h$]h&]uh1j hj[hMXhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_create_lite (C function)c.sock_create_litehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hNint sock_create_lite (int family, int type, int protocol, struct socket **res)h]h)}(hMint sock_create_lite(int family, int type, int protocol, struct socket **res)h](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMfubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[hhhj\hMfubj)}(hsock_create_liteh]j%)}(hsock_create_liteh]hsock_create_lite}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj[hhhj\hMfubj)}(h9(int family, int type, int protocol, struct socket **res)h](j)}(h int familyh](j)}(hinth]hint}(hj2\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.\ubj)}(h h]h }(hj@\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.\ubj%)}(hfamilyh]hfamily}(hjN\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*\ubj)}(hint typeh](j)}(hinth]hint}(hjg\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc\ubj)}(h h]h }(hju\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjc\ubj%)}(htypeh]htype}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjc\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*\ubj)}(h int protocolh](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj%)}(hprotocolh]hprotocol}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*\ubj)}(hstruct socket **resh](h)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(hsocketh]hsocket}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj\sbc.sock_create_liteasbuh1hhj\ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj;)}(hj>h]h*}(hj*]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hresh]hres}(hj7]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*\ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj[hhhj\hMfubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj[hhhj\hMfubah}(h]j[ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\hMfhj[hhubjS)}(hhh]jX)}(hcreates a socketh]hcreates a socket}(hja]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMfhj^]hhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhj\hMfubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjy]jxjy]jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``int family`` protocol family (AF_INET, ...) ``int type`` communication type (SOCK_STREAM, ...) ``int protocol`` protocol (0, ...) ``struct socket **res`` new socket **Description** Creates a new socket and assigns it to **res**, passing through LSM. The new socket initialization is not complete, see kernel_accept(). Returns 0 or an error. On failure **res** is set to ``NULL``. This function internally uses GFP_KERNEL.h](jX)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMjhj}]ubj)}(hhh](j)}(h.``int family`` protocol family (AF_INET, ...) h](j)}(h``int family``h]j)}(hj]h]h int family}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMghj]ubj)}(hhh]jX)}(hprotocol family (AF_INET, ...)h]hprotocol family (AF_INET, ...)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMghj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMghj]ubj)}(h3``int type`` communication type (SOCK_STREAM, ...) h](j)}(h ``int type``h]j)}(hj]h]hint type}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhhj]ubj)}(hhh]jX)}(h%communication type (SOCK_STREAM, ...)h]h%communication type (SOCK_STREAM, ...)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhhj]ubj)}(h#``int protocol`` protocol (0, ...) h](j)}(h``int protocol``h]j)}(hj^h]h int protocol}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMihj^ubj)}(hhh]jX)}(hprotocol (0, ...)h]hprotocol (0, ...)}(hj-^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)^hMihj*^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj)^hMihj]ubj)}(h#``struct socket **res`` new socket h](j)}(h``struct socket **res``h]j)}(hjM^h]hstruct socket **res}(hjO^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK^ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMjhjG^ubj)}(hhh]jX)}(h new socketh]h new socket}(hjf^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjb^hMjhjc^ubah}(h]h ]h"]h$]h&]uh1jhjG^ubeh}(h]h ]h"]h$]h&]uh1jhjb^hMjhj]ubeh}(h]h ]h"]h$]h&]uh1jhj}]ubjX)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMlhj}]ubj )}(hCreates a new socket and assigns it to **res**, passing through LSM. The new socket initialization is not complete, see kernel_accept(). Returns 0 or an error. On failure **res** is set to ``NULL``. This function internally uses GFP_KERNEL.h]jX)}(hCreates a new socket and assigns it to **res**, passing through LSM. The new socket initialization is not complete, see kernel_accept(). Returns 0 or an error. On failure **res** is set to ``NULL``. This function internally uses GFP_KERNEL.h](h'Creates a new socket and assigns it to }(hj^hhhNhNubj)}(h**res**h]hres}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh}, passing through LSM. The new socket initialization is not complete, see kernel_accept(). Returns 0 or an error. On failure }(hj^hhhNhNubj)}(h**res**h]hres}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh is set to }(hj^hhhNhNubj)}(h``NULL``h]hNULL}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh+. This function internally uses GFP_KERNEL.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMkhj^ubah}(h]h ]h"]h$]h&]uh1j hj^hMkhj}]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__sock_create (C function)c.__sock_createhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hfint __sock_create (struct net *net, int family, int type, int protocol, struct socket **res, int kern)h]h)}(heint __sock_create(struct net *net, int family, int type, int protocol, struct socket **res, int kern)h](j)}(hinth]hint}(hj _hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj _hhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj _hhhj_hMubj)}(h __sock_createh]j%)}(h __sock_createh]h __sock_create}(hj._hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*_ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj _hhhj_hMubj)}(hT(struct net *net, int family, int type, int protocol, struct socket **res, int kern)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjJ_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjF_ubj)}(h h]h }(hjW_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjF_ubh)}(hhh]j%)}(hneth]hnet}(hjh_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hje_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjj_modnameN classnameNjj!)}j$]j')}jj0_sbc.__sock_createasbuh1hhjF_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjF_ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjF_ubj%)}(hneth]hnet}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubj)}(h int familyh](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(hfamilyh]hfamily}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubj)}(hint typeh](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(htypeh]htype}(hj `hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubj)}(h int protocolh](j)}(hinth]hint}(hj&`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"`ubj)}(h h]h }(hj4`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"`ubj%)}(hprotocolh]hprotocol}(hjB`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubj)}(hstruct socket **resh](h)}(hjh]hstruct}(hj[`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjW`ubj)}(h h]h }(hjh`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW`ubh)}(hhh]j%)}(hsocketh]hsocket}(hjy`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv`ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{`modnameN classnameNjj!)}j$]j_c.__sock_createasbuh1hhjW`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW`ubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjW`ubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjW`ubj%)}(hresh]hres}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubj)}(hint kernh](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj%)}(hkernh]hkern}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjB_ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj _hhhj_hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj_hhhj_hMubah}(h]j_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj_hMhj_hhubjS)}(hhh]jX)}(hcreates a socketh]hcreates a socket}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjahhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhj_hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj6ajxj6ajyjzj{uh1hhhhj[hNhNubj})}(hX.**Parameters** ``struct net *net`` net namespace ``int family`` protocol family (AF_INET, ...) ``int type`` communication type (SOCK_STREAM, ...) ``int protocol`` protocol (0, ...) ``struct socket **res`` new socket ``int kern`` boolean for kernel space sockets **Description** Creates a new socket and assigns it to **res**, passing through LSM. Returns 0 or an error. On failure **res** is set to ``NULL``. **kern** must be set to true if the socket resides in kernel space. This function internally uses GFP_KERNEL.h](jX)}(h**Parameters**h]j)}(hj@ah]h Parameters}(hjBahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>aubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj:aubj)}(hhh](j)}(h"``struct net *net`` net namespace h](j)}(h``struct net *net``h]j)}(hj_ah]hstruct net *net}(hjaahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]aubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjYaubj)}(hhh]jX)}(h net namespaceh]h net namespace}(hjxahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjtahMhjuaubah}(h]h ]h"]h$]h&]uh1jhjYaubeh}(h]h ]h"]h$]h&]uh1jhjtahMhjVaubj)}(h.``int family`` protocol family (AF_INET, ...) h](j)}(h``int family``h]j)}(hjah]h int family}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjaubj)}(hhh]jX)}(hprotocol family (AF_INET, ...)h]hprotocol family (AF_INET, ...)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjVaubj)}(h3``int type`` communication type (SOCK_STREAM, ...) h](j)}(h ``int type``h]j)}(hjah]hint type}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjaubj)}(hhh]jX)}(h%communication type (SOCK_STREAM, ...)h]h%communication type (SOCK_STREAM, ...)}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhjVaubj)}(h#``int protocol`` protocol (0, ...) h](j)}(h``int protocol``h]j)}(hj bh]h int protocol}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjbubj)}(hhh]jX)}(hprotocol (0, ...)h]hprotocol (0, ...)}(hj#bhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMhj bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjVaubj)}(h#``struct socket **res`` new socket h](j)}(h``struct socket **res``h]j)}(hjCbh]hstruct socket **res}(hjEbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj=bubj)}(hhh]jX)}(h new socketh]h new socket}(hj\bhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXbhMhjYbubah}(h]h ]h"]h$]h&]uh1jhj=bubeh}(h]h ]h"]h$]h&]uh1jhjXbhMhjVaubj)}(h.``int kern`` boolean for kernel space sockets h](j)}(h ``int kern``h]j)}(hj|bh]hint kern}(hj~bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzbubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjvbubj)}(hhh]jX)}(h boolean for kernel space socketsh]h boolean for kernel space sockets}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjvbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjVaubeh}(h]h ]h"]h$]h&]uh1jhj:aubjX)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj:aubj )}(hCreates a new socket and assigns it to **res**, passing through LSM. Returns 0 or an error. On failure **res** is set to ``NULL``. **kern** must be set to true if the socket resides in kernel space. This function internally uses GFP_KERNEL.h]jX)}(hCreates a new socket and assigns it to **res**, passing through LSM. Returns 0 or an error. On failure **res** is set to ``NULL``. **kern** must be set to true if the socket resides in kernel space. This function internally uses GFP_KERNEL.h](h'Creates a new socket and assigns it to }(hjbhhhNhNubj)}(h**res**h]hres}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh9, passing through LSM. Returns 0 or an error. On failure }(hjbhhhNhNubj)}(h**res**h]hres}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh is set to }(hjbhhhNhNubj)}(h``NULL``h]hNULL}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh. }(hjbhhhNhNubj)}(h**kern**h]hkern}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubhe must be set to true if the socket resides in kernel space. This function internally uses GFP_KERNEL.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjbubah}(h]h ]h"]h$]h&]uh1j hj'chMhj:aubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_create (C function) c.sock_createhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hIint sock_create (int family, int type, int protocol, struct socket **res)h]h)}(hHint sock_create(int family, int type, int protocol, struct socket **res)h](j)}(hinth]hint}(hjNchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJchhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMsubj)}(h h]h }(hj]chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJchhhj\chMsubj)}(h sock_createh]j%)}(h sock_createh]h sock_create}(hjochhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjJchhhj\chMsubj)}(h9(int family, int type, int protocol, struct socket **res)h](j)}(h int familyh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj%)}(hfamilyh]hfamily}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(hint typeh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj%)}(htypeh]htype}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(h int protocolh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj%)}(hprotocolh]hprotocol}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(hstruct socket **resh](h)}(hjh]hstruct}(hj*dhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&dubj)}(h h]h }(hj7dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&dubh)}(hhh]j%)}(hsocketh]hsocket}(hjHdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJdmodnameN classnameNjj!)}j$]j')}jjqcsb c.sock_createasbuh1hhj&dubj)}(h h]h }(hjhdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&dubj;)}(hj>h]h*}(hjvdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&dubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&dubj%)}(hresh]hres}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&dubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubeh}(h]h ]h"]h$]h&]j<j=uh1jhjJchhhj\chMsubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjFchhhj\chMsubah}(h]jAcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\chMshjCchhubjS)}(hhh]jX)}(hcreates a socketh]hcreates a socket}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMshjdhhubah}(h]h ]h"]h$]h&]uh1jRhjCchhhj\chMsubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhj[hNhNubj})}(hX@**Parameters** ``int family`` protocol family (AF_INET, ...) ``int type`` communication type (SOCK_STREAM, ...) ``int protocol`` protocol (0, ...) ``struct socket **res`` new socket **Description** A wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h](jX)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMwhjdubj)}(hhh](j)}(h.``int family`` protocol family (AF_INET, ...) h](j)}(h``int family``h]j)}(hjdh]h int family}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMthjdubj)}(hhh]jX)}(hprotocol family (AF_INET, ...)h]hprotocol family (AF_INET, ...)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMthjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjehMthjdubj)}(h3``int type`` communication type (SOCK_STREAM, ...) h](j)}(h ``int type``h]j)}(hj4eh]hint type}(hj6ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2eubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMuhj.eubj)}(hhh]jX)}(h%communication type (SOCK_STREAM, ...)h]h%communication type (SOCK_STREAM, ...)}(hjMehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIehMuhjJeubah}(h]h ]h"]h$]h&]uh1jhj.eubeh}(h]h ]h"]h$]h&]uh1jhjIehMuhjdubj)}(h#``int protocol`` protocol (0, ...) h](j)}(h``int protocol``h]j)}(hjmeh]h int protocol}(hjoehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMvhjgeubj)}(hhh]jX)}(hprotocol (0, ...)h]hprotocol (0, ...)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMvhjeubah}(h]h ]h"]h$]h&]uh1jhjgeubeh}(h]h ]h"]h$]h&]uh1jhjehMvhjdubj)}(h#``struct socket **res`` new socket h](j)}(h``struct socket **res``h]j)}(hjeh]hstruct socket **res}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMwhjeubj)}(hhh]jX)}(h new socketh]h new socket}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMwhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMwhjdubeh}(h]h ]h"]h$]h&]uh1jhjdubjX)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMyhjdubj )}(hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h]jX)}(hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h]hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMxhjeubah}(h]h ]h"]h$]h&]uh1j hj fhMxhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_create_kern (C function)c.sock_create_kernhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_int sock_create_kern (struct net *net, int family, int type, int protocol, struct socket **res)h]h)}(h^int sock_create_kern(struct net *net, int family, int type, int protocol, struct socket **res)h](j)}(hinth]hint}(hj0fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,fhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hj?fhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,fhhhj>fhMubj)}(hsock_create_kernh]j%)}(hsock_create_kernh]hsock_create_kern}(hjQfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMfubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj,fhhhj>fhMubj)}(hJ(struct net *net, int family, int type, int protocol, struct socket **res)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjmfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjifubj)}(h h]h }(hjzfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjifubh)}(hhh]j%)}(hneth]hnet}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jjSfsbc.sock_create_kernasbuh1hhjifubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjifubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjifubj%)}(hneth]hnet}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjifubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjefubj)}(h int familyh](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj%)}(hfamilyh]hfamily}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjefubj)}(hint typeh](j)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hj"ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj%)}(htypeh]htype}(hj0ghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjefubj)}(h int protocolh](j)}(hinth]hint}(hjIghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEgubj)}(h h]h }(hjWghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEgubj%)}(hprotocolh]hprotocol}(hjeghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjefubj)}(hstruct socket **resh](h)}(hjh]hstruct}(hj~ghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzgubh)}(hhh]j%)}(hsocketh]hsocket}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]jfc.sock_create_kernasbuh1hhjzgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzgubj%)}(hresh]hres}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjefubeh}(h]h ]h"]h$]h&]j<j=uh1jhj,fhhhj>fhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj(fhhhj>fhMubah}(h]j#fah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>fhMhj%fhhubjS)}(hhh]jX)}(hcreates a socket (kernel space)h]hcreates a socket (kernel space)}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj hhhubah}(h]h ]h"]h$]h&]uh1jRhj%fhhhj>fhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$hjxj$hjyjzj{uh1hhhhj[hNhNubj})}(hXe**Parameters** ``struct net *net`` net namespace ``int family`` protocol family (AF_INET, ...) ``int type`` communication type (SOCK_STREAM, ...) ``int protocol`` protocol (0, ...) ``struct socket **res`` new socket **Description** A wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h](jX)}(h**Parameters**h]j)}(hj.hh]h Parameters}(hj0hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,hubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj(hubj)}(hhh](j)}(h"``struct net *net`` net namespace h](j)}(h``struct net *net``h]j)}(hjMhh]hstruct net *net}(hjOhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjGhubj)}(hhh]jX)}(h net namespaceh]h net namespace}(hjfhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhhMhjchubah}(h]h ]h"]h$]h&]uh1jhjGhubeh}(h]h ]h"]h$]h&]uh1jhjbhhMhjDhubj)}(h.``int family`` protocol family (AF_INET, ...) h](j)}(h``int family``h]j)}(hjhh]h int family}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjhubj)}(hhh]jX)}(hprotocol family (AF_INET, ...)h]hprotocol family (AF_INET, ...)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjDhubj)}(h3``int type`` communication type (SOCK_STREAM, ...) h](j)}(h ``int type``h]j)}(hjhh]hint type}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjhubj)}(hhh]jX)}(h%communication type (SOCK_STREAM, ...)h]h%communication type (SOCK_STREAM, ...)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjDhubj)}(h#``int protocol`` protocol (0, ...) h](j)}(h``int protocol``h]j)}(hjhh]h int protocol}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjhubj)}(hhh]jX)}(hprotocol (0, ...)h]hprotocol (0, ...)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ihMhjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj ihMhjDhubj)}(h#``struct socket **res`` new socket h](j)}(h``struct socket **res``h]j)}(hj1ih]hstruct socket **res}(hj3ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/iubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj+iubj)}(hhh]jX)}(h new socketh]h new socket}(hjJihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFihMhjGiubah}(h]h ]h"]h$]h&]uh1jhj+iubeh}(h]h ]h"]h$]h&]uh1jhjFihMhjDhubeh}(h]h ]h"]h$]h&]uh1jhj(hubjX)}(h**Description**h]j)}(hjlih]h Description}(hjnihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjiubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhj(hubj )}(hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h]jX)}(hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.h]hbA wrapper around __sock_create(). Returns 0 or an error. This function internally uses GFP_KERNEL.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjiubah}(h]h ]h"]h$]h&]uh1j hjihMhj(hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_register (C function)c.sock_registerhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6int sock_register (const struct net_proto_family *ops)h]h)}(h5int sock_register(const struct net_proto_family *ops)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhhjihM ubj)}(h sock_registerh]j%)}(h sock_registerh]h sock_register}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjihhhjihM ubj)}(h$(const struct net_proto_family *ops)h]j)}(h"const struct net_proto_family *opsh](h)}(hjh]hconst}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hnet_proto_familyh]hnet_proto_family}(hj1jhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.jubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3jmodnameN classnameNjj!)}j$]j')}jjisbc.sock_registerasbuh1hhjiubj)}(h h]h }(hjQjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hj_jhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hopsh]hops}(hjljhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubah}(h]h ]h"]h$]h&]j<j=uh1jhjihhhjihM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjihhhjihM ubah}(h]jiah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjihM hjihhubjS)}(hhh]jX)}(hadd a socket protocol handlerh]hadd a socket protocol handler}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjjhhubah}(h]h ]h"]h$]h&]uh1jRhjihhhjihM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhj[hNhNubj})}(hXK**Parameters** ``const struct net_proto_family *ops`` description of protocol **Description** This function is called by a protocol handler that wants to advertise its address family, and have it linked into the socket interface. The value ops->family corresponds to the socket system call protocol family.h](jX)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjjubj)}(hhh]j)}(h?``const struct net_proto_family *ops`` description of protocol h](j)}(h&``const struct net_proto_family *ops``h]j)}(hjjh]h"const struct net_proto_family *ops}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjjubj)}(hhh]jX)}(hdescription of protocolh]hdescription of protocol}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhM hjjubah}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjjubj )}(hThis function is called by a protocol handler that wants to advertise its address family, and have it linked into the socket interface. The value ops->family corresponds to the socket system call protocol family.h]jX)}(hThis function is called by a protocol handler that wants to advertise its address family, and have it linked into the socket interface. The value ops->family corresponds to the socket system call protocol family.h]hThis function is called by a protocol handler that wants to advertise its address family, and have it linked into the socket interface. The value ops->family corresponds to the socket system call protocol family.}(hj,khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj(kubah}(h]h ]h"]h$]h&]uh1j hj:khM hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsock_unregister (C function)c.sock_unregisterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h!void sock_unregister (int family)h]h)}(h void sock_unregister(int family)h](j)}(hvoidh]hvoid}(hjakhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]khhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hjpkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]khhhjokhM ubj)}(hsock_unregisterh]j%)}(hsock_unregisterh]hsock_unregister}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~kubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]khhhjokhM ubj)}(h (int family)h]j)}(h int familyh](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj%)}(hfamilyh]hfamily}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubah}(h]h ]h"]h$]h&]j<j=uh1jhj]khhhjokhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYkhhhjokhM ubah}(h]jTkah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjokhM hjVkhhubjS)}(hhh]jX)}(hremove a protocol handlerh]hremove a protocol handler}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjkhhubah}(h]h ]h"]h$]h&]uh1jRhjVkhhhjokhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjkjxjkjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``int family`` protocol family to remove **Description** This function is called by a protocol handler that wants to remove its address family, and have it unlinked from the new socket creation. If protocol handler is a module, then it can use module reference counts to protect against new references. If protocol handler is not a module then it needs to provide its own protection in the ops->create routine.h](jX)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjlubj)}(hhh]j)}(h)``int family`` protocol family to remove h](j)}(h``int family``h]j)}(hj%lh]h int family}(hj'lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#lubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjlubj)}(hhh]jX)}(hprotocol family to removeh]hprotocol family to remove}(hj>lhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:lhM hj;lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj:lhM hjlubah}(h]h ]h"]h$]h&]uh1jhjlubjX)}(h**Description**h]j)}(hj`lh]h Description}(hjblhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^lubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjlubj )}(hXbThis function is called by a protocol handler that wants to remove its address family, and have it unlinked from the new socket creation. If protocol handler is a module, then it can use module reference counts to protect against new references. If protocol handler is not a module then it needs to provide its own protection in the ops->create routine.h](jX)}(hThis function is called by a protocol handler that wants to remove its address family, and have it unlinked from the new socket creation.h]hThis function is called by a protocol handler that wants to remove its address family, and have it unlinked from the new socket creation.}(hjzlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjvlubjX)}(hIf protocol handler is a module, then it can use module reference counts to protect against new references. If protocol handler is not a module then it needs to provide its own protection in the ops->create routine.h]hIf protocol handler is a module, then it can use module reference counts to protect against new references. If protocol handler is not a module then it needs to provide its own protection in the ops->create routine.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjvlubeh}(h]h ]h"]h$]h&]uh1j hjlhM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_bind (C function) c.kernel_bindhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hQint kernel_bind (struct socket *sock, struct sockaddr_unsized *addr, int addrlen)h]h)}(hPint kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen)h](j)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhjlhM ubj)}(h kernel_bindh]j%)}(h kernel_bindh]h kernel_bind}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjlhhhjlhM ubj)}(hA(struct socket *sock, struct sockaddr_unsized *addr, int addrlen)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(hhh]j%)}(hsocketh]hsocket}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j')}jjlsb c.kernel_bindasbuh1hhjlubj)}(h h]h }(hj9mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj;)}(hj>h]h*}(hjGmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubj%)}(hsockh]hsock}(hjTmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hstruct sockaddr_unsized *addrh](h)}(hjh]hstruct}(hjmmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjimubj)}(h h]h }(hjzmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjimubh)}(hhh]j%)}(hsockaddr_unsizedh]hsockaddr_unsized}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j5m c.kernel_bindasbuh1hhjimubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjimubj;)}(hj>h]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjimubj%)}(haddrh]haddr}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjimubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(h int addrlenh](j)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj%)}(haddrlenh]haddrlen}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubeh}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhjlhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjlhM ubah}(h]jlah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlhM hjlhhubjS)}(hhh]jX)}(h*bind an address to a socket (kernel space)h]h*bind an address to a socket (kernel space)}(hj#nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj nhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjlhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;njxj;njyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket ``struct sockaddr_unsized *addr`` address ``int addrlen`` length of address **Description** Returns 0 or an error.Eh](jX)}(h**Parameters**h]j)}(hjEnh]h Parameters}(hjGnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCnubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj?nubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjdnh]hstruct socket *sock}(hjfnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj^nubj)}(hhh]jX)}(hsocketh]hsocket}(hj}nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjynhM hjznubah}(h]h ]h"]h$]h&]uh1jhj^nubeh}(h]h ]h"]h$]h&]uh1jhjynhM hj[nubj)}(h*``struct sockaddr_unsized *addr`` address h](j)}(h!``struct sockaddr_unsized *addr``h]j)}(hjnh]hstruct sockaddr_unsized *addr}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjnubj)}(hhh]jX)}(haddressh]haddress}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hj[nubj)}(h"``int addrlen`` length of address h](j)}(h``int addrlen``h]j)}(hjnh]h int addrlen}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjnubj)}(hhh]jX)}(hlength of addressh]hlength of address}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhM hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhM hj[nubeh}(h]h ]h"]h$]h&]uh1jhj?nubjX)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj?nubj )}(hReturns 0 or an error.h]jX)}(hj)oh]hReturns 0 or an error.}(hj+ohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj'oubah}(h]h ]h"]h$]h&]uh1j hj8ohM hj?nubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_listen (C function)c.kernel_listenhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4int kernel_listen (struct socket *sock, int backlog)h]h)}(h3int kernel_listen(struct socket *sock, int backlog)h](j)}(hinth]hint}(hj_ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ohhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hjnohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ohhhjmohM ubj)}(h kernel_listenh]j%)}(h kernel_listenh]h kernel_listen}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|oubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj[ohhhjmohM ubj)}(h"(struct socket *sock, int backlog)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubh)}(hhh]j%)}(hsocketh]hsocket}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]j')}jjosbc.kernel_listenasbuh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hsockh]hsock}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjoubj)}(h int backlogh](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj pubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj pubj%)}(hbacklogh]hbacklog}(hj*phhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj pubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjoubeh}(h]h ]h"]h$]h&]j<j=uh1jhj[ohhhjmohM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWohhhjmohM ubah}(h]jRoah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjmohM hjTohhubjS)}(hhh]jX)}(h-move socket to listening state (kernel space)h]h-move socket to listening state (kernel space)}(hjTphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjQphhubah}(h]h ]h"]h$]h&]uh1jRhjTohhhjmohM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjlpjxjlpjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket ``int backlog`` pending connections queue size **Description** Returns 0 or an error.h](jX)}(h**Parameters**h]j)}(hjvph]h Parameters}(hjxphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtpubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjppubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjph]hstruct socket *sock}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjpubj)}(hhh]jX)}(hsocketh]hsocket}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM hjpubj)}(h/``int backlog`` pending connections queue size h](j)}(h``int backlog``h]j)}(hjph]h int backlog}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjpubj)}(hhh]jX)}(hpending connections queue sizeh]hpending connections queue size}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphM hjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphM hjpubeh}(h]h ]h"]h$]h&]uh1jhjppubjX)}(h**Description**h]j)}(hj qh]h Description}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjppubj )}(hReturns 0 or an error.h]jX)}(hj!qh]hReturns 0 or an error.}(hj#qhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjqubah}(h]h ]h"]h$]h&]uh1j hj0qhM hjppubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_accept (C function)c.kernel_accepthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hKint kernel_accept (struct socket *sock, struct socket **newsock, int flags)h]h)}(hJint kernel_accept(struct socket *sock, struct socket **newsock, int flags)h](j)}(hinth]hint}(hjWqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSqhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM ubj)}(h h]h }(hjfqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSqhhhjeqhM ubj)}(h kernel_accepth]j%)}(h kernel_accepth]h kernel_accept}(hjxqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtqubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjSqhhhjeqhM ubj)}(h9(struct socket *sock, struct socket **newsock, int flags)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubh)}(hhh]j%)}(hsocketh]hsocket}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqmodnameN classnameNjj!)}j$]j')}jjzqsbc.kernel_acceptasbuh1hhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjqubj%)}(hsockh]hsock}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjqubj)}(hstruct socket **newsockh](h)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hsocketh]hsocket}(hj$rhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!rubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&rmodnameN classnameNjj!)}j$]jqc.kernel_acceptasbuh1hhjrubj)}(h h]h }(hjBrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjPrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hj>h]h*}(hj]rhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hnewsockh]hnewsock}(hjjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjqubj)}(h int flagsh](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj%)}(hflagsh]hflags}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjqubeh}(h]h ]h"]h$]h&]j<j=uh1jhjSqhhhjeqhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOqhhhjeqhM ubah}(h]jJqah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjeqhM hjLqhhubjS)}(hhh]jX)}(h"accept a connection (kernel space)h]h"accept a connection (kernel space)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjrhhubah}(h]h ]h"]h$]h&]uh1jRhjLqhhhjeqhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjrjxjrjyjzj{uh1hhhhj[hNhNubj})}(hX(**Parameters** ``struct socket *sock`` listening socket ``struct socket **newsock`` new connected socket ``int flags`` flags **Description** **flags** must be SOCK_CLOEXEC, SOCK_NONBLOCK or 0. If it fails, **newsock** is guaranteed to be ``NULL``. Returns 0 or an error.h](jX)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjrubj)}(hhh](j)}(h)``struct socket *sock`` listening socket h](j)}(h``struct socket *sock``h]j)}(hj sh]hstruct socket *sock}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjsubj)}(hhh]jX)}(hlistening socketh]hlistening socket}(hj#shhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshM hj subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubj)}(h1``struct socket **newsock`` new connected socket h](j)}(h``struct socket **newsock``h]j)}(hjCsh]hstruct socket **newsock}(hjEshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj=subj)}(hhh]jX)}(hnew connected socketh]hnew connected socket}(hj\shhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXshM hjYsubah}(h]h ]h"]h$]h&]uh1jhj=subeh}(h]h ]h"]h$]h&]uh1jhjXshM hjsubj)}(h``int flags`` flags h](j)}(h ``int flags``h]j)}(hj|sh]h int flags}(hj~shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzsubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjvsubj)}(hhh]jX)}(hflagsh]hflags}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjvsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubeh}(h]h ]h"]h$]h&]uh1jhjrubjX)}(h**Description**h]j)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjrubj )}(h**flags** must be SOCK_CLOEXEC, SOCK_NONBLOCK or 0. If it fails, **newsock** is guaranteed to be ``NULL``. Returns 0 or an error.h]jX)}(h**flags** must be SOCK_CLOEXEC, SOCK_NONBLOCK or 0. If it fails, **newsock** is guaranteed to be ``NULL``. Returns 0 or an error.h](j)}(h **flags**h]hflags}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh8 must be SOCK_CLOEXEC, SOCK_NONBLOCK or 0. If it fails, }(hjshhhNhNubj)}(h **newsock**h]hnewsock}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh is guaranteed to be }(hjshhhNhNubj)}(h``NULL``h]hNULL}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh. Returns 0 or an error.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hjsubah}(h]h ]h"]h$]h&]uh1j hjthM hjrubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_connect (C function)c.kernel_connecthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h_int kernel_connect (struct socket *sock, struct sockaddr_unsized *addr, int addrlen, int flags)h]h)}(h^int kernel_connect(struct socket *sock, struct sockaddr_unsized *addr, int addrlen, int flags)h](j)}(hinth]hint}(hj8thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4thhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMubj)}(h h]h }(hjGthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4thhhjFthMubj)}(hkernel_connecth]j%)}(hkernel_connecth]hkernel_connect}(hjYthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj4thhhjFthMubj)}(hL(struct socket *sock, struct sockaddr_unsized *addr, int addrlen, int flags)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjuthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjqtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqtubh)}(hhh]j%)}(hsocketh]hsocket}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j')}jj[tsbc.kernel_connectasbuh1hhjqtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqtubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjqtubj%)}(hsockh]hsock}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjmtubj)}(hstruct sockaddr_unsized *addrh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubh)}(hhh]j%)}(hsockaddr_unsizedh]hsockaddr_unsized}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]jtc.kernel_connectasbuh1hhjtubj)}(h h]h }(hj#uhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hj1uhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(haddrh]haddr}(hj>uhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjmtubj)}(h int addrlenh](j)}(hinth]hint}(hjWuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSuubj)}(h h]h }(hjeuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSuubj%)}(haddrlenh]haddrlen}(hjsuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjmtubj)}(h int flagsh](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj%)}(hflagsh]hflags}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjmtubeh}(h]h ]h"]h$]h&]j<j=uh1jhj4thhhjFthMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0thhhjFthMubah}(h]j+tah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjFthMhj-thhubjS)}(hhh]jX)}(hconnect a socket (kernel space)h]hconnect a socket (kernel space)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhjuhhubah}(h]h ]h"]h$]h&]uh1jRhj-thhhjFthMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjujxjujyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct socket *sock`` socket ``struct sockaddr_unsized *addr`` address ``int addrlen`` address length ``int flags`` flags (O_NONBLOCK, ...) **Description** For datagram sockets, **addr** is the address to which datagrams are sent by default, and the only address from which datagrams are received. For stream sockets, attempts to connect to **addr**. Returns 0 or an error code.h](jX)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM#hjuubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjvh]hstruct socket *sock}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM hj vubj)}(hhh]jX)}(hsocketh]hsocket}(hj,vhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(vhM hj)vubah}(h]h ]h"]h$]h&]uh1jhj vubeh}(h]h ]h"]h$]h&]uh1jhj(vhM hj vubj)}(h*``struct sockaddr_unsized *addr`` address h](j)}(h!``struct sockaddr_unsized *addr``h]j)}(hjLvh]hstruct sockaddr_unsized *addr}(hjNvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM!hjFvubj)}(hhh]jX)}(haddressh]haddress}(hjevhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjavhM!hjbvubah}(h]h ]h"]h$]h&]uh1jhjFvubeh}(h]h ]h"]h$]h&]uh1jhjavhM!hj vubj)}(h``int addrlen`` address length h](j)}(h``int addrlen``h]j)}(hjvh]h int addrlen}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM"hjvubj)}(hhh]jX)}(haddress lengthh]haddress length}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhM"hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM"hj vubj)}(h&``int flags`` flags (O_NONBLOCK, ...) h](j)}(h ``int flags``h]j)}(hjvh]h int flags}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM#hjvubj)}(hhh]jX)}(hflags (O_NONBLOCK, ...)h]hflags (O_NONBLOCK, ...)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhM#hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM#hj vubeh}(h]h ]h"]h$]h&]uh1jhjuubjX)}(h**Description**h]j)}(hjvh]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM%hjuubj )}(hFor datagram sockets, **addr** is the address to which datagrams are sent by default, and the only address from which datagrams are received. For stream sockets, attempts to connect to **addr**. Returns 0 or an error code.h]jX)}(hFor datagram sockets, **addr** is the address to which datagrams are sent by default, and the only address from which datagrams are received. For stream sockets, attempts to connect to **addr**. Returns 0 or an error code.h](hFor datagram sockets, }(hjwhhhNhNubj)}(h**addr**h]haddr}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh is the address to which datagrams are sent by default, and the only address from which datagrams are received. For stream sockets, attempts to connect to }(hjwhhhNhNubj)}(h**addr**h]haddr}(hj-whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh. Returns 0 or an error code.}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM$hjwubah}(h]h ]h"]h$]h&]uh1j hjEwhM$hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_getsockname (C function)c.kernel_getsocknamehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hCint kernel_getsockname (struct socket *sock, struct sockaddr *addr)h]h)}(hBint kernel_getsockname(struct socket *sock, struct sockaddr *addr)h](j)}(hinth]hint}(hjlwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhwhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM8ubj)}(h h]h }(hj{whhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhwhhhjzwhM8ubj)}(hkernel_getsocknameh]j%)}(hkernel_getsocknameh]hkernel_getsockname}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhwhhhjzwhM8ubj)}(h,(struct socket *sock, struct sockaddr *addr)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubh)}(hhh]j%)}(hsocketh]hsocket}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwmodnameN classnameNjj!)}j$]j')}jjwsbc.kernel_getsocknameasbuh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hsockh]hsock}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjwubj)}(hstruct sockaddr *addrh](h)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hj(xhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hj9xhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6xubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;xmodnameN classnameNjj!)}j$]jwc.kernel_getsocknameasbuh1hhjxubj)}(h h]h }(hjWxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hjexhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(haddrh]haddr}(hjrxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjwubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhwhhhjzwhM8ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdwhhhjzwhM8ubah}(h]j_wah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjzwhM8hjawhhubjS)}(hhh]jX)}(h8get the address which the socket is bound (kernel space)h]h8get the address which the socket is bound (kernel space)}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM8hjxhhubah}(h]h ]h"]h$]h&]uh1jRhjawhhhjzwhM8ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjxjxjxjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket ``struct sockaddr *addr`` address holder **Description** Fills the **addr** pointer with the address which the socket is bound. Returns the length of the address in bytes or an error code.h](jX)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM<hjxubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjxh]hstruct socket *sock}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM9hjxubj)}(hhh]jX)}(hsocketh]hsocket}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM9hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM9hjxubj)}(h)``struct sockaddr *addr`` address holder h](j)}(h``struct sockaddr *addr``h]j)}(hjyh]hstruct sockaddr *addr}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM:hjyubj)}(hhh]jX)}(haddress holderh]haddress holder}(hj/yhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+yhM:hj,yubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj+yhM:hjxubeh}(h]h ]h"]h$]h&]uh1jhjxubjX)}(h**Description**h]j)}(hjQyh]h Description}(hjSyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOyubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM<hjxubj )}(hFills the **addr** pointer with the address which the socket is bound. Returns the length of the address in bytes or an error code.h]jX)}(hFills the **addr** pointer with the address which the socket is bound. Returns the length of the address in bytes or an error code.h](h Fills the }(hjkyhhhNhNubj)}(h**addr**h]haddr}(hjsyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkyubhq pointer with the address which the socket is bound. Returns the length of the address in bytes or an error code.}(hjkyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chM;hjgyubah}(h]h ]h"]h$]h&]uh1j hjyhM;hjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkernel_getpeername (C function)c.kernel_getpeernamehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hCint kernel_getpeername (struct socket *sock, struct sockaddr *addr)h]h)}(hBint kernel_getpeername(struct socket *sock, struct sockaddr *addr)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMGubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjyhMGubj)}(hkernel_getpeernameh]j%)}(hkernel_getpeernameh]hkernel_getpeername}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjyhMGubj)}(h,(struct socket *sock, struct sockaddr *addr)h](j)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(hsocketh]hsocket}(hj zhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj zubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]j')}jjysbc.kernel_getpeernameasbuh1hhjyubj)}(h h]h }(hj-zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hj;zhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hsockh]hsock}(hjHzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubj)}(hstruct sockaddr *addrh](h)}(hjh]hstruct}(hjazhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]zubj)}(h h]h }(hjnzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]zubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|zubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]j)zc.kernel_getpeernameasbuh1hhj]zubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]zubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]zubj%)}(haddrh]haddr}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]zubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjyhMGubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjyhhhjyhMGubah}(h]jyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMGhjyhhubjS)}(hhh]jX)}(hh]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1|ubj%)}(hsockh]hsock}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-|ubj)}(henum sock_shutdown_cmd howh](h)}(hhh]henum}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubh)}(hhh]j%)}(hsock_shutdown_cmdh]hsock_shutdown_cmd}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]jo|c.kernel_sock_shutdownasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj%)}(hhowh]hhow}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhj|hMVubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{hhhj|hMVubah}(h]j{ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMVhj{hhubjS)}(hhh]jX)}(h9shut down part of a full-duplex connection (kernel space)h]h9shut down part of a full-duplex connection (kernel space)}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMVhj}hhubah}(h]h ]h"]h$]h&]uh1jRhj{hhhj|hMVubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3}jxj3}jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct socket *sock`` socket ``enum sock_shutdown_cmd how`` connection part **Description** Returns 0 or an error.h](jX)}(h**Parameters**h]j)}(hj=}h]h Parameters}(hj?}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;}ubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMZhj7}ubj)}(hhh](j)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hj\}h]hstruct socket *sock}(hj^}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ}ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMWhjV}ubj)}(hhh]jX)}(hsocketh]hsocket}(hju}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjq}hMWhjr}ubah}(h]h ]h"]h$]h&]uh1jhjV}ubeh}(h]h ]h"]h$]h&]uh1jhjq}hMWhjS}ubj)}(h/``enum sock_shutdown_cmd how`` connection part h](j)}(h``enum sock_shutdown_cmd how``h]j)}(hj}h]henum sock_shutdown_cmd how}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMXhj}ubj)}(hhh]jX)}(hconnection parth]hconnection part}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMXhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMXhjS}ubeh}(h]h ]h"]h$]h&]uh1jhj7}ubjX)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMZhj7}ubj )}(hReturns 0 or an error.h]jX)}(hj}h]hReturns 0 or an error.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMYhj}ubah}(h]h ]h"]h$]h&]uh1j hj}hMYhj7}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$kernel_sock_ip_overhead (C function)c.kernel_sock_ip_overheadhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h-u32 kernel_sock_ip_overhead (struct sock *sk)h]h)}(h,u32 kernel_sock_ip_overhead(struct sock *sk)h](h)}(hhh]j%)}(hu32h]hu32}(hj!~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj#~modnameN classnameNjj!)}j$]j')}jkernel_sock_ip_overheadsbc.kernel_sock_ip_overheadasbuh1hhj~hhhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMdubj)}(h h]h }(hjC~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~hhhjB~hMdubj)}(hkernel_sock_ip_overheadh]j%)}(hj?~h]hkernel_sock_ip_overhead}(hjU~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQ~ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj~hhhjB~hMdubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](h)}(hjh]hstruct}(hjp~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjl~ubj)}(h h]h }(hj}~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl~ubh)}(hhh]j%)}(hsockh]hsock}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j=~c.kernel_sock_ip_overheadasbuh1hhjl~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl~ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjl~ubj%)}(hskh]hsk}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjl~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjh~ubah}(h]h ]h"]h$]h&]j<j=uh1jhj~hhhjB~hMdubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~hhhjB~hMdubah}(h]j~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjB~hMdhj~hhubjS)}(hhh]jX)}(h+returns the IP overhead imposed by a socketh]h+returns the IP overhead imposed by a socket}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMdhj~hhubah}(h]h ]h"]h$]h&]uh1jRhj~hhhjB~hMdubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(hXV**Parameters** ``struct sock *sk`` socket **Description** This routine returns the IP overhead imposed by a socket i.e. the length of the underlying IP header, depending on whether this is an IPv4 or IPv6 socket and the length from IP options turned on at the socket. Assumes that the caller has a lock on the socket.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMhhj ubj)}(hhh]j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hj2h]hstruct sock *sk}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMehj,ubj)}(hhh]jX)}(hsocketh]hsocket}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhMehjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMehj)ubah}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMghj ubj )}(hXThis routine returns the IP overhead imposed by a socket i.e. the length of the underlying IP header, depending on whether this is an IPv4 or IPv6 socket and the length from IP options turned on at the socket. Assumes that the caller has a lock on the socket.h]jX)}(hXThis routine returns the IP overhead imposed by a socket i.e. the length of the underlying IP header, depending on whether this is an IPv4 or IPv6 socket and the length from IP options turned on at the socket. Assumes that the caller has a lock on the socket.h]hXThis routine returns the IP overhead imposed by a socket i.e. the length of the underlying IP header, depending on whether this is an IPv4 or IPv6 socket and the length from IP options turned on at the socket. Assumes that the caller has a lock on the socket.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhL/var/lib/git/docbuild/linux/Documentation/networking/kapi:23: ./net/socket.chMfhjubah}(h]h ]h"]h$]h&]uh1j hjhMfhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)drop_reasons_register_subsys (C function)c.drop_reasons_register_subsyshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hkvoid drop_reasons_register_subsys (enum skb_drop_reason_subsys subsys, const struct drop_reason_list *list)h]h)}(hjvoid drop_reasons_register_subsys(enum skb_drop_reason_subsys subsys, const struct drop_reason_list *list)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hdrop_reasons_register_subsysh]j%)}(hdrop_reasons_register_subsysh]hdrop_reasons_register_subsys}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(hI(enum skb_drop_reason_subsys subsys, const struct drop_reason_list *list)h](j)}(h"enum skb_drop_reason_subsys subsysh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_drop_reason_subsysh]hskb_drop_reason_subsys}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.drop_reasons_register_subsysasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsubsysh]hsubsys}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h#const struct drop_reason_list *listh](h)}(hjh]hconst}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hhh]j%)}(hdrop_reason_listh]hdrop_reason_list}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j3c.drop_reasons_register_subsysasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj;)}(hj>h]h*}(hjÀhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj%)}(hlisth]hlist}(hjЀhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h®ister another drop reason subsystemh]h®ister another drop reason subsystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``enum skb_drop_reason_subsys subsys`` the subsystem to register, must not be the core ``const struct drop_reason_list *list`` the list of drop reasons within the subsystem, must point to a statically initialized listh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjubj)}(hhh](j)}(hW``enum skb_drop_reason_subsys subsys`` the subsystem to register, must not be the core h](j)}(h&``enum skb_drop_reason_subsys subsys``h]j)}(hj;h]h"enum skb_drop_reason_subsys subsys}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhj5ubj)}(hhh]jX)}(h/the subsystem to register, must not be the coreh]h/the subsystem to register, must not be the core}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhj2ubj)}(h``const struct drop_reason_list *list`` the list of drop reasons within the subsystem, must point to a statically initialized listh](j)}(h'``const struct drop_reason_list *list``h]j)}(hjth]h#const struct drop_reason_list *list}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjnubj)}(hhh]jX)}(hZthe list of drop reasons within the subsystem, must point to a statically initialized listh]hZthe list of drop reasons within the subsystem, must point to a statically initialized list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+drop_reasons_unregister_subsys (C function) c.drop_reasons_unregister_subsyshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hHvoid drop_reasons_unregister_subsys (enum skb_drop_reason_subsys subsys)h]h)}(hGvoid drop_reasons_unregister_subsys(enum skb_drop_reason_subsys subsys)h](j)}(hvoidh]hvoid}(hj́hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɁhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKubj)}(h h]h }(hj܁hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjɁhhhjہhKubj)}(hdrop_reasons_unregister_subsysh]j%)}(hdrop_reasons_unregister_subsysh]hdrop_reasons_unregister_subsys}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjɁhhhjہhKubj)}(h$(enum skb_drop_reason_subsys subsys)h]j)}(h"enum skb_drop_reason_subsys subsysh](h)}(hhh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_drop_reason_subsysh]hskb_drop_reason_subsys}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*modnameN classnameNjj!)}j$]j')}jjsb c.drop_reasons_unregister_subsysasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsubsysh]hsubsys}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjɁhhhjہhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjŁhhhjہhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjہhKhjhhubjS)}(hhh]jX)}(h"unregister a drop reason subsystemh]h"unregister a drop reason subsystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhj}hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjہhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``enum skb_drop_reason_subsys subsys`` the subsystem to remove, must not be the core **Note** This will synchronize_rcu() to ensure no users when it returns.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjubj)}(hhh]j)}(hU``enum skb_drop_reason_subsys subsys`` the subsystem to remove, must not be the core h](j)}(h&``enum skb_drop_reason_subsys subsys``h]j)}(hjh]h"enum skb_drop_reason_subsys subsys}(hjÂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjubj)}(hhh]jX)}(h-the subsystem to remove, must not be the coreh]h-the subsystem to remove, must not be the core}(hjڂhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjւhKhjׂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjւhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjubjX)}(h?This will synchronize_rcu() to ensure no users when it returns.h]h?This will synchronize_rcu() to ensure no users when it returns.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$napi_skb_cache_get_bulk (C function)c.napi_skb_cache_get_bulkhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h0u32 napi_skb_cache_get_bulk (void **skbs, u32 n)h]h)}(h/u32 napi_skb_cache_get_bulk(void **skbs, u32 n)h](h)}(hhh]j%)}(hu32h]hu32}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjFmodnameN classnameNjj!)}j$]j')}jnapi_skb_cache_get_bulksbc.napi_skb_cache_get_bulkasbuh1hhj=hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMIubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=hhhjehMIubj)}(hnapi_skb_cache_get_bulkh]j%)}(hjbh]hnapi_skb_cache_get_bulk}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj=hhhjehMIubj)}(h(void **skbs, u32 n)h](j)}(h void **skbsh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbsh]hskbs}(hjɃhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu32 nh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j`c.napi_skb_cache_get_bulkasbuh1hhjރubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjރubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjރubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhjehMIubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj9hhhjehMIubah}(h]j4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehMIhj6hhubjS)}(hhh]jX)}(h2obtain a number of zeroed skb heads from the cacheh]h2obtain a number of zeroed skb heads from the cache}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMIhj7hhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhjehMIubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjRjxjRjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``void **skbs`` pointer to an at least **n**-sized array to fill with skb pointers ``u32 n`` number of entries to provide **Description** Tries to obtain **n** :c:type:`sk_buff` entries from the NAPI percpu cache and writes the pointers into the provided array **skbs**. If there are less entries available, tries to replenish the cache and bulk-allocates the diff from the MM layer if needed. The heads are being zeroed with either memset() or ``__GFP_ZERO``, so they are ready for {,__}build_skb_around() and don't have any data buffers attached. Must be called *only* from the BH context. **Return** number of successfully allocated skbs (**n** if no actual allocation needed or kmem_cache_alloc_bulk() didn't fail).h](jX)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMMhjVubj)}(hhh](j)}(hS``void **skbs`` pointer to an at least **n**-sized array to fill with skb pointers h](j)}(h``void **skbs``h]j)}(hj{h]h void **skbs}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMJhjuubj)}(hhh]jX)}(hBpointer to an at least **n**-sized array to fill with skb pointersh](hpointer to an at least }(hjhhhNhNubj)}(h**n**h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh&-sized array to fill with skb pointers}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjrubj)}(h'``u32 n`` number of entries to provide h](j)}(h ``u32 n``h]j)}(hjƄh]hu32 n}(hjȄhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĄubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMKhjubj)}(hhh]jX)}(hnumber of entries to provideh]hnumber of entries to provide}(hj߄hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjۄhMKhj܄ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjۄhMKhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMMhjVubjX)}(hXTries to obtain **n** :c:type:`sk_buff` entries from the NAPI percpu cache and writes the pointers into the provided array **skbs**. If there are less entries available, tries to replenish the cache and bulk-allocates the diff from the MM layer if needed. The heads are being zeroed with either memset() or ``__GFP_ZERO``, so they are ready for {,__}build_skb_around() and don't have any data buffers attached. Must be called *only* from the BH context.h](hTries to obtain }(hjhhhNhNubj)}(h**n**h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj3h]hsk_buff}(hj5hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMLhjubhT entries from the NAPI percpu cache and writes the pointers into the provided array }(hjhhhNhNubj)}(h**skbs**h]hskbs}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. If there are less entries available, tries to replenish the cache and bulk-allocates the diff from the MM layer if needed. The heads are being zeroed with either memset() or }(hjhhhNhNubj)}(h``__GFP_ZERO``h]h __GFP_ZERO}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhk, so they are ready for {,__}build_skb_around() and don’t have any data buffers attached. Must be called }(hjhhhNhNubhemphasis)}(h*only*h]honly}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubh from the BH context.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjPhMLhjVubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMThjVubjX)}(htnumber of successfully allocated skbs (**n** if no actual allocation needed or kmem_cache_alloc_bulk() didn't fail).h](h'number of successfully allocated skbs (}(hjhhhNhNubj)}(h**n**h]hn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ if no actual allocation needed or kmem_cache_alloc_bulk() didn’t fail).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMUhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hbuild_skb_around (C function)c.build_skb_aroundhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h[struct sk_buff * build_skb_around (struct sk_buff *skb, void *data, unsigned int frag_size)h]h)}(hYstruct sk_buff *build_skb_around(struct sk_buff *skb, void *data, unsigned int frag_size)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jbuild_skb_aroundsbc.build_skb_aroundasbuh1hhjhhhjhMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hbuild_skb_aroundh]j%)}(hj)h]hbuild_skb_around}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h9(struct sk_buff *skb, void *data, unsigned int frag_size)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j'c.build_skb_aroundasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(h void *datah](j)}(hvoidh]hvoid}(hjֆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҆ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj҆ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj҆ubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj҆ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(hunsigned int frag_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h frag_sizeh]h frag_size}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]j߅ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h*build a network buffer around provided skbh]h*build a network buffer around provided skb}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjwhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` sk_buff provide by caller, must be memset cleared ``void *data`` data buffer provided by caller ``unsigned int frag_size`` size of datah](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh](j)}(hJ``struct sk_buff *skb`` sk_buff provide by caller, must be memset cleared h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h1sk_buff provide by caller, must be memset clearedh]h1sk_buff provide by caller, must be memset cleared}(hjԇhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjЇhMhjчubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЇhMhjubj)}(h.``void *data`` data buffer provided by caller h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hdata buffer provided by callerh]hdata buffer provided by caller}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h'``unsigned int frag_size`` size of datah](j)}(h``unsigned int frag_size``h]j)}(hj-h]hunsigned int frag_size}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj'ubj)}(hhh]jX)}(h size of datah]h size of data}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_build_skb (C function)c.napi_build_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hDstruct sk_buff * napi_build_skb (void *data, unsigned int frag_size)h]h)}(hBstruct sk_buff *napi_build_skb(void *data, unsigned int frag_size)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM5ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jnapi_build_skbsbc.napi_build_skbasbuh1hhjhhhjhM5ubj)}(h h]h }(hjLjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM5ubj;)}(hj>h]h*}(hjՈhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM5ubj)}(hnapi_build_skbh]j%)}(hjĈh]hnapi_build_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM5ubj)}(h$(void *data, unsigned int frag_size)h](j)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdatah]hdata}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int frag_sizeh](j)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(h frag_sizeh]h frag_size}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM5ubah}(h]jzah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM5hj|hhubjS)}(hhh]jX)}(hbuild a network bufferh]hbuild a network buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM5hjhhubah}(h]h ]h"]h$]h&]uh1jRhj|hhhjhM5ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXG**Parameters** ``void *data`` data buffer provided by caller ``unsigned int frag_size`` size of data **Description** Version of __napi_build_skb() that takes care of skb->head_frag and skb->pfmemalloc when the data is a page or page fragment. Returns a new :c:type:`sk_buff` on success, ``NULL`` on allocation failure.h](jX)}(h**Parameters**h]j)}(hjljh]h Parameters}(hjɉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʼnubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9hjubj)}(hhh](j)}(h.``void *data`` data buffer provided by caller h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM6hjubj)}(hhh]jX)}(hdata buffer provided by callerh]hdata buffer provided by caller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hj݉ubj)}(h(``unsigned int frag_size`` size of data h](j)}(h``unsigned int frag_size``h]j)}(hjh]hunsigned int frag_size}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM7hjubj)}(hhh]jX)}(h size of datah]h size of data}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hM7hj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hM7hj݉ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9hjubjX)}(h}Version of __napi_build_skb() that takes care of skb->head_frag and skb->pfmemalloc when the data is a page or page fragment.h]h}Version of __napi_build_skb() that takes care of skb->head_frag and skb->pfmemalloc when the data is a page or page fragment.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM8hjubjX)}(hKReturns a new :c:type:`sk_buff` on success, ``NULL`` on allocation failure.h](hReturns a new }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM;hjubh on success, }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh on allocation failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__alloc_skb (C function) c.__alloc_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hUstruct sk_buff * __alloc_skb (unsigned int size, gfp_t gfp_mask, int flags, int node)h]h)}(hSstruct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask, int flags, int node)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjߊhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߊhhhjhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j __alloc_skbsb c.__alloc_skbasbuh1hhjߊhhhjhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߊhhhjhMubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjߊhhhjhMubj)}(h __alloc_skbh]j%)}(hj h]h __alloc_skb}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjߊhhhjhMubj)}(h8(unsigned int size, gfp_t gfp_mask, int flags, int node)h](j)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.__alloc_skbasbuh1hhjubj)}(h h]h }(hjϋhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hj݋hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(h int flagsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(hint nodeh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj%)}(hnodeh]hnode}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubeh}(h]h ]h"]h$]h&]j<j=uh1jhjߊhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjۊhhhjhMubah}(h]j֊ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhj؊hhubjS)}(hhh]jX)}(hallocate a network bufferh]hallocate a network buffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jRhj؊hhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``unsigned int size`` size to allocate ``gfp_t gfp_mask`` allocation mask ``int flags`` If SKB_ALLOC_FCLONE is set, allocate from fclone cache instead of head cache and allocate a cloned (child) skb. If SKB_ALLOC_RX is set, __GFP_MEMALLOC will be used for allocations in case the data is required for writeback ``int node`` numa node to allocate memory on **Description** Allocate a new :c:type:`sk_buff`. The returned buffer has no headroom and a tail room of at least size bytes. The object has a reference count of one. The return is the buffer. On a failure the return is ``NULL``. Buffers may only be allocated from interrupts using a **gfp_mask** of ``GFP_ATOMIC``.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h'``unsigned int size`` size to allocate h](j)}(h``unsigned int size``h]j)}(hjh]hunsigned int size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hsize to allocateh]hsize to allocate}(hjˌhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnjhMhjȌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjnjhMhjubj)}(h#``gfp_t gfp_mask`` allocation mask h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hallocation maskh]hallocation mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int flags`` If SKB_ALLOC_FCLONE is set, allocate from fclone cache instead of head cache and allocate a cloned (child) skb. If SKB_ALLOC_RX is set, __GFP_MEMALLOC will be used for allocations in case the data is required for writeback h](j)}(h ``int flags``h]j)}(hj$h]h int flags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hIf SKB_ALLOC_FCLONE is set, allocate from fclone cache instead of head cache and allocate a cloned (child) skb. If SKB_ALLOC_RX is set, __GFP_MEMALLOC will be used for allocations in case the data is required for writebackh]hIf SKB_ALLOC_FCLONE is set, allocate from fclone cache instead of head cache and allocate a cloned (child) skb. If SKB_ALLOC_RX is set, __GFP_MEMALLOC will be used for allocations in case the data is required for writeback}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h-``int node`` numa node to allocate memory on h](j)}(h ``int node``h]j)}(hj^h]hint node}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjXubj)}(hhh]jX)}(hnuma node to allocate memory onh]hnuma node to allocate memory on}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hX,Allocate a new :c:type:`sk_buff`. The returned buffer has no headroom and a tail room of at least size bytes. The object has a reference count of one. The return is the buffer. On a failure the return is ``NULL``. Buffers may only be allocated from interrupts using a **gfp_mask** of ``GFP_ATOMIC``.h](jX)}(hAllocate a new :c:type:`sk_buff`. The returned buffer has no headroom and a tail room of at least size bytes. The object has a reference count of one. The return is the buffer. On a failure the return is ``NULL``.h](hAllocate a new }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubh. The returned buffer has no headroom and a tail room of at least size bytes. The object has a reference count of one. The return is the buffer. On a failure the return is }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjߍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjڍhMhjubjX)}(hUBuffers may only be allocated from interrupts using a **gfp_mask** of ``GFP_ATOMIC``.h](h6Buffers may only be allocated from interrupts using a }(hjhhhNhNubj)}(h **gfp_mask**h]hgfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh of }(hjhhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjڍhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__netdev_alloc_skb (C function)c.__netdev_alloc_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h^struct sk_buff * __netdev_alloc_skb (struct net_device *dev, unsigned int len, gfp_t gfp_mask)h]h)}(h\struct sk_buff *__netdev_alloc_skb(struct net_device *dev, unsigned int len, gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLhhhj]hMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqmodnameN classnameNjj!)}j$]j')}j__netdev_alloc_skbsbc.__netdev_alloc_skbasbuh1hhjLhhhj]hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLhhhj]hMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLhhhj]hMubj)}(h__netdev_alloc_skbh]j%)}(hjh]h__netdev_alloc_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLhhhj]hMubj)}(h:(struct net_device *dev, unsigned int len, gfp_t gfp_mask)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjʎhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjƎubj)}(h h]h }(hj׎hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƎubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__netdev_alloc_skbasbuh1hhjƎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƎubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjƎubj%)}(hdevh]hdev}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjƎubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjŽubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj%)}(hlenh]hlen}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjŽubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__netdev_alloc_skbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjŽubeh}(h]h ]h"]h$]h&]j<j=uh1jhjLhhhj]hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhj]hMubah}(h]jCah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]hMhjEhhubjS)}(hhh]jX)}(h.allocate an skbuff for rx on a specific deviceh]h.allocate an skbuff for rx on a specific device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjEhhhj]hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device to receive on ``unsigned int len`` length to allocate ``gfp_t gfp_mask`` get_free_pages mask, passed to alloc_skb **Description** Allocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has NET_SKB_PAD headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations. ``NULL`` is returned if there is no free memory.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h8``struct net_device *dev`` network device to receive on h](j)}(h``struct net_device *dev``h]j)}(hj%h]hstruct net_device *dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hnetwork device to receive onh]hnetwork device to receive on}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h(``unsigned int len`` length to allocate h](j)}(h``unsigned int len``h]j)}(hj^h]hunsigned int len}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjXubj)}(hhh]jX)}(hlength to allocateh]hlength to allocate}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(h<``gfp_t gfp_mask`` get_free_pages mask, passed to alloc_skb h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h(get_free_pages mask, passed to alloc_skbh]h(get_free_pages mask, passed to alloc_skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjҐh]h Description}(hjԐhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjАubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hX5Allocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has NET_SKB_PAD headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations. ``NULL`` is returned if there is no free memory.h](jX)}(hXAllocate a new :c:type:`sk_buff` and assign it a usage count of one. The buffer has NET_SKB_PAD headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations.h](hAllocate a new }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubh and assign it a usage count of one. The buffer has NET_SKB_PAD headroom built in. Users should allocate the headroom they think they need without accounting for the built in space. The built in space is used for optimisations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubjX)}(h0``NULL`` is returned if there is no free memory.h](j)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( is returned if there is no free memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_alloc_skb (C function)c.napi_alloc_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hLstruct sk_buff * napi_alloc_skb (struct napi_struct *napi, unsigned int len)h]h)}(hJstruct sk_buff *napi_alloc_skb(struct napi_struct *napi, unsigned int len)h](h)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjnhM9ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jnapi_alloc_skbsbc.napi_alloc_skbasbuh1hhj]hhhjnhM9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjnhM9ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]hhhjnhM9ubj)}(hnapi_alloc_skbh]j%)}(hjh]hnapi_alloc_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]hhhjnhM9ubj)}(h,(struct napi_struct *napi, unsigned int len)h](j)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjۑhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjבubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjבubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.napi_alloc_skbasbuh1hhjבubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjבubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjבubj%)}(hnapih]hnapi}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjבubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjӑubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjӑubeh}(h]h ]h"]h$]h&]j<j=uh1jhj]hhhjnhM9ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjnhM9ubah}(h]jTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhM9hjVhhubjS)}(hhh]jX)}(h2allocate skbuff for rx in a specific NAPI instanceh]h2allocate skbuff for rx in a specific NAPI instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9hjhhubah}(h]h ]h"]h$]h&]uh1jRhjVhhhjnhM9ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjŒjxjŒjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct napi_struct *napi`` napi instance this buffer was allocated for ``unsigned int len`` length to allocate **Description** Allocate a new sk_buff for use in NAPI receive. This buffer will attempt to allocate the head from a special reserved region used only for NAPI Rx allocation. By doing this we can save several CPU cycles by avoiding having to disable and re-enable IRQs. ``NULL`` is returned if there is no free memory.h](jX)}(h**Parameters**h]j)}(hjϒh]h Parameters}(hjђhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͒ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM=hjɒubj)}(hhh](j)}(hI``struct napi_struct *napi`` napi instance this buffer was allocated for h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM:hjubj)}(hhh]jX)}(h+napi instance this buffer was allocated forh]h+napi instance this buffer was allocated for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubj)}(h(``unsigned int len`` length to allocate h](j)}(h``unsigned int len``h]j)}(hj'h]hunsigned int len}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM;hj!ubj)}(hhh]jX)}(hlength to allocateh]hlength to allocate}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hM;hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM;hjubeh}(h]h ]h"]h$]h&]uh1jhjɒubjX)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM=hjɒubj )}(hX1Allocate a new sk_buff for use in NAPI receive. This buffer will attempt to allocate the head from a special reserved region used only for NAPI Rx allocation. By doing this we can save several CPU cycles by avoiding having to disable and re-enable IRQs. ``NULL`` is returned if there is no free memory.h](jX)}(hAllocate a new sk_buff for use in NAPI receive. This buffer will attempt to allocate the head from a special reserved region used only for NAPI Rx allocation. By doing this we can save several CPU cycles by avoiding having to disable and re-enable IRQs.h]hAllocate a new sk_buff for use in NAPI receive. This buffer will attempt to allocate the head from a special reserved region used only for NAPI Rx allocation. By doing this we can save several CPU cycles by avoiding having to disable and re-enable IRQs.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM<hjxubjX)}(h0``NULL`` is returned if there is no free memory.h](j)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh( is returned if there is no free memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMAhjxubeh}(h]h ]h"]h$]h&]uh1j hjhM<hjɒubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__kfree_skb (C function) c.__kfree_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h&void __kfree_skb (struct sk_buff *skb)h]h)}(h%void __kfree_skb(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjΓhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʓhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjݓhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjʓhhhjܓhMubj)}(h __kfree_skbh]j%)}(h __kfree_skbh]h __kfree_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjʓhhhjܓhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]j')}jjsb c.__kfree_skbasbuh1hhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjʓhhhjܓhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjƓhhhjܓhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjܓhMhjÓhhubjS)}(hhh]jX)}(hprivate functionh]hprivate function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjÓhhhjܓhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer **Description** Free an sk_buff. Release anything attached to the buffer. Clean the state. This is an internal helper function. Users should always call kfree_skbh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjϔh]hstruct sk_buff *skb}(hjєhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͔ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjɔubj)}(hhh]jX)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɔubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƔubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hFree an sk_buff. Release anything attached to the buffer. Clean the state. This is an internal helper function. Users should always call kfree_skbh]jX)}(hFree an sk_buff. Release anything attached to the buffer. Clean the state. This is an internal helper function. Users should always call kfree_skbh]hFree an sk_buff. Release anything attached to the buffer. Clean the state. This is an internal helper function. Users should always call kfree_skb}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj ubah}(h]h ]h"]h$]h&]uh1j hj2hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_skb_reason_drop (C function)c.sk_skb_reason_drophNtauh1hhj[hhhNhNubh)}(hhh](h)}(hivoid __fix_address sk_skb_reason_drop (struct sock *sk, struct sk_buff *skb, enum skb_drop_reason reason)h]h)}(hhvoid __fix_address sk_skb_reason_drop(struct sock *sk, struct sk_buff *skb, enum skb_drop_reason reason)h](j)}(hvoidh]hvoid}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjghMubh __fix_address}(hjUhhhNhNubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjghMubj)}(hsk_skb_reason_droph]j%)}(hsk_skb_reason_droph]hsk_skb_reason_drop}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjUhhhjghMubj)}(hC(struct sock *sk, struct sk_buff *skb, enum skb_drop_reason reason)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsockh]hsock}(hjƕhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjÕubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjȕmodnameN classnameNjj!)}j$]j')}jjsbc.sk_skb_reason_dropasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskh]hsk}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]jc.sk_skb_reason_dropasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(henum skb_drop_reason reasonh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_drop_reasonh]hskb_drop_reason}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.sk_skb_reason_dropasbuh1hhjubj)}(h h]h }(hjƖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hreasonh]hreason}(hjԖhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjUhhhjghMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjQhhhjghMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjghMhjNhhubjS)}(hhh]jX)}(h#free an sk_buff with special reasonh]h#free an sk_buff with special reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjNhhhjghMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sock *sk`` the socket to receive **skb**, or NULL if not applicable ``struct sk_buff *skb`` buffer to free ``enum skb_drop_reason reason`` reason why this skb is dropped **Description** Drop a reference to the buffer and free it if the usage count has hit zero. Meanwhile, pass the receiving socket and drop reason to 'kfree_skb' tracepoint.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(hM``struct sock *sk`` the socket to receive **skb**, or NULL if not applicable h](j)}(h``struct sock *sk``h]j)}(hj?h]hstruct sock *sk}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj9ubj)}(hhh]jX)}(h8the socket to receive **skb**, or NULL if not applicableh](hthe socket to receive }(hjXhhhNhNubj)}(h**skb**h]hskb}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh, or NULL if not applicable}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubj)}(h'``struct sk_buff *skb`` buffer to free h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to freeh]hbuffer to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(h?``enum skb_drop_reason reason`` reason why this skb is dropped h](j)}(h``enum skb_drop_reason reason``h]j)}(hj×h]henum skb_drop_reason reason}(hjŗhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hreason why this skb is droppedh]hreason why this skb is dropped}(hjܗhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjؗhMhjٗubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؗhMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hDrop a reference to the buffer and free it if the usage count has hit zero. Meanwhile, pass the receiving socket and drop reason to 'kfree_skb' tracepoint.h]jX)}(hDrop a reference to the buffer and free it if the usage count has hit zero. Meanwhile, pass the receiving socket and drop reason to 'kfree_skb' tracepoint.h]hDrop a reference to the buffer and free it if the usage count has hit zero. Meanwhile, pass the receiving socket and drop reason to ‘kfree_skb’ tracepoint.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1j hj&hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_tx_error (C function)c.skb_tx_errorhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h'void skb_tx_error (struct sk_buff *skb)h]h)}(h&void skb_tx_error(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIhhhj[hMubj)}(h skb_tx_errorh]j%)}(h skb_tx_errorh]h skb_tx_error}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjIhhhj[hMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjpsbc.skb_tx_errorasbuh1hhjubj)}(h h]h }(hjȘhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj֘hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjEhhhj[hMubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[hMhjBhhubjS)}(hhh]jX)}(hreport an sk_buff xmit errorh]hreport an sk_buff xmit error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjBhhhj[hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer that triggered an error **Description** Report xmit error if a device callback is tracking this skb. skb must be freed afterwards.h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj)ubj)}(hhh]j)}(h7``struct sk_buff *skb`` buffer that triggered an error h](j)}(h``struct sk_buff *skb``h]j)}(hjNh]hstruct sk_buff *skb}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjHubj)}(hhh]jX)}(hbuffer that triggered an errorh]hbuffer that triggered an error}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj)ubj )}(hZReport xmit error if a device callback is tracking this skb. skb must be freed afterwards.h]jX)}(hZReport xmit error if a device callback is tracking this skb. skb must be freed afterwards.h]hZReport xmit error if a device callback is tracking this skb. skb must be freed afterwards.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hconsume_skb (C function) c.consume_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h&void consume_skb (struct sk_buff *skb)h]h)}(h%void consume_skb(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hjؙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԙhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjԙhhhjhMubj)}(h consume_skbh]j%)}(h consume_skbh]h consume_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjԙhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jjsb c.consume_skbasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjԙhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjЙhhhjhMubah}(h]j˙ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhj͙hhubjS)}(hhh]jX)}(hfree an skbuffh]hfree an skbuff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj͙hhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to free **Description** Drop a ref to the buffer and free it if the usage count has hit zero Functions identically to kfree_skb, but kfree_skb assumes that the frame is being dropped after a failure and notes thath](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(h'``struct sk_buff *skb`` buffer to free h](j)}(h``struct sk_buff *skb``h]j)}(hjٚh]hstruct sk_buff *skb}(hjۚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjךubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjӚubj)}(hhh]jX)}(hbuffer to freeh]hbuffer to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӚubeh}(h]h ]h"]h$]h&]uh1jhjhMhjКubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hDrop a ref to the buffer and free it if the usage count has hit zero Functions identically to kfree_skb, but kfree_skb assumes that the frame is being dropped after a failure and notes thath]jX)}(hDrop a ref to the buffer and free it if the usage count has hit zero Functions identically to kfree_skb, but kfree_skb assumes that the frame is being dropped after a failure and notes thath]hDrop a ref to the buffer and free it if the usage count has hit zero Functions identically to kfree_skb, but kfree_skb assumes that the frame is being dropped after a failure and notes that}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj*ubah}(h]h ]h"]h$]h&]uh1j hj<hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_consume_skb (C function)c.napi_consume_skbhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h7void napi_consume_skb (struct sk_buff *skb, int budget)h]h)}(h6void napi_consume_skb(struct sk_buff *skb, int budget)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_hhhjqhMubj)}(hnapi_consume_skbh]j%)}(hnapi_consume_skbh]hnapi_consume_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj_hhhjqhMubj)}(h!(struct sk_buff *skb, int budget)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_consume_skbasbuh1hhjubj)}(h h]h }(hjޛhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int budgeth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbudgeth]hbudget}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj_hhhjqhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj[hhhjqhMubah}(h]jVah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjqhMhjXhhubjS)}(hhh]jX)}(h2consume skb in NAPI context, try to feed skb cacheh]h2consume skb in NAPI context, try to feed skb cache}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhjqhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjpjxjpjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to free ``int budget`` NAPI budget **Description** Non-zero **budget** must come from the **budget** argument passed by the core to a NAPI poll function. Note that core may pass budget of 0 to NAPI poll for example when polling for netpoll / netconsole. Passing **budget** of 0 is safe from any context, it turns this function into dev_consume_skb_any().h](jX)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjtubj)}(hhh](j)}(h'``struct sk_buff *skb`` buffer to free h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to freeh]hbuffer to free}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int budget`` NAPI budget h](j)}(h``int budget``h]j)}(hjҜh]h int budget}(hjԜhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjМubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj̜ubj)}(hhh]jX)}(h NAPI budgeth]h NAPI budget}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̜ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubjX)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjtubjX)}(hNon-zero **budget** must come from the **budget** argument passed by the core to a NAPI poll function. Note that core may pass budget of 0 to NAPI poll for example when polling for netpoll / netconsole.h](h Non-zero }(hj#hhhNhNubj)}(h **budget**h]hbudget}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh must come from the }(hj#hhhNhNubj)}(h **budget**h]hbudget}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh argument passed by the core to a NAPI poll function. Note that core may pass budget of 0 to NAPI poll for example when polling for netpoll / netconsole.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjtubjX)}(hdPassing **budget** of 0 is safe from any context, it turns this function into dev_consume_skb_any().h](hPassing }(hjVhhhNhNubj)}(h **budget**h]hbudget}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubhR of 0 is safe from any context, it turns this function into dev_consume_skb_any().}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_skb_for_msg (C function)c.alloc_skb_for_msghNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:struct sk_buff * alloc_skb_for_msg (struct sk_buff *first)h]h)}(h8struct sk_buff *alloc_skb_for_msg(struct sk_buff *first)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMmubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jalloc_skb_for_msgsbc.alloc_skb_for_msgasbuh1hhjhhhjhMmubj)}(h h]h }(hjםhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMmubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMmubj)}(halloc_skb_for_msgh]j%)}(hjԝh]halloc_skb_for_msg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMmubj)}(h(struct sk_buff *first)h]j)}(hstruct sk_buff *firsth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]jҝc.alloc_skb_for_msgasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hfirsth]hfirst}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMmubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMmhjhhubjS)}(hhh]jX)}(h0allocate sk_buff to wrap frag list forming a msgh]h0allocate sk_buff to wrap frag list forming a msg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMmhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMmubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hD**Parameters** ``struct sk_buff *first`` first sk_buff of the msgh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMqhjubj)}(hhh]j)}(h2``struct sk_buff *first`` first sk_buff of the msgh](j)}(h``struct sk_buff *first``h]j)}(hjӞh]hstruct sk_buff *first}(hj՞hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjўubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMshj͞ubj)}(hhh]jX)}(hfirst sk_buff of the msgh]hfirst sk_buff of the msg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMnhjubah}(h]h ]h"]h$]h&]uh1jhj͞ubeh}(h]h ]h"]h$]h&]uh1jhjhMshjʞubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_morph (C function) c.skb_morphhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hEstruct sk_buff * skb_morph (struct sk_buff *dst, struct sk_buff *src)h]h)}(hCstruct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src)h](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj)hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hhhj:hMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}j skb_morphsb c.skb_morphasbuh1hhj)hhhj:hMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hhhj:hMubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)hhhj:hMubj)}(h skb_morphh]j%)}(hjjh]h skb_morph}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj)hhhj:hMubj)}(h*(struct sk_buff *dst, struct sk_buff *src)h](j)}(hstruct sk_buff *dsth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjşhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjŸubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjǟmodnameN classnameNjj!)}j$]jh c.skb_morphasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdsth]hdst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *srch](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]jh c.skb_morphasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsrch]hsrc}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj)hhhj:hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%hhhj:hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hMhj"hhubjS)}(hhh]jX)}(hmorph one skb into anotherh]hmorph one skb into another}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj"hhhj:hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *dst`` the skb to receive the contents ``struct sk_buff *src`` the skb to supply the contents **Description** This is identical to skb_clone except that the target skb is supplied by the user. The target skb is returned upon exit.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h8``struct sk_buff *dst`` the skb to receive the contents h](j)}(h``struct sk_buff *dst``h]j)}(hj٠h]hstruct sk_buff *dst}(hj۠hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjנubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjӠubj)}(hhh]jX)}(hthe skb to receive the contentsh]hthe skb to receive the contents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjӠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjРubj)}(h7``struct sk_buff *src`` the skb to supply the contents h](j)}(h``struct sk_buff *src``h]j)}(hjh]hstruct sk_buff *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj ubj)}(hhh]jX)}(hthe skb to supply the contentsh]hthe skb to supply the contents}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjРubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hyThis is identical to skb_clone except that the target skb is supplied by the user. The target skb is returned upon exit.h](jX)}(hRThis is identical to skb_clone except that the target skb is supplied by the user.h]hRThis is identical to skb_clone except that the target skb is supplied by the user.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjcubjX)}(h%The target skb is returned upon exit.h]h%The target skb is returned upon exit.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjcubeh}(h]h ]h"]h$]h&]uh1j hjuhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_copy_ubufs (C function)c.skb_copy_ubufshNtauh1hhj[hhhNhNubh)}(hhh](h)}(h8int skb_copy_ubufs (struct sk_buff *skb, gfp_t gfp_mask)h]h)}(h7int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_copy_ubufsh]j%)}(hskb_copy_ubufsh]hskb_copy_ubufs}(hj̡hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjȡubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h%(struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjΡsbc.skb_copy_ubufsasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_modnameN classnameNjj!)}j$]j"c.skb_copy_ubufsasbuh1hhjVubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h*copy userspace skb frags buffers to kernelh]h*copy userspace skb frags buffers to kernel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjˢjxjˢjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` the skb to modify ``gfp_t gfp_mask`` allocation priority **Description** This must be called on skb with SKBFL_ZEROCOPY_ENABLE. It will copy all frags into kernel and drop the reference to userspace pages. If this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``. Returns 0 on success or a negative error code on failure to allocate kernel memory to copy to.h](jX)}(h**Parameters**h]j)}(hjբh]h Parameters}(hjעhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӢubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjϢubj)}(hhh](j)}(h*``struct sk_buff *skb`` the skb to modify h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hthe skb to modifyh]hthe skb to modify}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hj-h]hgfp_t gfp_mask}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj'ubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubeh}(h]h ]h"]h$]h&]uh1jhjϢubjX)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjϢubj )}(hX5This must be called on skb with SKBFL_ZEROCOPY_ENABLE. It will copy all frags into kernel and drop the reference to userspace pages. If this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``. Returns 0 on success or a negative error code on failure to allocate kernel memory to copy to.h](jX)}(hThis must be called on skb with SKBFL_ZEROCOPY_ENABLE. It will copy all frags into kernel and drop the reference to userspace pages.h]hThis must be called on skb with SKBFL_ZEROCOPY_ENABLE. It will copy all frags into kernel and drop the reference to userspace pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj~ubjX)}(hOIf this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``.h](h@If this function is called from an interrupt gfp_mask() must be }(hjhhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj~ubjX)}(h^Returns 0 on success or a negative error code on failure to allocate kernel memory to copy to.h]h^Returns 0 on success or a negative error code on failure to allocate kernel memory to copy to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj~ubeh}(h]h ]h"]h$]h&]uh1j hjhMhjϢubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_clone (C function) c.skb_clonehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h@struct sk_buff * skb_clone (struct sk_buff *skb, gfp_t gfp_mask)h]h)}(h>struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM(ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM(ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j skb_clonesb c.skb_cloneasbuh1hhjhhhjhM(ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM(ubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM(ubj)}(h skb_cloneh]j%)}(hj$h]h skb_clone}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM(ubj)}(h%(struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j" c.skb_cloneasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjԤhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjѤubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj֤modnameN classnameNjj!)}j$]j" c.skb_cloneasbuh1hhjͤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjͤubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjͤubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM(ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjߣhhhjhM(ubah}(h]jڣah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM(hjܣhhubjS)}(hhh]jX)}(hduplicate an sk_buffh]hduplicate an sk_buff}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM(hj'hhubah}(h]h ]h"]h$]h&]uh1jRhjܣhhhjhM(ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to clone ``gfp_t gfp_mask`` allocation priority **Description** Duplicate an :c:type:`sk_buff`. The new one is not owned by a socket. Both copies share the same packet data but not structure. The new buffer has a reference count of 1. If the allocation fails the function returns ``NULL`` otherwise the new buffer is returned. If this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``.h](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM,hjFubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to clone h](j)}(h``struct sk_buff *skb``h]j)}(hjkh]hstruct sk_buff *skb}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM)hjeubj)}(hhh]jX)}(hbuffer to cloneh]hbuffer to clone}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjbubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hjh]hgfp_t gfp_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM*hjubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjbubeh}(h]h ]h"]h$]h&]uh1jhjFubjX)}(h**Description**h]j)}(hjߥh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݥubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM,hjFubj )}(hXWDuplicate an :c:type:`sk_buff`. The new one is not owned by a socket. Both copies share the same packet data but not structure. The new buffer has a reference count of 1. If the allocation fails the function returns ``NULL`` otherwise the new buffer is returned. If this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``.h](jX)}(hXDuplicate an :c:type:`sk_buff`. The new one is not owned by a socket. Both copies share the same packet data but not structure. The new buffer has a reference count of 1. If the allocation fails the function returns ``NULL`` otherwise the new buffer is returned.h](h Duplicate an }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM+hjubh. The new one is not owned by a socket. Both copies share the same packet data but not structure. The new buffer has a reference count of 1. If the allocation fails the function returns }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& otherwise the new buffer is returned.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj hM+hjubjX)}(hOIf this function is called from an interrupt gfp_mask() must be ``GFP_ATOMIC``.h](h@If this function is called from an interrupt gfp_mask() must be }(hj=hhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM0hjubeh}(h]h ]h"]h$]h&]uh1j hj hM+hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_copy (C function) c.skb_copyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hEstruct sk_buff * skb_copy (const struct sk_buff *skb, gfp_t gfp_mask)h]h)}(hCstruct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jskb_copysb c.skb_copyasbuh1hhjhhhjhMuubj)}(h h]h }(hjĦhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubj;)}(hj>h]h*}(hjҦhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMuubj)}(hskb_copyh]j%)}(hjh]hskb_copy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjߦubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMuubj)}(h+(const struct sk_buff *skb, gfp_t gfp_mask)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9modnameN classnameNjj!)}j$]j c.skb_copyasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.skb_copyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhjhMuubah}(h]jwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMuhjyhhubjS)}(hhh]jX)}(h!create private copy of an sk_buffh]h!create private copy of an sk_buff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuhjߧhhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjhMuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff *skb`` buffer to copy ``gfp_t gfp_mask`` allocation priority **Description** Make a copy of both an :c:type:`sk_buff` and its data. This is used when the caller wishes to modify the data and needs a private copy of the data to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1. As by-product this function converts non-linear :c:type:`sk_buff` to linear one, so that :c:type:`sk_buff` becomes completely private and caller is allowed to modify all the data of returned buffer. This means that this function is not recommended for use in circumstances when only header is going to be modified. Use pskb_copy() instead.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMyhjubj)}(hhh](j)}(h-``const struct sk_buff *skb`` buffer to copy h](j)}(h``const struct sk_buff *skb``h]j)}(hj#h]hconst struct sk_buff *skb}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMvhjubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMvhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMvhjubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hj\h]hgfp_t gfp_mask}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMwhjVubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhMwhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMyhjubj )}(hXfMake a copy of both an :c:type:`sk_buff` and its data. This is used when the caller wishes to modify the data and needs a private copy of the data to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1. As by-product this function converts non-linear :c:type:`sk_buff` to linear one, so that :c:type:`sk_buff` becomes completely private and caller is allowed to modify all the data of returned buffer. This means that this function is not recommended for use in circumstances when only header is going to be modified. Use pskb_copy() instead.h](jX)}(hXMake a copy of both an :c:type:`sk_buff` and its data. This is used when the caller wishes to modify the data and needs a private copy of the data to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.h](hMake a copy of both an }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMxhjubh} and its data. This is used when the caller wishes to modify the data and needs a private copy of the data to alter. Returns }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjݨhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhd on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjبhMxhjubjX)}(hXSAs by-product this function converts non-linear :c:type:`sk_buff` to linear one, so that :c:type:`sk_buff` becomes completely private and caller is allowed to modify all the data of returned buffer. This means that this function is not recommended for use in circumstances when only header is going to be modified. Use pskb_copy() instead.h](h0As by-product this function converts non-linear }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM}hjubh to linear one, so that }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj#h]hsk_buff}(hj%hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhM}hjubh becomes completely private and caller is allowed to modify all the data of returned buffer. This means that this function is not recommended for use in circumstances when only header is going to be modified. Use pskb_copy() instead.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM}hjubeh}(h]h ]h"]h$]h&]uh1j hjبhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__pskb_copy_fclone (C function)c.__pskb_copy_fclonehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hdstruct sk_buff * __pskb_copy_fclone (struct sk_buff *skb, int headroom, gfp_t gfp_mask, bool fclone)h]h)}(hbstruct sk_buff *__pskb_copy_fclone(struct sk_buff *skb, int headroom, gfp_t gfp_mask, bool fclone)h](h)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhj}hMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j__pskb_copy_fclonesbc.__pskb_copy_fcloneasbuh1hhjlhhhj}hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhj}hMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlhhhj}hMubj)}(h__pskb_copy_fcloneh]j%)}(hjh]h__pskb_copy_fclone}(hjϩhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj˩ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjlhhhj}hMubj)}(h@(struct sk_buff *skb, int headroom, gfp_t gfp_mask, bool fclone)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jc.__pskb_copy_fcloneasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int headroomh](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj%)}(hheadroomh]hheadroom}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__pskb_copy_fcloneasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool fcloneh](j)}(hjTh]hbool}(hjתhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӪubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӪubj%)}(hfcloneh]hfclone}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjӪubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhj}hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhj}hMubah}(h]jcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}hMhjehhubjS)}(hhh]jX)}(h,create copy of an sk_buff with private head.h]h,create copy of an sk_buff with private head.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjehhhj}hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to copy ``int headroom`` headroom of new skb ``gfp_t gfp_mask`` allocation priority ``bool fclone`` if true allocate the copy of the skb from the fclone cache instead of the head cache; it is recommended to set this to true for the cases where the copy will likely be cloned **Description** Make a copy of both an :c:type:`sk_buff` and part of its data, located in header. Fragmented data remain shared. This is used when the caller wishes to modify only header of :c:type:`sk_buff` and needs private copy of the header to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj8ubj)}(hhh](j)}(h'``struct sk_buff *skb`` buffer to copy h](j)}(h``struct sk_buff *skb``h]j)}(hj]h]hstruct sk_buff *skb}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjWubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubj)}(h%``int headroom`` headroom of new skb h](j)}(h``int headroom``h]j)}(hjh]h int headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hheadroom of new skbh]hheadroom of new skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hjϫh]hgfp_t gfp_mask}(hjѫhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͫubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjɫubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɫubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubj)}(h``bool fclone`` if true allocate the copy of the skb from the fclone cache instead of the head cache; it is recommended to set this to true for the cases where the copy will likely be cloned h](j)}(h``bool fclone``h]j)}(hjh]h bool fclone}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hif true allocate the copy of the skb from the fclone cache instead of the head cache; it is recommended to set this to true for the cases where the copy will likely be clonedh]hif true allocate the copy of the skb from the fclone cache instead of the head cache; it is recommended to set this to true for the cases where the copy will likely be cloned}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjTubeh}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj8ubj )}(hXcMake a copy of both an :c:type:`sk_buff` and part of its data, located in header. Fragmented data remain shared. This is used when the caller wishes to modify only header of :c:type:`sk_buff` and needs private copy of the header to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.h]jX)}(hXcMake a copy of both an :c:type:`sk_buff` and part of its data, located in header. Fragmented data remain shared. This is used when the caller wishes to modify only header of :c:type:`sk_buff` and needs private copy of the header to alter. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.h](hMake a copy of both an }(hj^hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjhh]hsk_buff}(hjjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj^ubh and part of its data, located in header. Fragmented data remain shared. This is used when the caller wishes to modify only header of }(hj^hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhj^ubh8 and needs private copy of the header to alter. Returns }(hj^hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubhd on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjZubah}(h]h ]h"]h$]h&]uh1j hjhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpskb_expand_head (C function)c.pskb_expand_headhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hPint pskb_expand_head (struct sk_buff *skb, int nhead, int ntail, gfp_t gfp_mask)h]h)}(hOint pskb_expand_head(struct sk_buff *skb, int nhead, int ntail, gfp_t gfp_mask)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hpskb_expand_headh]j%)}(hpskb_expand_headh]hpskb_expand_head}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h;(struct sk_buff *skb, int nhead, int ntail, gfp_t gfp_mask)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j')}jjsbc.pskb_expand_headasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int nheadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hnheadh]hnhead}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int ntailh](j)}(hinth]hint}(hjϭhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˭ubj)}(h h]h }(hjݭhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj˭ubj%)}(hntailh]hntail}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj˭ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jbc.pskb_expand_headasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jެah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h&reallocate header of :c:type:`sk_buff`h](hreallocate header of }(hj]hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjgh]hsk_buff}(hjihhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jbc.pskb_expand_headasbjsk_buffuh1hhjhKhj]ubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXS**Parameters** ``struct sk_buff *skb`` buffer to reallocate ``int nhead`` room to add at head ``int ntail`` room to add at tail ``gfp_t gfp_mask`` allocation priority **Description** Expands (or creates identical copy, if **nhead** and **ntail** are zero) header of **skb**. :c:type:`sk_buff` itself is not changed. :c:type:`sk_buff` MUST have reference count of 1. Returns zero in the case of success or error, if expansion failed. In the last case, :c:type:`sk_buff` is not changed. All the pointers pointing into skb header may change and must be reloaded after call to this function. **Note** If you skb_push() the start of the buffer after reallocating the header, call skb_postpush_data_move() first to move the metadata out of the way before writing to :c:type:`sk_buff->data `.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h-``struct sk_buff *skb`` buffer to reallocate h](j)}(h``struct sk_buff *skb``h]j)}(hj®h]hstruct sk_buff *skb}(hjĮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to reallocateh]hbuffer to reallocate}(hjۮhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj׮hMhjخubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj׮hMhjubj)}(h"``int nhead`` room to add at head h](j)}(h ``int nhead``h]j)}(hjh]h int nhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hroom to add at headh]hroom to add at head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``int ntail`` room to add at tail h](j)}(h ``int ntail``h]j)}(hj4h]h int ntail}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj.ubj)}(hhh]jX)}(hroom to add at tailh]hroom to add at tail}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hjmh]hgfp_t gfp_mask}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjgubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hXExpands (or creates identical copy, if **nhead** and **ntail** are zero) header of **skb**. :c:type:`sk_buff` itself is not changed. :c:type:`sk_buff` MUST have reference count of 1. Returns zero in the case of success or error, if expansion failed. In the last case, :c:type:`sk_buff` is not changed. All the pointers pointing into skb header may change and must be reloaded after call to this function. h](jX)}(hX-Expands (or creates identical copy, if **nhead** and **ntail** are zero) header of **skb**. :c:type:`sk_buff` itself is not changed. :c:type:`sk_buff` MUST have reference count of 1. Returns zero in the case of success or error, if expansion failed. In the last case, :c:type:`sk_buff` is not changed.h](h'Expands (or creates identical copy, if }(hj¯hhhNhNubj)}(h **nhead**h]hnhead}(hjʯhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj¯ubh and }(hj¯hhhNhNubj)}(h **ntail**h]hntail}(hjܯhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj¯ubh are zero) header of }(hj¯hhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj¯ubh. }(hj¯hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj¯ubh itself is not changed. }(hj¯hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj&h]hsk_buff}(hj(hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhj¯ubhv MUST have reference count of 1. Returns zero in the case of success or error, if expansion failed. In the last case, }(hj¯hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjIh]hsk_buff}(hjKhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhj¯ubh is not changed.}(hj¯hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubjX)}(hfAll the pointers pointing into skb header may change and must be reloaded after call to this function.h]hfAll the pointers pointing into skb header may change and must be reloaded after call to this function.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(hIf you skb_push() the start of the buffer after reallocating the header, call skb_postpush_data_move() first to move the metadata out of the way before writing to :c:type:`sk_buff->data `.h](j)}(h@If you skb_push() the start of the buffer after reallocating theh]h@If you skb_push() the start of the buffer after reallocating the}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hheader, call skb_postpush_data_move() first to move the metadata out of the way before writing to :c:type:`sk_buff->data `.h](hbheader, call skb_postpush_data_move() first to move the metadata out of the way before writing to }(hjhhhNhNubh)}(h!:c:type:`sk_buff->data `h]j)}(hjh]h sk_buff->data}(hj°hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_expand_head (C function)c.skb_expand_headhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hMstruct sk_buff * skb_expand_head (struct sk_buff *skb, unsigned int headroom)h]h)}(hKstruct sk_buff *skb_expand_head(struct sk_buff *skb, unsigned int headroom)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj&hM ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jskb_expand_headsbc.skb_expand_headasbuh1hhjhhhj&hM ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj&hM ubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhj&hM ubj)}(hskb_expand_headh]j%)}(hjVh]hskb_expand_head}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj&hM ubj)}(h,(struct sk_buff *skb, unsigned int headroom)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jTc.skb_expand_headasbuh1hhjubj)}(h h]h }(hjϱhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjݱhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int headroomh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hheadroomh]hheadroom}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj&hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj&hM ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj&hM hjhhubjS)}(hhh]jX)}(h&reallocate header of :c:type:`sk_buff`h](hreallocate header of }(hjehhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjoh]hsk_buff}(hjqhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jTc.skb_expand_headasbjsk_buffuh1hhjhKhjeubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjbhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj&hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXo**Parameters** ``struct sk_buff *skb`` buffer to reallocate ``unsigned int headroom`` needed headroom **Description** Unlike skb_realloc_headroom, this one does not allocate a new skb if possible; copies skb->sk to new skb as needed and frees original skb in case of failures. It expect increased headroom and generates warning otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh](j)}(h-``struct sk_buff *skb`` buffer to reallocate h](j)}(h``struct sk_buff *skb``h]j)}(hjʲh]hstruct sk_buff *skb}(hj̲hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȲubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjIJubj)}(hhh]jX)}(hbuffer to reallocateh]hbuffer to reallocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj߲hM hjubah}(h]h ]h"]h$]h&]uh1jhjIJubeh}(h]h ]h"]h$]h&]uh1jhj߲hM hjubj)}(h*``unsigned int headroom`` needed headroom h](j)}(h``unsigned int headroom``h]j)}(hjh]hunsigned int headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hneeded headroomh]hneeded headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj )}(hUnlike skb_realloc_headroom, this one does not allocate a new skb if possible; copies skb->sk to new skb as needed and frees original skb in case of failures. It expect increased headroom and generates warning otherwise.h](jX)}(hUnlike skb_realloc_headroom, this one does not allocate a new skb if possible; copies skb->sk to new skb as needed and frees original skb in case of failures.h]hUnlike skb_realloc_headroom, this one does not allocate a new skb if possible; copies skb->sk to new skb as needed and frees original skb in case of failures.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjTubjX)}(h=It expect increased headroom and generates warning otherwise.h]h=It expect increased headroom and generates warning otherwise.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjTubeh}(h]h ]h"]h$]h&]uh1j hjfhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_copy_expand (C function)c.skb_copy_expandhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hnstruct sk_buff * skb_copy_expand (const struct sk_buff *skb, int newheadroom, int newtailroom, gfp_t gfp_mask)h]h)}(hlstruct sk_buff *skb_copy_expand(const struct sk_buff *skb, int newheadroom, int newtailroom, gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jskb_copy_expandsbc.skb_copy_expandasbuh1hhjhhhjhM ubj)}(h h]h }(hjܳhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM ubj)}(hskb_copy_expandh]j%)}(hjٳh]hskb_copy_expand}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(hM(const struct sk_buff *skb, int newheadroom, int newtailroom, gfp_t gfp_mask)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j׳c.skb_copy_expandasbuh1hhjubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint newheadroomh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h newheadroomh]h newheadroom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint newtailroomh](j)}(hinth]hint}(hjִhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҴubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҴubj%)}(h newtailroomh]h newtailroom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjҴubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j׳c.skb_copy_expandasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(hcopy and expand sk_buffh]hcopy and expand sk_buff}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjahhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|jxj|jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff *skb`` buffer to copy ``int newheadroom`` new free bytes at head ``int newtailroom`` new free bytes at tail ``gfp_t gfp_mask`` allocation priority **Description** Make a copy of both an :c:type:`sk_buff` and its data and while doing so allocate additional space. This is used when the caller wishes to modify the data and needs a private copy of the data to alter as well as more space for new fields. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1. You must pass ``GFP_ATOMIC`` as the allocation priority if this function is called from an interrupt.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh](j)}(h-``const struct sk_buff *skb`` buffer to copy h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h+``int newheadroom`` new free bytes at head h](j)}(h``int newheadroom``h]j)}(hj޵h]hint newheadroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܵubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjصubj)}(hhh]jX)}(hnew free bytes at headh]hnew free bytes at head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjصubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h+``int newtailroom`` new free bytes at tail h](j)}(h``int newtailroom``h]j)}(hjh]hint newtailroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hnew free bytes at tailh]hnew free bytes at tail}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hM hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM hjubj)}(h'``gfp_t gfp_mask`` allocation priority h](j)}(h``gfp_t gfp_mask``h]j)}(hjPh]hgfp_t gfp_mask}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjJubj)}(hhh]jX)}(hallocation priorityh]hallocation priority}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj )}(hXMake a copy of both an :c:type:`sk_buff` and its data and while doing so allocate additional space. This is used when the caller wishes to modify the data and needs a private copy of the data to alter as well as more space for new fields. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1. You must pass ``GFP_ATOMIC`` as the allocation priority if this function is called from an interrupt.h](jX)}(hcMake a copy of both an :c:type:`sk_buff` and its data and while doing so allocate additional space.h](hMake a copy of both an }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubh; and its data and while doing so allocate additional space.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj̶hM hjubjX)}(hThis is used when the caller wishes to modify the data and needs a private copy of the data to alter as well as more space for new fields. Returns ``NULL`` on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.h](hThis is used when the caller wishes to modify the data and needs a private copy of the data to alter as well as more space for new fields. Returns }(hj׶hhhNhNubj)}(h``NULL``h]hNULL}(hj߶hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׶ubhd on failure or the pointer to the buffer on success. The returned buffer has a reference count of 1.}(hj׶hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubjX)}(heYou must pass ``GFP_ATOMIC`` as the allocation priority if this function is called from an interrupt.h](hYou must pass }(hjhhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhI as the allocation priority if this function is called from an interrupt.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubeh}(h]h ]h"]h$]h&]uh1j hj̶hM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_pad (C function) c.__skb_padhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h@int __skb_pad (struct sk_buff *skb, int pad, bool free_on_error)h]h)}(h?int __skb_pad(struct sk_buff *skb, int pad, bool free_on_error)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhjMhM ubj)}(h __skb_padh]j%)}(h __skb_padh]h __skb_pad}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhjMhM ubj)}(h2(struct sk_buff *skb, int pad, bool free_on_error)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjbsb c.__skb_padasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hjȷhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(hskbh]hskb}(hjշhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hint padh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hpadh]hpad}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hbool free_on_errorh](j)}(hjTh]hbool}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h free_on_errorh]h free_on_error}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubeh}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhjMhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhjMhM ubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhM hj4hhubjS)}(hhh]jX)}(hzero pad the tail of an skbh]hzero pad the tail of an skb}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjehhubah}(h]h ]h"]h$]h&]uh1jRhj4hhhjMhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to pad ``int pad`` space to pad ``bool free_on_error`` free buffer on error **Description** Ensure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire. May return error in out of memory cases. The skb is freed on error if **free_on_error** is true.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(h buffer to padh]h buffer to pad}(hj¸hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``int pad`` space to pad h](j)}(h ``int pad``h]j)}(hjh]hint pad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjܸubj)}(hhh]jX)}(h space to padh]h space to pad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjܸubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h,``bool free_on_error`` free buffer on error h](j)}(h``bool free_on_error``h]j)}(hjh]hbool free_on_error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hfree buffer on errorh]hfree buffer on error}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hM hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj )}(hXEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire. May return error in out of memory cases. The skb is freed on error if **free_on_error** is true.h](jX)}(hEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire.h]hEnsure that a buffer is followed by a padding area that is zero filled. Used by network drivers which may DMA or transfer data beyond the buffer end onto the wire.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjlubjX)}(h`May return error in out of memory cases. The skb is freed on error if **free_on_error** is true.h](hFMay return error in out of memory cases. The skb is freed on error if }(hjhhhNhNubj)}(h**free_on_error**h]h free_on_error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is true.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjlubeh}(h]h ]h"]h$]h&]uh1j hj~hM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpskb_put (C function) c.pskb_puthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hDvoid * pskb_put (struct sk_buff *skb, struct sk_buff *tail, int len)h]h)}(hBvoid *pskb_put(struct sk_buff *skb, struct sk_buff *tail, int len)h](j)}(hvoidh]hvoid}(hjƹhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj¹hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9 ubj)}(h h]h }(hjչhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj¹hhhjԹhM9 ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj¹hhhjԹhM9 ubj)}(hpskb_puth]j%)}(hpskb_puth]hpskb_put}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj¹hhhjԹhM9 ubj)}(h4(struct sk_buff *skb, struct sk_buff *tail, int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj0modnameN classnameNjj!)}j$]j')}jjsb c.pskb_putasbuh1hhj ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hskbh]hskb}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *tailh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jJ c.pskb_putasbuh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hj̺hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(htailh]htail}(hjٺhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj¹hhhjԹhM9 ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjԹhM9 ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjԹhM9 hjhhubjS)}(hhh]jX)}(h7add data to the tail of a potentially fragmented bufferh]h7add data to the tail of a potentially fragmented buffer}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9 hj5hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjԹhM9 ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjPjxjPjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` start of the buffer to use ``struct sk_buff *tail`` tail fragment of the buffer to use ``int len`` amount of data to add **Description** This function extends the used data area of the potentially fragmented buffer. **tail** must be the last fragment of **skb** -- or **skb** itself. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM= hjTubj)}(hhh](j)}(h3``struct sk_buff *skb`` start of the buffer to use h](j)}(h``struct sk_buff *skb``h]j)}(hjyh]hstruct sk_buff *skb}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM: hjsubj)}(hhh]jX)}(hstart of the buffer to useh]hstart of the buffer to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM: hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM: hjpubj)}(h<``struct sk_buff *tail`` tail fragment of the buffer to use h](j)}(h``struct sk_buff *tail``h]j)}(hjh]hstruct sk_buff *tail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM; hjubj)}(hhh]jX)}(h"tail fragment of the buffer to useh]h"tail fragment of the buffer to use}(hj˻hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjǻhM; hjȻubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǻhM; hjpubj)}(h"``int len`` amount of data to add h](j)}(h ``int len``h]j)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM< hjubj)}(hhh]jX)}(hamount of data to addh]hamount of data to add}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM< hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM< hjpubeh}(h]h ]h"]h$]h&]uh1jhjTubjX)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM> hjTubj )}(hXThis function extends the used data area of the potentially fragmented buffer. **tail** must be the last fragment of **skb** -- or **skb** itself. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h]jX)}(hXThis function extends the used data area of the potentially fragmented buffer. **tail** must be the last fragment of **skb** -- or **skb** itself. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h](hOThis function extends the used data area of the potentially fragmented buffer. }(hj@hhhNhNubj)}(h**tail**h]htail}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh must be the last fragment of }(hj@hhhNhNubj)}(h**skb**h]hskb}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh -- or }(hj@hhhNhNubj)}(h**skb**h]hskb}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh itself. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM= hj<ubah}(h]h ]h"]h$]h&]uh1j hjhM= hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_put (C function) c.skb_puthNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6void * skb_put (struct sk_buff *skb, unsigned int len)h]h)}(h4void *skb_put(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMP ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMP ubj;)}(hj>h]h*}(hjȼhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMP ubj)}(hskb_puth]j%)}(hskb_puth]hskb_put}(hjټhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjռubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMP ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjۼsb c.skb_putasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMP ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMP ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMP hjhhubjS)}(hhh]jX)}(hadd data to a bufferh]hadd data to a buffer}(hjɽhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMP hjƽhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMP ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX;**Parameters** ``struct sk_buff *skb`` buffer to use ``unsigned int len`` amount of data to add **Description** This function extends the used data area of the buffer. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMT hjubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to use h](j)}(h``struct sk_buff *skb``h]j)}(hj h]hstruct sk_buff *skb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMQ hjubj)}(hhh]jX)}(h buffer to useh]h buffer to use}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQ hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQ hjubj)}(h+``unsigned int len`` amount of data to add h](j)}(h``unsigned int len``h]j)}(hjCh]hunsigned int len}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMR hj=ubj)}(hhh]jX)}(hamount of data to addh]hamount of data to add}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhMR hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMR hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMT hjubj )}(hThis function extends the used data area of the buffer. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h]jX)}(hThis function extends the used data area of the buffer. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.h]hThis function extends the used data area of the buffer. If this would exceed the total buffer size the kernel will panic. A pointer to the first byte of the extra data is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMS hjubah}(h]h ]h"]h$]h&]uh1j hjhMS hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_push (C function) c.skb_pushhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h7void * skb_push (struct sk_buff *skb, unsigned int len)h]h)}(h5void *skb_push(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɾhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMe ubj)}(h h]h }(hjܾhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjɾhhhj۾hMe ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjɾhhhj۾hMe ubj)}(hskb_pushh]j%)}(hskb_pushh]hskb_push}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjɾhhhj۾hMe ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jjsb c.skb_pushasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjɾhhhj۾hMe ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjžhhhj۾hMe ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj۾hMe hj¾hhubjS)}(hhh]jX)}(h!add data to the start of a bufferh]h!add data to the start of a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMe hjhhubah}(h]h ]h"]h$]h&]uh1jRhj¾hhhj۾hMe ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXS**Parameters** ``struct sk_buff *skb`` buffer to use ``unsigned int len`` amount of data to add **Description** This function extends the used data area of the buffer at the buffer start. If this would exceed the total buffer headroom the kernel will panic. A pointer to the first byte of the extra data is returned.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMi hjubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to use h](j)}(h``struct sk_buff *skb``h]j)}(hj,h]hstruct sk_buff *skb}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMf hj&ubj)}(hhh]jX)}(h buffer to useh]h buffer to use}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhMf hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMf hj#ubj)}(h+``unsigned int len`` amount of data to add h](j)}(h``unsigned int len``h]j)}(hjeh]hunsigned int len}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMg hj_ubj)}(hhh]jX)}(hamount of data to addh]hamount of data to add}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMg hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMg hj#ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMi hjubj )}(hThis function extends the used data area of the buffer at the buffer start. If this would exceed the total buffer headroom the kernel will panic. A pointer to the first byte of the extra data is returned.h]jX)}(hThis function extends the used data area of the buffer at the buffer start. If this would exceed the total buffer headroom the kernel will panic. A pointer to the first byte of the extra data is returned.h]hThis function extends the used data area of the buffer at the buffer start. If this would exceed the total buffer headroom the kernel will panic. A pointer to the first byte of the extra data is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMh hjubah}(h]h ]h"]h$]h&]uh1j hjhMh hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_pull (C function) c.skb_pullhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h7void * skb_pull (struct sk_buff *skb, unsigned int len)h]h)}(h5void *skb_pull(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMx ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMx ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMx ubj)}(hskb_pullh]j%)}(hskb_pullh]hskb_pull}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMx ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjYmodnameN classnameNjj!)}j$]j')}jjsb c.skb_pullasbuh1hhj5ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj5ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMx ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMx ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMx hjhhubjS)}(hhh]jX)}(h&remove data from the start of a bufferh]h&remove data from the start of a buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMx hj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMx ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhj[hNhNubj})}(hXj**Parameters** ``struct sk_buff *skb`` buffer to use ``unsigned int len`` amount of data to remove **Description** This function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the next data in the buffer is returned. Once the data has been pulled future pushes will overwrite the old data.h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM| hj)ubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to use h](j)}(h``struct sk_buff *skb``h]j)}(hjNh]hstruct sk_buff *skb}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMy hjHubj)}(hhh]jX)}(h buffer to useh]h buffer to use}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMy hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMy hjEubj)}(h.``unsigned int len`` amount of data to remove h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMz hjubj)}(hhh]jX)}(hamount of data to removeh]hamount of data to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMz hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMz hjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM| hj)ubj )}(hThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the next data in the buffer is returned. Once the data has been pulled future pushes will overwrite the old data.h]jX)}(hThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the next data in the buffer is returned. Once the data has been pulled future pushes will overwrite the old data.h]hThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the next data in the buffer is returned. Once the data has been pulled future pushes will overwrite the old data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM{ hjubah}(h]h ]h"]h$]h&]uh1j hjhM{ hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_pull_data (C function)c.skb_pull_datahNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6void * skb_pull_data (struct sk_buff *skb, size_t len)h]h)}(h4void *skb_pull_data(struct sk_buff *skb, size_t len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhM ubj;)}(hj>h]h*}(hj.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhhjhM ubj)}(h skb_pull_datah]j%)}(h skb_pull_datah]h skb_pull_data}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhM ubj)}(h!(struct sk_buff *skb, size_t len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]j')}jjAsbc.skb_pull_dataasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(h size_t lenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_pull_dataasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(hGremove data from the start of a buffer returning its original position.h]hGremove data from the start of a buffer returning its original position.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj#hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to use ``size_t len`` amount of data to remove **Description** This function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the original data in the buffer is returned after checking if there is enough data to pull. Once the data has been pulled future pushes will overwrite the old data.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjBubj)}(hhh](j)}(h&``struct sk_buff *skb`` buffer to use h](j)}(h``struct sk_buff *skb``h]j)}(hjgh]hstruct sk_buff *skb}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjaubj)}(hhh]jX)}(h buffer to useh]h buffer to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj^ubj)}(h(``size_t len`` amount of data to remove h](j)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hamount of data to removeh]hamount of data to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjBubj )}(hXThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the original data in the buffer is returned after checking if there is enough data to pull. Once the data has been pulled future pushes will overwrite the old data.h]jX)}(hXThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the original data in the buffer is returned after checking if there is enough data to pull. Once the data has been pulled future pushes will overwrite the old data.h]hXThis function removes data from the start of a buffer, returning the memory to the headroom. A pointer to the original data in the buffer is returned after checking if there is enough data to pull. Once the data has been pulled future pushes will overwrite the old data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_trim (C function) c.skb_trimhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h5void skb_trim (struct sk_buff *skb, unsigned int len)h]h)}(h4void skb_trim(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj8hM ubj)}(hskb_trimh]j%)}(hskb_trimh]hskb_trim}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj8hM ubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjMsb c.skb_trimasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj8hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj8hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hM hjhhubjS)}(hhh]jX)}(hremove end from a bufferh]hremove end from a buffer}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj8hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj8hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjSjxjSjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to alter ``unsigned int len`` new length **Description** Cut the length of a buffer down by removing data from the tail. If the buffer is already under the length specified it is not modified. The skb must be linear.h](jX)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjWubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hj|h]hstruct sk_buff *skb}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjvubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM hjsubj)}(h ``unsigned int len`` new length h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(h new lengthh]h new length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjsubeh}(h]h ]h"]h$]h&]uh1jhjWubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjWubj )}(hCut the length of a buffer down by removing data from the tail. If the buffer is already under the length specified it is not modified. The skb must be linear.h]jX)}(hCut the length of a buffer down by removing data from the tail. If the buffer is already under the length specified it is not modified. The skb must be linear.h]hCut the length of a buffer down by removing data from the tail. If the buffer is already under the length specified it is not modified. The skb must be linear.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__pskb_pull_tail (C function)c.__pskb_pull_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h8void * __pskb_pull_tail (struct sk_buff *skb, int delta)h]h)}(h6void *__pskb_pull_tail(struct sk_buff *skb, int delta)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhjMhM ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;hhhjMhM ubj)}(h__pskb_pull_tailh]j%)}(h__pskb_pull_tailh]h__pskb_pull_tail}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhjMhM ubj)}(h (struct sk_buff *skb, int delta)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjosbc.__pskb_pull_tailasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int deltah](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdeltah]hdelta}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhjMhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhjMhM ubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhM hj4hhubjS)}(hhh]jX)}(hadvance tail of skb headerh]hadvance tail of skb header}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj>hhubah}(h]h ]h"]h$]h&]uh1jRhj4hhhjMhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjYjxjYjyjzj{uh1hhhhj[hNhNubj})}(hX_**Parameters** ``struct sk_buff *skb`` buffer to reallocate ``int delta`` number of bytes to advance tail **Description** The function makes a sense only on a fragmented :c:type:`sk_buff`, it expands header moving its tail forward and copying necessary data from fragmented part. :c:type:`sk_buff` MUST have reference count of 1. Returns ``NULL`` (and :c:type:`sk_buff` does not change) if pull failed or value of new tail of skb in the case of success. All the pointers pointing into skb header may change and must be reloaded after call to this function.h](jX)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM! hj]ubj)}(hhh](j)}(h-``struct sk_buff *skb`` buffer to reallocate h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj|ubj)}(hhh]jX)}(hbuffer to reallocateh]hbuffer to reallocate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjyubj)}(h.``int delta`` number of bytes to advance tail h](j)}(h ``int delta``h]j)}(hjh]h int delta}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hnumber of bytes to advance tailh]hnumber of bytes to advance tail}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjyubeh}(h]h ]h"]h$]h&]uh1jhj]ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM! hj]ubj )}(hXThe function makes a sense only on a fragmented :c:type:`sk_buff`, it expands header moving its tail forward and copying necessary data from fragmented part. :c:type:`sk_buff` MUST have reference count of 1. Returns ``NULL`` (and :c:type:`sk_buff` does not change) if pull failed or value of new tail of skb in the case of success. All the pointers pointing into skb header may change and must be reloaded after call to this function.h](jX)}(hThe function makes a sense only on a fragmented :c:type:`sk_buff`, it expands header moving its tail forward and copying necessary data from fragmented part.h](h0The function makes a sense only on a fragmented }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubh\, it expands header moving its tail forward and copying necessary data from fragmented part.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj7hM hj ubjX)}(h1:c:type:`sk_buff` MUST have reference count of 1.h](h)}(h:c:type:`sk_buff`h]j)}(hjHh]hsk_buff}(hjJhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM$ hjBubh MUST have reference count of 1.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjehM$ hj ubjX)}(h{Returns ``NULL`` (and :c:type:`sk_buff` does not change) if pull failed or value of new tail of skb in the case of success.h](hReturns }(hjphhhNhNubj)}(h``NULL``h]hNULL}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh (and }(hjphhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM& hjpubhT does not change) if pull failed or value of new tail of skb in the case of success.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM& hj ubjX)}(hfAll the pointers pointing into skb header may change and must be reloaded after call to this function.h]hfAll the pointers pointing into skb header may change and must be reloaded after call to this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM) hj ubeh}(h]h ]h"]h$]h&]uh1j hj7hM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_copy_bits (C function)c.skb_copy_bitshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hLint skb_copy_bits (const struct sk_buff *skb, int offset, void *to, int len)h]h)}(hKint skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(h skb_copy_bitsh]j%)}(h skb_copy_bitsh]h skb_copy_bits}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h:(const struct sk_buff *skb, int offset, void *to, int len)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j')}jj sbc.skb_copy_bitsasbuh1hhj"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int offseth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *toh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(htoh]hto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj%)}(hlenh]hlen}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h#copy bits from skb to kernel bufferh]h#copy bits from skb to kernel buffer}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjmhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``const struct sk_buff *skb`` source skb ``int offset`` offset in source ``void *to`` destination buffer ``int len`` number of bytes to copy **Description** Copy the specified number of bytes from the source skb to the destination buffer. CAUTION ! : If its prototype is ever changed, check arch/{*}/net/{*}.S files, since it is called from BPF assembly code.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh](j)}(h)``const struct sk_buff *skb`` source skb h](j)}(h``const struct sk_buff *skb``h]j)}(hjh]hconst struct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(h source skbh]h source skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h ``int offset`` offset in source h](j)}(h``int offset``h]j)}(hjh]h int offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hoffset in sourceh]hoffset in source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h ``void *to`` destination buffer h](j)}(h ``void *to``h]j)}(hj#h]hvoid *to}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hdestination bufferh]hdestination buffer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM hjubj)}(h$``int len`` number of bytes to copy h](j)}(h ``int len``h]j)}(hj\h]hint len}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjVubj)}(hhh]jX)}(hnumber of bytes to copyh]hnumber of bytes to copy}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhM hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj )}(hCopy the specified number of bytes from the source skb to the destination buffer. CAUTION ! : If its prototype is ever changed, check arch/{*}/net/{*}.S files, since it is called from BPF assembly code.h](jX)}(hQCopy the specified number of bytes from the source skb to the destination buffer.h]hQCopy the specified number of bytes from the source skb to the destination buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]j)}(hxCAUTION ! : If its prototype is ever changed, check arch/{*}/net/{*}.S files, since it is called from BPF assembly code.h](j)}(h CAUTION ! :h]h CAUTION ! :}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hlIf its prototype is ever changed, check arch/{*}/net/{*}.S files, since it is called from BPF assembly code.h]hlIf its prototype is ever changed, check arch/{*}/net/{*}.S files, since it is called from BPF assembly code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_store_bits (C function)c.skb_store_bitshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hOint skb_store_bits (struct sk_buff *skb, int offset, const void *from, int len)h]h)}(hNint skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMg ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj.hMg ubj)}(hskb_store_bitsh]j%)}(hskb_store_bitsh]hskb_store_bits}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj.hMg ubj)}(h<(struct sk_buff *skb, int offset, const void *from, int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j')}jjCsbc.skb_store_bitsasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(h int offseth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(hconst void *fromh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfromh]hfrom}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(hint lenh](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj%)}(hlenh]hlen}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj.hMg ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj.hMg ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.hMg hjhhubjS)}(hhh]jX)}(h$store bits from kernel buffer to skbh]h$store bits from kernel buffer to skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMg hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj.hMg ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXu**Parameters** ``struct sk_buff *skb`` destination buffer ``int offset`` offset in destination ``const void *from`` source buffer ``int len`` number of bytes to copy **Description** Copy the specified number of bytes from the source buffer to the destination skb. This function handles all the messy bits of traversing fragment lists and such.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMk hjubj)}(hhh](j)}(h+``struct sk_buff *skb`` destination buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMh hjubj)}(hhh]jX)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMh hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMh hjubj)}(h%``int offset`` offset in destination h](j)}(h``int offset``h]j)}(hj!h]h int offset}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMi hjubj)}(hhh]jX)}(hoffset in destinationh]hoffset in destination}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMi hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMi hjubj)}(h#``const void *from`` source buffer h](j)}(h``const void *from``h]j)}(hjZh]hconst void *from}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMj hjTubj)}(hhh]jX)}(h source bufferh]h source buffer}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjohMj hjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMj hjubj)}(h$``int len`` number of bytes to copy h](j)}(h ``int len``h]j)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMk hjubj)}(hhh]jX)}(hnumber of bytes to copyh]hnumber of bytes to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMk hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMk hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMm hjubj )}(hCopy the specified number of bytes from the source buffer to the destination skb. This function handles all the messy bits of traversing fragment lists and such.h]jX)}(hCopy the specified number of bytes from the source buffer to the destination skb. This function handles all the messy bits of traversing fragment lists and such.h]hCopy the specified number of bytes from the source buffer to the destination skb. This function handles all the messy bits of traversing fragment lists and such.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMl hjubah}(h]h ]h"]h$]h&]uh1j hjhMl hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_zerocopy (C function)c.skb_zerocopyhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hNint skb_zerocopy (struct sk_buff *to, struct sk_buff *from, int len, int hlen)h]h)}(hMint skb_zerocopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj+hM ubj)}(h skb_zerocopyh]j%)}(h skb_zerocopyh]h skb_zerocopy}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj+hM ubj)}(h=(struct sk_buff *to, struct sk_buff *from, int len, int hlen)h](j)}(hstruct sk_buff *toh](h)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]j')}jj@sbc.skb_zerocopyasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj%)}(htoh]hto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(hstruct sk_buff *fromh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_zerocopyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfromh]hfrom}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(hint lenh](j)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj%)}(hlenh]hlen}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(hint hlenh](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj%)}(hhlenh]hhlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj+hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj+hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj+hM hjhhubjS)}(hhh]jX)}(hZero copy skb to skbh]hZero copy skb to skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj+hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *to`` destination buffer ``struct sk_buff *from`` source buffer ``int len`` number of bytes to copy from source buffer ``int hlen`` size of linear headroom in destination buffer **Description** Copies up to `len` bytes from `from` to `to` by creating references to the frags in the source buffer. The `hlen` as calculated by skb_zerocopy_headlen() specifies the headroom in the `to` buffer. Return value: 0: everything is OK -ENOMEM: couldn't orphan frags of **from** due to lack of memory -EFAULT: skb_copy_bits() found some problem with skb geometryh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h*``struct sk_buff *to`` destination buffer h](j)}(h``struct sk_buff *to``h]j)}(hjh]hstruct sk_buff *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hjubj)}(hhh]jX)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h'``struct sk_buff *from`` source buffer h](j)}(h``struct sk_buff *from``h]j)}(hj1h]hstruct sk_buff *from}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj+ubj)}(hhh]jX)}(h source bufferh]h source buffer}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjubj)}(h7``int len`` number of bytes to copy from source buffer h](j)}(h ``int len``h]j)}(hjjh]hint len}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjdubj)}(hhh]jX)}(h*number of bytes to copy from source bufferh]h*number of bytes to copy from source buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``int hlen`` size of linear headroom in destination buffer h](j)}(h ``int hlen``h]j)}(hjh]hint hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h-size of linear headroom in destination bufferh]h-size of linear headroom in destination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hXgCopies up to `len` bytes from `from` to `to` by creating references to the frags in the source buffer. The `hlen` as calculated by skb_zerocopy_headlen() specifies the headroom in the `to` buffer. Return value: 0: everything is OK -ENOMEM: couldn't orphan frags of **from** due to lack of memory -EFAULT: skb_copy_bits() found some problem with skb geometryh](jX)}(hfCopies up to `len` bytes from `from` to `to` by creating references to the frags in the source buffer.h](h Copies up to }(hjhhhNhNubhtitle_reference)}(h`len`h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bytes from }(hjhhhNhNubj)}(h`from`h]hfrom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to }(hjhhhNhNubj)}(h`to`h]hto}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: by creating references to the frags in the source buffer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(h]The `hlen` as calculated by skb_zerocopy_headlen() specifies the headroom in the `to` buffer.h](hThe }(hj?hhhNhNubj)}(h`hlen`h]hhlen}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubhG as calculated by skb_zerocopy_headlen() specifies the headroom in the }(hj?hhhNhNubj)}(h`to`h]hto}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh buffer.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hReturn value: 0: everything is OK -ENOMEM: couldn't orphan frags of **from** due to lack of memory -EFAULT: skb_copy_bits() found some problem with skb geometryh](hFReturn value: 0: everything is OK -ENOMEM: couldn’t orphan frags of }(hjrhhhNhNubj)}(h**from**h]hfrom}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubhT due to lack of memory -EFAULT: skb_copy_bits() found some problem with skb geometry}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hj>hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dequeue (C function) c.skb_dequeuehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h8struct sk_buff * skb_dequeue (struct sk_buff_head *list)h]h)}(h6struct sk_buff *skb_dequeue(struct sk_buff_head *list)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j skb_dequeuesb c.skb_dequeueasbuh1hhjhhhjhMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMuubj)}(h skb_dequeueh]j%)}(hjh]h skb_dequeue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMuubj)}(h(struct sk_buff_head *list)h]j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]j c.skb_dequeueasbuh1hhj/ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMuubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMuhjhhubjS)}(hhh]jX)}(h!remove from the head of the queueh]h!remove from the head of the queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff_head *list`` list to dequeue from **Description** Remove the head of the list. The list lock is taken so the function may be used safely with other locking list functions. The head item is returned or ``NULL`` if the list is empty.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMyhjubj)}(hhh]j)}(h3``struct sk_buff_head *list`` list to dequeue from h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMvhjubj)}(hhh]jX)}(hlist to dequeue fromh]hlist to dequeue from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMvhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMvhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMxhjubj )}(hRemove the head of the list. The list lock is taken so the function may be used safely with other locking list functions. The head item is returned or ``NULL`` if the list is empty.h]jX)}(hRemove the head of the list. The list lock is taken so the function may be used safely with other locking list functions. The head item is returned or ``NULL`` if the list is empty.h](hRemove the head of the list. The list lock is taken so the function may be used safely with other locking list functions. The head item is returned or }(hjJhhhNhNubj)}(h``NULL``h]hNULL}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh if the list is empty.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMwhjFubah}(h]h ]h"]h$]h&]uh1j hjjhMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_dequeue_tail (C function)c.skb_dequeue_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=struct sk_buff * skb_dequeue_tail (struct sk_buff_head *list)h]h)}(h;struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jskb_dequeue_tailsbc.skb_dequeue_tailasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hskb_dequeue_tailh]j%)}(hjh]hskb_dequeue_tail}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff_head *list)h]j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]jc.skb_dequeue_tailasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hlisth]hlist}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h!remove from the tail of the queueh]h!remove from the tail of the queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff_head *list`` list to dequeue from **Description** Remove the tail of the list. The list lock is taken so the function may be used safely with other locking list functions. The tail item is returned or ``NULL`` if the list is empty.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(h3``struct sk_buff_head *list`` list to dequeue from h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hlist to dequeue fromh]hlist to dequeue from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hRemove the tail of the list. The list lock is taken so the function may be used safely with other locking list functions. The tail item is returned or ``NULL`` if the list is empty.h]jX)}(hRemove the tail of the list. The list lock is taken so the function may be used safely with other locking list functions. The tail item is returned or ``NULL`` if the list is empty.h](hRemove the tail of the list. The list lock is taken so the function may be used safely with other locking list functions. The tail item is returned or }(hj"hhhNhNubj)}(h``NULL``h]hNULL}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh if the list is empty.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1j hjBhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#skb_queue_purge_reason (C function)c.skb_queue_purge_reasonhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hTvoid skb_queue_purge_reason (struct sk_buff_head *list, enum skb_drop_reason reason)h]h)}(hSvoid skb_queue_purge_reason(struct sk_buff_head *list, enum skb_drop_reason reason)h](j)}(hvoidh]hvoid}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjehhhjwhMubj)}(hskb_queue_purge_reasonh]j%)}(hskb_queue_purge_reasonh]hskb_queue_purge_reason}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjehhhjwhMubj)}(h8(struct sk_buff_head *list, enum skb_drop_reason reason)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_queue_purge_reasonasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(henum skb_drop_reason reasonh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hskb_drop_reasonh]hskb_drop_reason}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj8modnameN classnameNjj!)}j$]jc.skb_queue_purge_reasonasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hreasonh]hreason}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjwhMubah}(h]j\ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwhMhj^hhubjS)}(hhh]jX)}(h empty a listh]h empty a list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj^hhhjwhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX\**Parameters** ``struct sk_buff_head *list`` list to empty ``enum skb_drop_reason reason`` drop reason **Description** Delete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function takes the list lock and is atomic with respect to other list locking functions.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h,``struct sk_buff_head *list`` list to empty h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h list to emptyh]h list to empty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``enum skb_drop_reason reason`` drop reason h](j)}(h``enum skb_drop_reason reason``h]j)}(hjh]henum skb_drop_reason reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h drop reasonh]h drop reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hDelete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function takes the list lock and is atomic with respect to other list locking functions.h]jX)}(hDelete all buffers on an :c:type:`sk_buff` list. Each buffer is removed from the list and one reference dropped. This function takes the list lock and is atomic with respect to other list locking functions.h](hDelete all buffers on an }(hj[hhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjeh]hsk_buff}(hjghhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj[ubh list. Each buffer is removed from the list and one reference dropped. This function takes the list lock and is atomic with respect to other list locking functions.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjWubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_head (C function)c.skb_queue_headhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hFvoid skb_queue_head (struct sk_buff_head *list, struct sk_buff *newsk)h]h)}(hEvoid skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_queue_headh]j%)}(hskb_queue_headh]hskb_queue_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h2(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_queue_headasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hlisth]hlist}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j*c.skb_queue_headasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hnewskh]hnewsk}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hqueue a buffer at the list headh]hqueue a buffer at the list head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hXa**Parameters** ``struct sk_buff_head *list`` list to use ``struct sk_buff *newsk`` buffer to queue **Description** Queue a buffer at the start of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hj$h]hstruct sk_buff_head *list}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h list to useh]h list to use}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h*``struct sk_buff *newsk`` buffer to queue h](j)}('h``struct sk_buff *newsk``h]j)}(hj]h]hstruct sk_buff *newsk}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjWubj)}(hhh]jX)}(hbuffer to queueh]hbuffer to queue}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hQueue a buffer at the start of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely. A buffer cannot be placed on two lists at the same time.h](jX)}(hQueue a buffer at the start of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely.h](huQueue a buffer at the start of the list. This function takes the list lock and can be used safely with other locking }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hjh]hsk_buff}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubh functions safely.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubjX)}(h8A buffer cannot be placed on two lists at the same time.h]h8A buffer cannot be placed on two lists at the same time.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_queue_tail (C function)c.skb_queue_tailhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hFvoid skb_queue_tail (struct sk_buff_head *list, struct sk_buff *newsk)h]h)}(hEvoid skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj'hMubj)}(hskb_queue_tailh]j%)}(hskb_queue_tailh]hskb_queue_tail}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj'hMubj)}(h2(struct sk_buff_head *list, struct sk_buff *newsk)h](j)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j')}jj<sbc.skb_queue_tailasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_queue_tailasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnewskh]hnewsk}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj'hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj'hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMhjhhubjS)}(hhh]jX)}(hqueue a buffer at the list tailh]hqueue a buffer at the list tail}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj'hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjajxjajyjzj{uh1hhhhj[hNhNubj})}(hX`**Parameters** ``struct sk_buff_head *list`` list to use ``struct sk_buff *newsk`` buffer to queue **Description** Queue a buffer at the tail of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjeubj)}(hhh](j)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h list to useh]h list to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``struct sk_buff *newsk`` buffer to queue h](j)}(h``struct sk_buff *newsk``h]j)}(hjh]hstruct sk_buff *newsk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to queueh]hbuffer to queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjeubj )}(hQueue a buffer at the tail of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely. A buffer cannot be placed on two lists at the same time.h](jX)}(hQueue a buffer at the tail of the list. This function takes the list lock and can be used safely with other locking :c:type:`sk_buff` functions safely.h](htQueue a buffer at the tail of the list. This function takes the list lock and can be used safely with other locking }(hjhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj"h]hsk_buff}(hj$hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubh functions safely.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj?hMhjubjX)}(h8A buffer cannot be placed on two lists at the same time.h]h8A buffer cannot be placed on two lists at the same time.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ]h"]h$]h&]uh1j hj?hMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_unlink (C function) c.skb_unlinkhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h@void skb_unlink (struct sk_buff *skb, struct sk_buff_head *list)h]h)}(h?void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{hhhjhMubj)}(h skb_unlinkh]j%)}(h skb_unlinkh]h skb_unlink}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj{hhhjhMubj)}(h0(struct sk_buff *skb, struct sk_buff_head *list)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.skb_unlinkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j c.skb_unlinkasbuh1hhj*ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hlisth]hlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjwhhhjhMubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjthhubjS)}(hhh]jX)}(hremove a buffer from a listh]hremove a buffer from a list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjthhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX***Parameters** ``struct sk_buff *skb`` buffer to remove ``struct sk_buff_head *list`` list to use **Description** Remove a packet from a list. The list locks are taken and this function is atomic with respect to other list locked calls You must know what list the SKB is on.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h)``struct sk_buff *skb`` buffer to remove h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to removeh]hbuffer to remove}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hj)h]hstruct sk_buff_head *list}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj#ubj)}(hhh]jX)}(h list to useh]h list to use}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hRemove a packet from a list. The list locks are taken and this function is atomic with respect to other list locked calls You must know what list the SKB is on.h](jX)}(hyRemove a packet from a list. The list locks are taken and this function is atomic with respect to other list locked callsh]hyRemove a packet from a list. The list locks are taken and this function is atomic with respect to other list locked calls}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjzubjX)}(h&You must know what list the SKB is on.h]h&You must know what list the SKB is on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjzubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_append (C function) c.skb_appendhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hWvoid skb_append (struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list)h]h)}(hVvoid skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM'ubj)}(h skb_appendh]j%)}(h skb_appendh]h skb_append}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM'ubj)}(hG(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list)h](j)}(hstruct sk_buff *oldh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.skb_appendasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(holdh]hold}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *newskh](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j9 c.skb_appendasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjmubj%)}(hnewskh]hnewsk}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff_head *listh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j9 c.skb_appendasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hlisth]hlist}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM'ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM'hjhhubjS)}(hhh]jX)}(happend a bufferh]happend a buffer}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM'hj_hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *old`` buffer to insert after ``struct sk_buff *newsk`` buffer to insert ``struct sk_buff_head *list`` list to use **Description** Place a packet after a given packet in a list. The list locks are taken and this function is atomic with respect to other list locked calls. A buffer cannot be placed on two lists at the same time.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM+hj~ubj)}(hhh](j)}(h/``struct sk_buff *old`` buffer to insert after h](j)}(h``struct sk_buff *old``h]j)}(hjh]hstruct sk_buff *old}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM(hjubj)}(hhh]jX)}(hbuffer to insert afterh]hbuffer to insert after}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h+``struct sk_buff *newsk`` buffer to insert h](j)}(h``struct sk_buff *newsk``h]j)}(hjh]hstruct sk_buff *newsk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM)hjubj)}(hhh]jX)}(hbuffer to inserth]hbuffer to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h*``struct sk_buff_head *list`` list to use h](j)}(h``struct sk_buff_head *list``h]j)}(hjh]hstruct sk_buff_head *list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM*hjubj)}(hhh]jX)}(h list to useh]h list to use}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM*hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM*hjubeh}(h]h ]h"]h$]h&]uh1jhj~ubjX)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM,hj~ubj )}(hPlace a packet after a given packet in a list. The list locks are taken and this function is atomic with respect to other list locked calls. A buffer cannot be placed on two lists at the same time.h]jX)}(hPlace a packet after a given packet in a list. The list locks are taken and this function is atomic with respect to other list locked calls. A buffer cannot be placed on two lists at the same time.h]hPlace a packet after a given packet in a list. The list locks are taken and this function is atomic with respect to other list locked calls. A buffer cannot be placed on two lists at the same time.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM+hjfubah}(h]h ]h"]h$]h&]uh1j hjxhM+hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_split (C function) c.skb_splithNtauh1hhj[hhhNhNubh)}(hhh](h)}(hIvoid skb_split (struct sk_buff *skb, struct sk_buff *skb1, const u32 len)h]h)}(hHvoid skb_split(struct sk_buff *skb, struct sk_buff *skb1, const u32 len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM|ubj)}(h skb_splith]j%)}(h skb_splith]h skb_split}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM|ubj)}(h:(struct sk_buff *skb, struct sk_buff *skb1, const u32 len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.skb_splitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *skb1h](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j c.skb_splitasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hskb1h]hskb1}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const u32 lenh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.skb_splitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM|ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM|hjhhubjS)}(hhh]jX)}(h0Split fragmented skb to two parts at length len.h]h0Split fragmented skb to two parts at length len.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM|hj/hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM|ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` the buffer to split ``struct sk_buff *skb1`` the buffer to receive the second part ``const u32 len`` new length for skbh](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjNubj)}(hhh](j)}(h,``struct sk_buff *skb`` the buffer to split h](j)}(h``struct sk_buff *skb``h]j)}(hjsh]hstruct sk_buff *skb}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM}hjmubj)}(hhh]jX)}(hthe buffer to splith]hthe buffer to split}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjjubj)}(h?``struct sk_buff *skb1`` the buffer to receive the second part h](j)}(h``struct sk_buff *skb1``h]j)}(hjh]hstruct sk_buff *skb1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM~hjubj)}(hhh]jX)}(h%the buffer to receive the second parth]h%the buffer to receive the second part}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjjubj)}(h$``const u32 len`` new length for skbh](j)}(h``const u32 len``h]j)}(hjh]h const u32 len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hnew length for skbh]hnew length for skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_prepare_seq_read (C function)c.skb_prepare_seq_readhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hmvoid skb_prepare_seq_read (struct sk_buff *skb, unsigned int from, unsigned int to, struct skb_seq_state *st)h]h)}(hlvoid skb_prepare_seq_read(struct sk_buff *skb, unsigned int from, unsigned int to, struct skb_seq_state *st)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM"ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhjMhM"ubj)}(hskb_prepare_seq_readh]j%)}(hskb_prepare_seq_readh]hskb_prepare_seq_read}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhjMhM"ubj)}(hS(struct sk_buff *skb, unsigned int from, unsigned int to, struct skb_seq_state *st)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjbsbc.skb_prepare_seq_readasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hunsigned int fromh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hfromh]hfrom}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hunsigned int toh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj%)}(htoh]hto}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hstruct skb_seq_state *sth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_seq_stateh]h skb_seq_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_prepare_seq_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsth]hst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubeh}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhjMhM"ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhjMhM"ubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhM"hj4hhubjS)}(hhh]jX)}(h%Prepare a sequential read of skb datah]h%Prepare a sequential read of skb data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM"hjhhubah}(h]h ]h"]h$]h&]uh1jRhj4hhhjMhM"ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhj[hNhNubj})}(hXY**Parameters** ``struct sk_buff *skb`` the buffer to read ``unsigned int from`` lower offset of data to be read ``unsigned int to`` upper offset of data to be read ``struct skb_seq_state *st`` state variable **Description** Initializes the specified state variable. Must be called before invoking skb_seq_read() for the first time.h](jX)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM&hj-ubj)}(hhh](j)}(h+``struct sk_buff *skb`` the buffer to read h](j)}(h``struct sk_buff *skb``h]j)}(hjRh]hstruct sk_buff *skb}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM#hjLubj)}(hhh]jX)}(hthe buffer to readh]hthe buffer to read}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghM#hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM#hjIubj)}(h6``unsigned int from`` lower offset of data to be read h](j)}(h``unsigned int from``h]j)}(hjh]hunsigned int from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM$hjubj)}(hhh]jX)}(hlower offset of data to be readh]hlower offset of data to be read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjIubj)}(h4``unsigned int to`` upper offset of data to be read h](j)}(h``unsigned int to``h]j)}(hjh]hunsigned int to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM%hjubj)}(hhh]jX)}(hupper offset of data to be readh]hupper offset of data to be read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjIubj)}(h,``struct skb_seq_state *st`` state variable h](j)}(h``struct skb_seq_state *st``h]j)}(hjh]hstruct skb_seq_state *st}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM&hjubj)}(hhh]jX)}(hstate variableh]hstate variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjX)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM(hj-ubjX)}(hkInitializes the specified state variable. Must be called before invoking skb_seq_read() for the first time.h]hkInitializes the specified state variable. Must be called before invoking skb_seq_read() for the first time.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM'hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_seq_read (C function)c.skb_seq_readhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h\unsigned int skb_seq_read (unsigned int consumed, const u8 **data, struct skb_seq_state *st)h]h)}(h[unsigned int skb_seq_read(unsigned int consumed, const u8 **data, struct skb_seq_state *st)h](j)}(hunsignedh]hunsigned}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjhM8ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhM8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjhM8ubj)}(h skb_seq_readh]j%)}(h skb_seq_readh]h skb_seq_read}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjhM8ubj)}(hB(unsigned int consumed, const u8 **data, struct skb_seq_state *st)h](j)}(hunsigned int consumedh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hconsumedh]hconsumed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst u8 **datah](h)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubh)}(hhh]j%)}(hu8h]hu8}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]j')}jjsbc.skb_seq_readasbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct skb_seq_state *sth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_seq_stateh]h skb_seq_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jac.skb_seq_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsth]hst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjhM8ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjhM8ubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM8hjrhhubjS)}(hhh]jX)}(hSequentially read skb datah]hSequentially read skb data}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM8hj$hhubah}(h]h ]h"]h$]h&]uh1jRhjrhhhjhM8ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?jxj?jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``unsigned int consumed`` number of bytes consumed by the caller so far ``const u8 **data`` destination pointer for data to be returned ``struct skb_seq_state *st`` state variable **Description** Reads a block of skb data at **consumed** relative to the lower offset specified to skb_prepare_seq_read(). Assigns the head of the data block to **data** and returns the length of the block or 0 if the end of the skb data or the upper offset has been reached. The caller is not required to consume all of the data returned, i.e. **consumed** is typically set to the number of bytes already consumed and the next call to skb_seq_read() will return the remaining part of the block. Note 1: The size of each block of data returned can be arbitrary, this limitation is the cost for zerocopy sequential reads of potentially non linear data. Note 2: Fragment lists within fragments are not implemented at the moment, state->root_skb could be replaced with a stack for this purpose.h](jX)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM<hjCubj)}(hhh](j)}(hH``unsigned int consumed`` number of bytes consumed by the caller so far h](j)}(h``unsigned int consumed``h]j)}(hjhh]hunsigned int consumed}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM9hjbubj)}(hhh]jX)}(h-number of bytes consumed by the caller so farh]h-number of bytes consumed by the caller so far}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hM9hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM9hj_ubj)}(h@``const u8 **data`` destination pointer for data to be returned h](j)}(h``const u8 **data``h]j)}(hjh]hconst u8 **data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM:hjubj)}(hhh]jX)}(h+destination pointer for data to be returnedh]h+destination pointer for data to be returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hj_ubj)}(h,``struct skb_seq_state *st`` state variable h](j)}(h``struct skb_seq_state *st``h]j)}(hjh]hstruct skb_seq_state *st}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM;hjubj)}(hhh]jX)}(hstate variableh]hstate variable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hj_ubeh}(h]h ]h"]h$]h&]uh1jhjCubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM=hjCubjX)}(hXReads a block of skb data at **consumed** relative to the lower offset specified to skb_prepare_seq_read(). Assigns the head of the data block to **data** and returns the length of the block or 0 if the end of the skb data or the upper offset has been reached.h](hReads a block of skb data at }(hj+hhhNhNubj)}(h **consumed**h]hconsumed}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubhi relative to the lower offset specified to skb_prepare_seq_read(). Assigns the head of the data block to }(hj+hhhNhNubj)}(h**data**h]hdata}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubhj and returns the length of the block or 0 if the end of the skb data or the upper offset has been reached.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM<hjCubjX)}(hThe caller is not required to consume all of the data returned, i.e. **consumed** is typically set to the number of bytes already consumed and the next call to skb_seq_read() will return the remaining part of the block.h](hEThe caller is not required to consume all of the data returned, i.e. }(hj^hhhNhNubj)}(h **consumed**h]hconsumed}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh is typically set to the number of bytes already consumed and the next call to skb_seq_read() will return the remaining part of the block.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMBhjCubj)}(hhh](j)}(hNote 1: The size of each block of data returned can be arbitrary, this limitation is the cost for zerocopy sequential reads of potentially non linear data. h](j)}(hANote 1: The size of each block of data returned can be arbitrary,h]hANote 1: The size of each block of data returned can be arbitrary,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMIhjubj)}(hhh]jX)}(hYthis limitation is the cost for zerocopy sequential reads of potentially non linear data.h]hYthis limitation is the cost for zerocopy sequential reads of potentially non linear data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubj)}(hNote 2: Fragment lists within fragments are not implemented at the moment, state->root_skb could be replaced with a stack for this purpose.h](j)}(h;Note 2: Fragment lists within fragments are not implementedh]h;Note 2: Fragment lists within fragments are not implemented}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMLhjubj)}(hhh]jX)}(hOat the moment, state->root_skb could be replaced with a stack for this purpose.h]hOat the moment, state->root_skb could be replaced with a stack for this purpose.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_abort_seq_read (C function)c.skb_abort_seq_readhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h2void skb_abort_seq_read (struct skb_seq_state *st)h]h)}(h1void skb_abort_seq_read(struct skb_seq_state *st)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_abort_seq_readh]j%)}(hskb_abort_seq_readh]hskb_abort_seq_read}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct skb_seq_state *st)h]j)}(hstruct skb_seq_state *sth](h)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(h skb_seq_stateh]h skb_seq_state}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jj,sbc.skb_abort_seq_readasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(hsth]hst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h#Abort a sequential read of skb datah]h#Abort a sequential read of skb data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct skb_seq_state *st`` state variable **Description** Must be called if skb_seq_read() was not called until it returned 0.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(h,``struct skb_seq_state *st`` state variable h](j)}(h``struct skb_seq_state *st``h]j)}(hj h]hstruct skb_seq_state *st}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hstate variableh]hstate variable}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hDMust be called if skb_seq_read() was not called until it returned 0.h]hDMust be called if skb_seq_read() was not called until it returned 0.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_copy_seq_read (C function)c.skb_copy_seq_readhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hOint skb_copy_seq_read (struct skb_seq_state *st, int offset, void *to, int len)h]h)}(hNint skb_copy_seq_read(struct skb_seq_state *st, int offset, void *to, int len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_copy_seq_readh]j%)}(hskb_copy_seq_readh]hskb_copy_seq_read}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h9(struct skb_seq_state *st, int offset, void *to, int len)h](j)}(hstruct skb_seq_state *sth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h skb_seq_stateh]h skb_seq_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_copy_seq_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsth]hst}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int offseth](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj%)}(hoffseth]hoffset}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *toh](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjjubj%)}(htoh]hto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]j}ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h%copy from a skb_seq_state to a bufferh]h%copy from a skb_seq_state to a buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct skb_seq_state *st`` source skb_seq_state ``int offset`` offset in source ``void *to`` destination buffer ``int len`` number of bytes to copy **Description** Copy **len** bytes from **offset** bytes into the source **st** to the destination buffer **to**. `offset` should increase (or be unchanged) with each subsequent call to this function. If offset needs to decrease from the previous use `st` should be reset first. **Return** 0 on success or -EINVAL if the copy ended earlyh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h2``struct skb_seq_state *st`` source skb_seq_state h](j)}(h``struct skb_seq_state *st``h]j)}(hj7h]hstruct skb_seq_state *st}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj1ubj)}(hhh]jX)}(hsource skb_seq_stateh]hsource skb_seq_state}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubj)}(h ``int offset`` offset in source h](j)}(h``int offset``h]j)}(hjph]h int offset}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjjubj)}(hhh]jX)}(hoffset in sourceh]hoffset in source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h ``void *to`` destination buffer h](j)}(h ``void *to``h]j)}(hjh]hvoid *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hdestination bufferh]hdestination buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h$``int len`` number of bytes to copy h](j)}(h ``int len``h]j)}(hjh]hint len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hnumber of bytes to copyh]hnumber of bytes to copy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hXCopy **len** bytes from **offset** bytes into the source **st** to the destination buffer **to**. `offset` should increase (or be unchanged) with each subsequent call to this function. If offset needs to decrease from the previous use `st` should be reset first.h](hCopy }(hj3hhhNhNubj)}(h**len**h]hlen}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh bytes from }(hj3hhhNhNubj)}(h **offset**h]hoffset}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh bytes into the source }(hj3hhhNhNubj)}(h**st**h]hst}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh to the destination buffer }(hj3hhhNhNubj)}(h**to**h]hto}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh. }(hj3hhhNhNubj)}(h`offset`h]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh should increase (or be unchanged) with each subsequent call to this function. If offset needs to decrease from the previous use }(hj3hhhNhNubj)}(h`st`h]hst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh should be reset first.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(h/0 on success or -EINVAL if the copy ended earlyh]h/0 on success or -EINVAL if the copy ended early}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_find_text (C function)c.skb_find_texthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hnunsigned int skb_find_text (struct sk_buff *skb, unsigned int from, unsigned int to, struct ts_config *config)h]h)}(hmunsigned int skb_find_text(struct sk_buff *skb, unsigned int from, unsigned int to, struct ts_config *config)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h skb_find_texth]j%)}(h skb_find_texth]h skb_find_text}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hS(struct sk_buff *skb, unsigned int from, unsigned int to, struct ts_config *config)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j')}jj4sbc.skb_find_textasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(hunsigned int fromh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hfromh]hfrom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(hunsigned int toh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(htoh]hto}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(hstruct ts_config *configh](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(h ts_configh]h ts_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_find_textasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hFind a text pattern in skb datah]hFind a text pattern in skb data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` the buffer to look in ``unsigned int from`` search offset ``unsigned int to`` search limit ``struct ts_config *config`` textsearch configuration **Description** Finds a pattern in the skb data according to the specified textsearch configuration. Use textsearch_next() to retrieve subsequent occurrences of the pattern. Returns the offset to the first occurrence or UINT_MAX if no match was found.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h.``struct sk_buff *skb`` the buffer to look in h](j)}(h``struct sk_buff *skb``h]j)}(hj$h]hstruct sk_buff *skb}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hthe buffer to look inh]hthe buffer to look in}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h$``unsigned int from`` search offset h](j)}(h``unsigned int from``h]j)}(hj]h]hunsigned int from}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjWubj)}(hhh]jX)}(h search offseth]h search offset}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubj)}(h!``unsigned int to`` search limit h](j)}(h``unsigned int to``h]j)}(hjh]hunsigned int to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h search limith]h search limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``struct ts_config *config`` textsearch configuration h](j)}(h``struct ts_config *config``h]j)}(hjh]hstruct ts_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(htextsearch configurationh]htextsearch configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hFinds a pattern in the skb data according to the specified textsearch configuration. Use textsearch_next() to retrieve subsequent occurrences of the pattern. Returns the offset to the first occurrence or UINT_MAX if no match was found.h]hFinds a pattern in the skb data according to the specified textsearch configuration. Use textsearch_next() to retrieve subsequent occurrences of the pattern. Returns the offset to the first occurrence or UINT_MAX if no match was found.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_pull_rcsum (C function)c.skb_pull_rcsumhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h=void * skb_pull_rcsum (struct sk_buff *skb, unsigned int len)h]h)}(h;void *skb_pull_rcsum(struct sk_buff *skb, unsigned int len)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKhhhj]hMubj;)}(hj>h]h*}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKhhhj]hMubj)}(hskb_pull_rcsumh]j%)}(hskb_pull_rcsumh]hskb_pull_rcsum}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKhhhj]hMubj)}(h'(struct sk_buff *skb, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_pull_rcsumasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjKhhhj]hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGhhhj]hMubah}(h]jBah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]hMhjDhhubjS)}(hhh]jX)}(h$pull skb and update receive checksumh]h$pull skb and update receive checksum}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jRhjDhhhj]hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to update ``unsigned int len`` length of data pulled **Description** This function performs an skb_pull on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_pull unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h)``struct sk_buff *skb`` buffer to update h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to updateh]hbuffer to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``unsigned int len`` length of data pulled h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hlength of data pulledh]hlength of data pulled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hXThis function performs an skb_pull on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_pull unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h]jX)}(hXThis function performs an skb_pull on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_pull unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.h]hXThis function performs an skb_pull on the packet and updates the CHECKSUM_COMPLETE checksum. It should be used on receive path processing instead of skb_pull unless you know that the checksum difference is zero (e.g., a valid IP header) or you are setting ip_summed to CHECKSUM_NONE.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj8ubah}(h]h ]h"]h$]h&]uh1j hjJhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_segment (C function) c.skb_segmenthNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSstruct sk_buff * skb_segment (struct sk_buff *head_skb, netdev_features_t features)h]h)}(hQstruct sk_buff *skb_segment(struct sk_buff *head_skb, netdev_features_t features)h](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjmhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhj~hMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j skb_segmentsb c.skb_segmentasbuh1hhjmhhhj~hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhj~hMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjmhhhj~hMubj)}(h skb_segmenth]j%)}(hjh]h skb_segment}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjmhhhj~hMubj)}(h6(struct sk_buff *head_skb, netdev_features_t features)h](j)}(hstruct sk_buff *head_skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.skb_segmentasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hhead_skbh]hhead_skb}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hnetdev_features_t featuresh](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]j c.skb_segmentasbuh1hhjWubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj%)}(hfeaturesh]hfeatures}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjmhhhj~hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjihhhj~hMubah}(h]jdah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hMhjfhhubjS)}(hhh]jX)}(h%Perform protocol segmentation on skb.h]h%Perform protocol segmentation on skb.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjfhhhj~hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX_**Parameters** ``struct sk_buff *head_skb`` buffer to segment ``netdev_features_t features`` features for the output path (see dev->features) **Description** This function performs segmentation on the given skb. It returns a pointer to the first in a list of new skbs for the segments. In case of error it returns ERR_PTR(err).h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h/``struct sk_buff *head_skb`` buffer to segment h](j)}(h``struct sk_buff *head_skb``h]j)}(hjh]hstruct sk_buff *head_skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbuffer to segmenth]hbuffer to segment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hP``netdev_features_t features`` features for the output path (see dev->features) h](j)}(h``netdev_features_t features``h]j)}(hj.h]hnetdev_features_t features}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj(ubj)}(hhh]jX)}(h0features for the output path (see dev->features)h]h0features for the output path (see dev->features)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj )}(hThis function performs segmentation on the given skb. It returns a pointer to the first in a list of new skbs for the segments. In case of error it returns ERR_PTR(err).h]jX)}(hThis function performs segmentation on the given skb. It returns a pointer to the first in a list of new skbs for the segments. In case of error it returns ERR_PTR(err).h]hThis function performs segmentation on the given skb. It returns a pointer to the first in a list of new skbs for the segments. In case of error it returns ERR_PTR(err).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_to_sgvec (C function)c.skb_to_sgvechNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSint skb_to_sgvec (struct sk_buff *skb, struct scatterlist *sg, int offset, int len)h]h)}(hRint skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h skb_to_sgvech]j%)}(h skb_to_sgvech]h skb_to_sgvec}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hB(struct sk_buff *skb, struct scatterlist *sg, int offset, int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_to_sgvecasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct scatterlist *sgh](h)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(h scatterlisth]h scatterlist}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j/c.skb_to_sgvecasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hsgh]hsg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int offseth](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h/Fill a scatter-gather list from a socket bufferh]h/Fill a scatter-gather list from a socket buffer}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` Socket buffer containing the buffers to be mapped ``struct scatterlist *sg`` The scatter-gather list to map into ``int offset`` The offset into the buffer's contents to start mapping ``int len`` Length of buffer space to be mapped **Description** Fill the specified scatter-gather list with mappings/pointers into a region of the buffer space attached to a socket buffer. Returns either the number of scatterlist items used, or -EMSGSIZE if the contents could not fit.h](jX)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjnubj)}(hhh](j)}(hJ``struct sk_buff *skb`` Socket buffer containing the buffers to be mapped h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h1Socket buffer containing the buffers to be mappedh]h1Socket buffer containing the buffers to be mapped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h?``struct scatterlist *sg`` The scatter-gather list to map into h](j)}(h``struct scatterlist *sg``h]j)}(hjh]hstruct scatterlist *sg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h#The scatter-gather list to map intoh]h#The scatter-gather list to map into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``int offset`` The offset into the buffer's contents to start mapping h](j)}(h``int offset``h]j)}(hjh]h int offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h6The offset into the buffer's contents to start mappingh]h8The offset into the buffer’s contents to start mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``int len`` Length of buffer space to be mapped h](j)}(h ``int len``h]j)}(hj>h]hint len}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj8ubj)}(hhh]jX)}(h#Length of buffer space to be mappedh]h#Length of buffer space to be mapped}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubeh}(h]h ]h"]h$]h&]uh1jhjnubjX)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjnubj )}(hFill the specified scatter-gather list with mappings/pointers into a region of the buffer space attached to a socket buffer. Returns either the number of scatterlist items used, or -EMSGSIZE if the contents could not fit.h]jX)}(hFill the specified scatter-gather list with mappings/pointers into a region of the buffer space attached to a socket buffer. Returns either the number of scatterlist items used, or -EMSGSIZE if the contents could not fit.h]hFill the specified scatter-gather list with mappings/pointers into a region of the buffer space attached to a socket buffer. Returns either the number of scatterlist items used, or -EMSGSIZE if the contents could not fit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_cow_data (C function)c.skb_cow_datahNtauh1hhj[hhhNhNubh)}(hhh](h)}(hNint skb_cow_data (struct sk_buff *skb, int tailbits, struct sk_buff **trailer)h]h)}(hMint skb_cow_data(struct sk_buff *skb, int tailbits, struct sk_buff **trailer)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h skb_cow_datah]j%)}(h skb_cow_datah]h skb_cow_data}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h=(struct sk_buff *skb, int tailbits, struct sk_buff **trailer)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]j')}jjsbc.skb_cow_dataasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int tailbitsh](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj%)}(htailbitsh]htailbits}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff **trailerh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j?c.skb_cow_dataasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(htrailerh]htrailer}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h6Check that a socket buffer's data buffers are writableh]h8Check that a socket buffer’s data buffers are writable}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjRjxjRjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` The socket buffer to check. ``int tailbits`` Amount of trailing space to be added ``struct sk_buff **trailer`` Returned pointer to the skb where the **tailbits** space begins **Description** Make sure that the data buffers attached to a socket buffer are writable. If they are not, private copies are made of the data buffers and the socket buffer is set to use these instead. If **tailbits** is given, make sure that there is space to write **tailbits** bytes of data beyond current end of socket buffer. **trailer** will be set to point to the skb in which this space begins. The number of scatterlist elements required to completely map the COW'd and extended socket buffer will be returned.h](jX)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjVubj)}(hhh](j)}(h4``struct sk_buff *skb`` The socket buffer to check. h](j)}(h``struct sk_buff *skb``h]j)}(hj{h]hstruct sk_buff *skb}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjuubj)}(hhh]jX)}(hThe socket buffer to check.h]hThe socket buffer to check.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h6``int tailbits`` Amount of trailing space to be added h](j)}(h``int tailbits``h]j)}(hjh]h int tailbits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h$Amount of trailing space to be addedh]h$Amount of trailing space to be added}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubj)}(h]``struct sk_buff **trailer`` Returned pointer to the skb where the **tailbits** space begins h](j)}(h``struct sk_buff **trailer``h]j)}(hjh]hstruct sk_buff **trailer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h?Returned pointer to the skb where the **tailbits** space beginsh](h&Returned pointer to the skb where the }(hjhhhNhNubj)}(h **tailbits**h]htailbits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh space begins}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubjX)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjVubj )}(hXMake sure that the data buffers attached to a socket buffer are writable. If they are not, private copies are made of the data buffers and the socket buffer is set to use these instead. If **tailbits** is given, make sure that there is space to write **tailbits** bytes of data beyond current end of socket buffer. **trailer** will be set to point to the skb in which this space begins. The number of scatterlist elements required to completely map the COW'd and extended socket buffer will be returned.h](jX)}(hMake sure that the data buffers attached to a socket buffer are writable. If they are not, private copies are made of the data buffers and the socket buffer is set to use these instead.h]hMake sure that the data buffers attached to a socket buffer are writable. If they are not, private copies are made of the data buffers and the socket buffer is set to use these instead.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjPubjX)}(hIf **tailbits** is given, make sure that there is space to write **tailbits** bytes of data beyond current end of socket buffer. **trailer** will be set to point to the skb in which this space begins.h](hIf }(hjchhhNhNubj)}(h **tailbits**h]htailbits}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh2 is given, make sure that there is space to write }(hjchhhNhNubj)}(h **tailbits**h]htailbits}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh5 bytes of data beyond current end of socket buffer. }(hjchhhNhNubj)}(h **trailer**h]htrailer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh< will be set to point to the skb in which this space begins.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjPubjX)}(htThe number of scatterlist elements required to completely map the COW'd and extended socket buffer will be returned.h]hvThe number of scatterlist elements required to completely map the COW’d and extended socket buffer will be returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjPubeh}(h]h ]h"]h$]h&]uh1j hjbhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_clone_sk (C function)c.skb_clone_skhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h3struct sk_buff * skb_clone_sk (struct sk_buff *skb)h]h)}(h1struct sk_buff *skb_clone_sk(struct sk_buff *skb)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j skb_clone_sksbc.skb_clone_skasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(h skb_clone_skh]j%)}(hjh]h skb_clone_sk}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwmodnameN classnameNjj!)}j$]jc.skb_clone_skasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h1create clone of skb, and take reference to socketh]h1create clone of skb, and take reference to socket}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` the skb to clone **Description** This function creates a clone of a buffer that holds a reference on sk_refcnt. Buffers created via this function are meant to be returned using sock_queue_err_skb, or free via kfree_skb. When passing buffers allocated with this function to sock_queue_err_skb it is necessary to wrap the call with sock_hold/sock_put in order to prevent the socket from being released prior to being enqueued on the sk_error_queue.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]j)}(h)``struct sk_buff *skb`` the skb to clone h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hthe skb to cloneh]hthe skb to clone}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hThis function creates a clone of a buffer that holds a reference on sk_refcnt. Buffers created via this function are meant to be returned using sock_queue_err_skb, or free via kfree_skb.h]hThis function creates a clone of a buffer that holds a reference on sk_refcnt. Buffers created via this function are meant to be returned using sock_queue_err_skb, or free via kfree_skb.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hWhen passing buffers allocated with this function to sock_queue_err_skb it is necessary to wrap the call with sock_hold/sock_put in order to prevent the socket from being released prior to being enqueued on the sk_error_queue.h]hWhen passing buffers allocated with this function to sock_queue_err_skb it is necessary to wrap the call with sock_hold/sock_put in order to prevent the socket from being released prior to being enqueued on the sk_error_queue.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_partial_csum_set (C function)c.skb_partial_csum_sethNtauh1hhj[hhhNhNubh)}(hhh](h)}(hCbool skb_partial_csum_set (struct sk_buff *skb, u16 start, u16 off)h]h)}(hBbool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_partial_csum_seth]j%)}(hskb_partial_csum_seth]hskb_partial_csum_set}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h)(struct sk_buff *skb, u16 start, u16 off)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_partial_csum_setasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj0hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u16 starth](h)}(hhh]j%)}(hu16h]hu16}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]jc.skb_partial_csum_setasbuh1hhjRubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj%)}(hstarth]hstart}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 offh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_partial_csum_setasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffh]hoff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h0set up and verify partial csum values for packeth]h0set up and verify partial csum values for packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` the skb to set ``u16 start`` the number of bytes after skb->data to start checksumming. ``u16 off`` the offset from start to place the checksum. **Description** For untrusted partially-checksummed packets, we need to make sure the values for skb->csum_start and skb->csum_offset are valid so we don't oops. This function checks and sets those values and skb->ip_summed: if this returns false you should drop the packet.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h'``struct sk_buff *skb`` the skb to set h](j)}(h``struct sk_buff *skb``h]j)}(hj8h]hstruct sk_buff *skb}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj2ubj)}(hhh]jX)}(hthe skb to seth]hthe skb to set}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubj)}(hI``u16 start`` the number of bytes after skb->data to start checksumming. h](j)}(h ``u16 start``h]j)}(hjqh]h u16 start}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjkubj)}(hhh]jX)}(h:the number of bytes after skb->data to start checksumming.h]h:the number of bytes after skb->data to start checksumming.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubj)}(h9``u16 off`` the offset from start to place the checksum. h](j)}(h ``u16 off``h]j)}(hjh]hu16 off}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h,the offset from start to place the checksum.h]h,the offset from start to place the checksum.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hFor untrusted partially-checksummed packets, we need to make sure the values for skb->csum_start and skb->csum_offset are valid so we don't oops.h]hFor untrusted partially-checksummed packets, we need to make sure the values for skb->csum_start and skb->csum_offset are valid so we don’t oops.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(hpThis function checks and sets those values and skb->ip_summed: if this returns false you should drop the packet.h]hpThis function checks and sets those values and skb->ip_summed: if this returns false you should drop the packet.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_checksum_setup (C function)c.skb_checksum_setuphNtauh1hhj[hhhNhNubh)}(hhh](h)}(h>int skb_checksum_setup (struct sk_buff *skb, bool recalculate)h]h)}(h=int skb_checksum_setup(struct sk_buff *skb, bool recalculate)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhjGhMubj)}(hskb_checksum_setuph]j%)}(hskb_checksum_setuph]hskb_checksum_setup}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhjGhMubj)}(h'(struct sk_buff *skb, bool recalculate)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj\sbc.skb_checksum_setupasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hbool recalculateh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h recalculateh]h recalculate}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhjGhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1hhhjGhMubah}(h]j,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGhMhj.hhubjS)}(hhh]jX)}(hset up partial checksum offseth]hset up partial checksum offset}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj*hhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhjGhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjEjxjEjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` the skb to set up ``bool recalculate`` if true the pseudo-header checksum will be recalculatedh](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjIubj)}(hhh](j)}(h*``struct sk_buff *skb`` the skb to set up h](j)}(h``struct sk_buff *skb``h]j)}(hjnh]hstruct sk_buff *skb}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhubj)}(hhh]jX)}(hthe skb to set uph]hthe skb to set up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubj)}(hL``bool recalculate`` if true the pseudo-header checksum will be recalculatedh](j)}(h``bool recalculate``h]j)}(hjh]hbool recalculate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h7if true the pseudo-header checksum will be recalculatedh]h7if true the pseudo-header checksum will be recalculated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_checksum_trimmed (C function)c.skb_checksum_trimmedhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hstruct sk_buff * skb_checksum_trimmed (struct sk_buff *skb, unsigned int transport_len, __sum16(*skb_chkf)(struct sk_buff *skb))h]h)}(hstruct sk_buff *skb_checksum_trimmed(struct sk_buff *skb, unsigned int transport_len, __sum16 (*skb_chkf)(struct sk_buff *skb))h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jskb_checksum_trimmedsbc.skb_checksum_trimmedasbuh1hhjhhhjhMubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hskb_checksum_trimmedh]j%)}(hj>h]hskb_checksum_trimmed}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h[(struct sk_buff *skb, unsigned int transport_len, __sum16 (*skb_chkf)(struct sk_buff *skb))h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j<c.skb_checksum_trimmedasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubj)}(hunsigned int transport_lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h transport_lenh]h transport_len}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubj)}(h(__sum16 (*skb_chkf)(struct sk_buff *skb)h](h)}(hhh]j%)}(h__sum16h]h__sum16}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j<c.skb_checksum_trimmedasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(h(h]h(}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj;)}(hj>h]h*}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hskb_chkfh]hskb_chkf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubj;)}(h)h]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj;)}(hjmh]h(}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j<c.skb_checksum_trimmedasbuh1hhj8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hvalidate checksum of an skbh]hvalidate checksum of an skb}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjUjxjUjyjzj{uh1hhhhj[hNhNubj})}(hX<**Parameters** ``struct sk_buff *skb`` the skb to check ``unsigned int transport_len`` the data length beyond the network header ``__sum16(*skb_chkf)(struct sk_buff *skb)`` checksum function to use **Description** Applies the given checksum function skb_chkf to the provided skb. Returns a checked and maybe trimmed skb. Returns NULL on error. If the skb has data beyond the given transport length, then a trimmed & cloned skb is checked and returned. Caller needs to set the skb transport header and free any returned skb if it differs from the provided skb.h](jX)}(h**Parameters**h]j)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjYubj)}(hhh](j)}(h)``struct sk_buff *skb`` the skb to check h](j)}(h``struct sk_buff *skb``h]j)}(hj~h]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjxubj)}(hhh]jX)}(hthe skb to checkh]hthe skb to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(hI``unsigned int transport_len`` the data length beyond the network header h](j)}(h``unsigned int transport_len``h]j)}(hjh]hunsigned int transport_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h)the data length beyond the network headerh]h)the data length beyond the network header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(hE``__sum16(*skb_chkf)(struct sk_buff *skb)`` checksum function to use h](j)}(h+``__sum16(*skb_chkf)(struct sk_buff *skb)``h]j)}(hjh]h'__sum16(*skb_chkf)(struct sk_buff *skb)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hchecksum function to useh]hchecksum function to use}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjuubeh}(h]h ]h"]h$]h&]uh1jhjYubjX)}(h**Description**h]j)}(hj+ h]h Description}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjYubjX)}(hApplies the given checksum function skb_chkf to the provided skb. Returns a checked and maybe trimmed skb. Returns NULL on error.h]hApplies the given checksum function skb_chkf to the provided skb. Returns a checked and maybe trimmed skb. Returns NULL on error.}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjYubjX)}(hkIf the skb has data beyond the given transport length, then a trimmed & cloned skb is checked and returned.h]hkIf the skb has data beyond the given transport length, then a trimmed & cloned skb is checked and returned.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjYubjX)}(hkCaller needs to set the skb transport header and free any returned skb if it differs from the provided skb.h]hkCaller needs to set the skb transport header and free any returned skb if it differs from the provided skb.}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_try_coalesce (C function)c.skb_try_coalescehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hgbool skb_try_coalesce (struct sk_buff *to, struct sk_buff *from, bool *fragstolen, int *delta_truesize)h]h)}(hfbool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, bool *fragstolen, int *delta_truesize)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hM ubj)}(hskb_try_coalesceh]j%)}(hskb_try_coalesceh]hskb_try_coalesce}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hM ubj)}(hQ(struct sk_buff *to, struct sk_buff *from, bool *fragstolen, int *delta_truesize)h](j)}(hstruct sk_buff *toh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.skb_try_coalesceasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(htoh]hto}(hj# hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct sk_buff *fromh](h)}(hjh]hstruct}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8 ubj)}(h h]h }(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8 ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjZ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\ modnameN classnameNjj!)}j$]j c.skb_try_coalesceasbuh1hhj8 ubj)}(h h]h }(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8 ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8 ubj%)}(hfromh]hfrom}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8 ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hbool *fragstolenh](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(h fragstolenh]h fragstolen}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hint *delta_truesizeh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdelta_truesizeh]hdelta_truesize}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hM ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM hj hhubjS)}(hhh]jX)}(htry to merge skb to prior oneh]htry to merge skb to prior one}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj= hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjX jxjX jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *to`` prior buffer ``struct sk_buff *from`` buffer to add ``bool *fragstolen`` pointer to boolean ``int *delta_truesize`` how much more was allocated than was requestedh](jX)}(h**Parameters**h]j)}(hjb h]h Parameters}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj\ ubj)}(hhh](j)}(h$``struct sk_buff *to`` prior buffer h](j)}(h``struct sk_buff *to``h]j)}(hj h]hstruct sk_buff *to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM hj{ ubj)}(hhh]jX)}(h prior bufferh]h prior buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj{ ubeh}(h]h ]h"]h$]h&]uh1jhj hM hjx ubj)}(h'``struct sk_buff *from`` buffer to add h](j)}(h``struct sk_buff *from``h]j)}(hj h]hstruct sk_buff *from}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj ubj)}(hhh]jX)}(h buffer to addh]h buffer to add}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjx ubj)}(h(``bool *fragstolen`` pointer to boolean h](j)}(h``bool *fragstolen``h]j)}(hj h]hbool *fragstolen}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj ubj)}(hhh]jX)}(hpointer to booleanh]hpointer to boolean}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjx ubj)}(hF``int *delta_truesize`` how much more was allocated than was requestedh](j)}(h``int *delta_truesize``h]j)}(hj, h]hint *delta_truesize}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj* ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj& ubj)}(hhh]jX)}(h.how much more was allocated than was requestedh]h.how much more was allocated than was requested}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjB ubah}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hMhjx ubeh}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_scrub_packet (C function)c.skb_scrub_packethNtauh1hhj[hhhNhNubh)}(hhh](h)}(h6void skb_scrub_packet (struct sk_buff *skb, bool xnet)h]h)}(h5void skb_scrub_packet(struct sk_buff *skb, bool xnet)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMnubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMnubj)}(hskb_scrub_packeth]j%)}(hskb_scrub_packeth]hskb_scrub_packet}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMnubj)}(h (struct sk_buff *skb, bool xnet)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.skb_scrub_packetasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hskbh]hskb}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h bool xneth](j)}(hjTh]hbool}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 ubj)}(h h]h }(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1 ubj%)}(hxneth]hxnet}(hjP hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1 ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMnubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~ hhhj hMnubah}(h]jy ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMnhj{ hhubjS)}(hhh]jX)}(h scrub an skbh]h scrub an skb}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMnhjw hhubah}(h]h ]h"]h$]h&]uh1jRhj{ hhhj hMnubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to clean ``bool xnet`` packet is crossing netns **Description** skb_scrub_packet can be used after encapsulating or decapsulating a packet into/from a tunnel. Some information have to be cleared during these operations. skb_scrub_packet can also be used to clean a skb before injecting it in another namespace (**xnet** == true). We have to clear all information in the skb that could impact namespace isolation.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMrhj ubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to clean h](j)}(h``struct sk_buff *skb``h]j)}(hj h]hstruct sk_buff *skb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMphj ubj)}(hhh]jX)}(hbuffer to cleanh]hbuffer to clean}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMphj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMphj ubj)}(h'``bool xnet`` packet is crossing netns h](j)}(h ``bool xnet``h]j)}(hj h]h bool xnet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMqhj ubj)}(hhh]jX)}(hpacket is crossing netnsh]hpacket is crossing netns}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMqhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMqhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMshj ubjX)}(hX\skb_scrub_packet can be used after encapsulating or decapsulating a packet into/from a tunnel. Some information have to be cleared during these operations. skb_scrub_packet can also be used to clean a skb before injecting it in another namespace (**xnet** == true). We have to clear all information in the skb that could impact namespace isolation.h](hskb_scrub_packet can be used after encapsulating or decapsulating a packet into/from a tunnel. Some information have to be cleared during these operations. skb_scrub_packet can also be used to clean a skb before injecting it in another namespace (}(hjEhhhNhNubj)}(h**xnet**h]hxnet}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh] == true). We have to clear all information in the skb that could impact namespace isolation.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMrhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_eth_pop (C function) c.skb_eth_pophNtauh1hhj[hhhNhNubh)}(hhh](h)}(h%int skb_eth_pop (struct sk_buff *skb)h]h)}(h$int skb_eth_pop(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM[ubj)}(h skb_eth_poph]j%)}(h skb_eth_poph]h skb_eth_pop}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM[ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.skb_eth_popasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM[ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~hhhjhM[ubah}(h]jyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM[hj{hhubjS)}(hhh]jX)}(h0Drop the Ethernet header at the head of a packeth]h0Drop the Ethernet header at the head of a packet}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM[hjChhubah}(h]h ]h"]h$]h&]uh1jRhj{hhhjhM[ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj^jxj^jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` Socket buffer to modify **Description** Drop the Ethernet header of **skb**. Expects that skb->data points to the mac header and that no VLAN tags are present. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM_hjbubj)}(hhh]j)}(h0``struct sk_buff *skb`` Socket buffer to modify h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM]hjubj)}(hhh]jX)}(hSocket buffer to modifyh]hSocket buffer to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM_hjbubjX)}(h$Drop the Ethernet header of **skb**.h](hDrop the Ethernet header of }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM^hjbubjX)}(hRExpects that skb->data points to the mac header and that no VLAN tags are present.h]hRExpects that skb->data points to the mac header and that no VLAN tags are present.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM`hjbubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMchjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_eth_push (C function)c.skb_eth_pushhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hZint skb_eth_push (struct sk_buff *skb, const unsigned char *dst, const unsigned char *src)h]h)}(hYint skb_eth_push(struct sk_buff *skb, const unsigned char *dst, const unsigned char *src)h](j)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhjEhMuubj)}(h skb_eth_pushh]j%)}(h skb_eth_pushh]h skb_eth_push}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhjEhMuubj)}(hI(struct sk_buff *skb, const unsigned char *dst, const unsigned char *src)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjZsbc.skb_eth_pushasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hconst unsigned char *dsth](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdsth]hdst}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubj)}(hconst unsigned char *srch](h)}(hjh]hconst}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(hunsignedh]hunsigned}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubeh}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhjEhMuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhjEhMuubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjEhMuhj,hhubjS)}(hhh]jX)}(h1Add a new Ethernet header at the head of a packeth]h1Add a new Ethernet header at the head of a packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jRhj,hhhjEhMuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX~**Parameters** ``struct sk_buff *skb`` Socket buffer to modify ``const unsigned char *dst`` Destination MAC address of the new header ``const unsigned char *src`` Source MAC address of the new header **Description** Prepend **skb** with a new Ethernet header. Expects that skb->data points to the mac header, which must be empty. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMyhjubj)}(hhh](j)}(h0``struct sk_buff *skb`` Socket buffer to modify h](j)}(h``struct sk_buff *skb``h]j)}(hj*h]hstruct sk_buff *skb}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMwhj$ubj)}(hhh]jX)}(hSocket buffer to modifyh]hSocket buffer to modify}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMwhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMwhj!ubj)}(hG``const unsigned char *dst`` Destination MAC address of the new header h](j)}(h``const unsigned char *dst``h]j)}(hjch]hconst unsigned char *dst}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMxhj]ubj)}(hhh]jX)}(h)Destination MAC address of the new headerh]h)Destination MAC address of the new header}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhMxhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMxhj!ubj)}(hB``const unsigned char *src`` Source MAC address of the new header h](j)}(h``const unsigned char *src``h]j)}(hjh]hconst unsigned char *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMyhjubj)}(hhh]jX)}(h$Source MAC address of the new headerh]h$Source MAC address of the new header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM{hjubjX)}(h+Prepend **skb** with a new Ethernet header.h](hPrepend }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with a new Ethernet header.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMzhjubjX)}(hEExpects that skb->data points to the mac header, which must be empty.h]hEExpects that skb->data points to the mac header, which must be empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM|hjubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_mpls_push (C function)c.skb_mpls_pushhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hgint skb_mpls_push (struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto, int mac_len, bool ethernet)h]h)}(hfint skb_mpls_push(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto, int mac_len, bool ethernet)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjZhMubj)}(h skb_mpls_pushh]j%)}(h skb_mpls_pushh]h skb_mpls_push}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjZhMubj)}(hU(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto, int mac_len, bool ethernet)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjosbc.skb_mpls_pushasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h__be32 mpls_lseh](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.skb_mpls_pushasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmpls_lseh]hmpls_lse}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h__be16 mpls_protoh](h)}(hhh]j%)}(h__be16h]h__be16}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]jc.skb_mpls_pushasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(h mpls_protoh]h mpls_proto}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int mac_lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmac_lenh]hmac_len}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool etherneth](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hetherneth]hethernet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjHhhhjZhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjDhhhjZhMubah}(h]j?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjZhMhjAhhubjS)}(hhh]jX)}(hCpush a new MPLS header after mac_len bytes from start of the packeth]hCpush a new MPLS header after mac_len bytes from start of the packet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjAhhhjZhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer ``__be32 mpls_lse`` MPLS label stack entry to push ``__be16 mpls_proto`` ethertype of the new MPLS header (expects 0x8847 or 0x8848) ``int mac_len`` length of the MAC header ``bool ethernet`` flag to indicate if the resulting packet after skb_mpls_push is ethernet **Description** Expects skb->data at mac header. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj!ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjFh]hstruct sk_buff *skb}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj@ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(h3``__be32 mpls_lse`` MPLS label stack entry to push h](j)}(h``__be32 mpls_lse``h]j)}(hjh]h__be32 mpls_lse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjyubj)}(hhh]jX)}(hMPLS label stack entry to pushh]hMPLS label stack entry to push}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(hR``__be16 mpls_proto`` ethertype of the new MPLS header (expects 0x8847 or 0x8848) h](j)}(h``__be16 mpls_proto``h]j)}(hjh]h__be16 mpls_proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h;ethertype of the new MPLS header (expects 0x8847 or 0x8848)h]h;ethertype of the new MPLS header (expects 0x8847 or 0x8848)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h)``int mac_len`` length of the MAC header h](j)}(h``int mac_len``h]j)}(hjh]h int mac_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hlength of the MAC headerh]hlength of the MAC header}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h[``bool ethernet`` flag to indicate if the resulting packet after skb_mpls_push is ethernet h](j)}(h``bool ethernet``h]j)}(hj*h]h bool ethernet}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj$ubj)}(hhh]jX)}(hHflag to indicate if the resulting packet after skb_mpls_push is etherneth]hHflag to indicate if the resulting packet after skb_mpls_push is ethernet}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj!ubjX)}(h Expects skb->data at mac header.h]h Expects skb->data at mac header.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj!ubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_mpls_pop (C function)c.skb_mpls_pophNtauh1hhj[hhhNhNubh)}(hhh](h)}(hUint skb_mpls_pop (struct sk_buff *skb, __be16 next_proto, int mac_len, bool ethernet)h]h)}(hTint skb_mpls_pop(struct sk_buff *skb, __be16 next_proto, int mac_len, bool ethernet)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h skb_mpls_poph]j%)}(h skb_mpls_poph]h skb_mpls_pop}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hD(struct sk_buff *skb, __be16 next_proto, int mac_len, bool ethernet)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_mpls_popasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h__be16 next_protoh](h)}(hhh]j%)}(h__be16h]h__be16}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j1c.skb_mpls_popasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj%)}(h next_protoh]h next_proto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int mac_lenh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmac_lenh]hmac_len}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool etherneth](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hetherneth]hethernet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hpop the outermost MPLS headerh]hpop the outermost MPLS header}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj(hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhj[hNhNubj})}(hX>**Parameters** ``struct sk_buff *skb`` buffer ``__be16 next_proto`` ethertype of header after popped MPLS header ``int mac_len`` length of the MAC header ``bool ethernet`` flag to indicate if the packet is ethernet **Description** Expects skb->data at mac header. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjGubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjlh]hstruct sk_buff *skb}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjfubj)}(hhh]jX)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(hC``__be16 next_proto`` ethertype of header after popped MPLS header h](j)}(h``__be16 next_proto``h]j)}(hjh]h__be16 next_proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h,ethertype of header after popped MPLS headerh]h,ethertype of header after popped MPLS header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h)``int mac_len`` length of the MAC header h](j)}(h``int mac_len``h]j)}(hjh]h int mac_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hlength of the MAC headerh]hlength of the MAC header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h=``bool ethernet`` flag to indicate if the packet is ethernet h](j)}(h``bool ethernet``h]j)}(hjh]h bool ethernet}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(h*flag to indicate if the packet is etherneth]h*flag to indicate if the packet is ethernet}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubjX)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjGubjX)}(h Expects skb->data at mac header.h]h Expects skb->data at mac header.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjGubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h skb_mpls_update_lse (C function)c.skb_mpls_update_lsehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h>int skb_mpls_update_lse (struct sk_buff *skb, __be32 mpls_lse)h]h)}(h=int skb_mpls_update_lse(struct sk_buff *skb, __be32 mpls_lse)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hskb_mpls_update_lseh]j%)}(hskb_mpls_update_lseh]hskb_mpls_update_lse}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h&(struct sk_buff *skb, __be32 mpls_lse)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_mpls_update_lseasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h__be32 mpls_lseh](h)}(hhh]j%)}(h__be32h]h__be32}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]jc.skb_mpls_update_lseasbuh1hhjQubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj%)}(hmpls_lseh]hmpls_lse}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h,modify outermost MPLS header and update csumh]h,modify outermost MPLS header and update csum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer ``__be32 mpls_lse`` new MPLS label stack entry to update to **Description** Expects skb->data at mac header. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubj)}(hhh]jX)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``__be32 mpls_lse`` new MPLS label stack entry to update to h](j)}(h``__be32 mpls_lse``h]j)}(hj(h]h__be32 mpls_lse}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj"ubj)}(hhh]jX)}(h'new MPLS label stack entry to update toh]h'new MPLS label stack entry to update to}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(h Expects skb->data at mac header.h]h Expects skb->data at mac header.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_mpls_dec_ttl (C function)c.skb_mpls_dec_ttlhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h*int skb_mpls_dec_ttl (struct sk_buff *skb)h]h)}(h)int skb_mpls_dec_ttl(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM1ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM1ubj)}(hskb_mpls_dec_ttlh]j%)}(hskb_mpls_dec_ttlh]hskb_mpls_dec_ttl}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM1ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.skb_mpls_dec_ttlasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM1ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM1hjhhubjS)}(hhh]jX)}(h.decrement the TTL of the outermost MPLS headerh]h.decrement the TTL of the outermost MPLS header}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM1hjthhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM1ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sk_buff *skb`` buffer **Description** Expects skb->data at mac header. Returns 0 on success, -errno otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM5hjubj)}(hhh]j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM3hjubj)}(hhh]jX)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM5hjubjX)}(h Expects skb->data at mac header.h]h Expects skb->data at mac header.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM4hjubjX)}(h'Returns 0 on success, -errno otherwise.h]h'Returns 0 on success, -errno otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chM6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!alloc_skb_with_frags (C function)c.alloc_skb_with_fragshNtauh1hhj[hhhNhNubh)}(hhh](h)}(hstruct sk_buff * alloc_skb_with_frags (unsigned long header_len, unsigned long data_len, int order, int *errcode, gfp_t gfp_mask)h]h)}(hstruct sk_buff *alloc_skb_with_frags(unsigned long header_len, unsigned long data_len, int order, int *errcode, gfp_t gfp_mask)h](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjChhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMQubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjThMQubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhmodnameN classnameNjj!)}j$]j')}jalloc_skb_with_fragssbc.alloc_skb_with_fragsasbuh1hhjChhhjThMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjThMQubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjChhhjThMQubj)}(halloc_skb_with_fragsh]j%)}(hjh]halloc_skb_with_frags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjThMQubj)}(h[(unsigned long header_len, unsigned long data_len, int order, int *errcode, gfp_t gfp_mask)h](j)}(hunsigned long header_lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h header_lenh]h header_len}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned long data_lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdata_lenh]hdata_len}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int orderh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(horderh]horder}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int *errcodeh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(herrcodeh]herrcode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hgfp_t gfp_maskh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.alloc_skb_with_fragsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hgfp_maskh]hgfp_mask}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjThMQubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj?hhhjThMQubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThMQhj<hhubjS)}(hhh]jX)}(hallocate skb with page fragsh]hallocate skb with page frags}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMQhj0hhubah}(h]h ]h"]h$]h&]uh1jRhj<hhhjThMQubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhj[hNhNubj})}(hXT**Parameters** ``unsigned long header_len`` size of linear part ``unsigned long data_len`` needed length in frags ``int order`` max page order desired. ``int *errcode`` pointer to error code if any ``gfp_t gfp_mask`` allocation mask **Description** This can be used to allocate a paged skb, given a maximal order for frags.h](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMUhjOubj)}(hhh](j)}(h1``unsigned long header_len`` size of linear part h](j)}(h``unsigned long header_len``h]j)}(hjth]hunsigned long header_len}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMShjnubj)}(hhh]jX)}(hsize of linear parth]hsize of linear part}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMShjkubj)}(h2``unsigned long data_len`` needed length in frags h](j)}(h``unsigned long data_len``h]j)}(hjh]hunsigned long data_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMThjubj)}(hhh]jX)}(hneeded length in fragsh]hneeded length in frags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjkubj)}(h&``int order`` max page order desired. h](j)}(h ``int order``h]j)}(hjh]h int order}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMUhjubj)}(hhh]jX)}(hmax page order desired.h]hmax page order desired.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjkubj)}(h.``int *errcode`` pointer to error code if any h](j)}(h``int *errcode``h]j)}(hj h]h int *errcode}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMVhj ubj)}(hhh]jX)}(hpointer to error code if anyh]hpointer to error code if any}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4 hMVhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hMVhjkubj)}(h#``gfp_t gfp_mask`` allocation mask h](j)}(h``gfp_t gfp_mask``h]j)}(hjX h]hgfp_t gfp_mask}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMWhjR ubj)}(hhh]jX)}(hallocation maskh]hallocation mask}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjm hMWhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1jhjm hMWhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMYhjOubjX)}(hJThis can be used to allocate a paged skb, given a maximal order for frags.h]hJThis can be used to allocate a paged skb, given a maximal order for frags.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMXhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_condense (C function)c.skb_condensehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h'void skb_condense (struct sk_buff *skb)h]h)}(h&void skb_condense(struct sk_buff *skb)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMqubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMqubj)}(h skb_condenseh]j%)}(h skb_condenseh]h skb_condense}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMqubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj"!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj3!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5!modnameN classnameNjj!)}j$]j')}jj sbc.skb_condenseasbuh1hhj!ubj)}(h h]h }(hjS!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hja!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(hskbh]hskb}(hjn!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj !ubah}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMqubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMqubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMqhj hhubjS)}(hhh]jX)}(h1try to get rid of fragments/frag_list if possibleh]h1try to get rid of fragments/frag_list if possible}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMqhj!hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMqubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!jxj!jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer **Description** Can be used to save memory before skb is added to a busy queue. If packet has bytes in frags and enough tail room in skb->head, pull all of them, so that we can free the frags right now and adjust truesize. **Notes** We do not reallocate skb->head thus can not fail. Caller must re-evaluate skb->truesize if needed.h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMuhj!ubj)}(hhh]j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj!h]hstruct sk_buff *skb}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMrhj!ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMrhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMrhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMthj!ubjX)}(hCan be used to save memory before skb is added to a busy queue. If packet has bytes in frags and enough tail room in skb->head, pull all of them, so that we can free the frags right now and adjust truesize.h]hCan be used to save memory before skb is added to a busy queue. If packet has bytes in frags and enough tail room in skb->head, pull all of them, so that we can free the frags right now and adjust truesize.}(hj*"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMshj!ubjX)}(h **Notes**h]j)}(hj;"h]hNotes}(hj="hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9"ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMxhj!ubj )}(hbWe do not reallocate skb->head thus can not fail. Caller must re-evaluate skb->truesize if needed.h]jX)}(hbWe do not reallocate skb->head thus can not fail. Caller must re-evaluate skb->truesize if needed.h]hbWe do not reallocate skb->head thus can not fail. Caller must re-evaluate skb->truesize if needed.}(hjU"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMxhjQ"ubah}(h]h ]h"]h$]h&]uh1j hjc"hMxhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__skb_ext_set (C function)c.__skb_ext_sethNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSvoid * __skb_ext_set (struct sk_buff *skb, enum skb_ext_id id, struct skb_ext *ext)h]h)}(hQvoid *__skb_ext_set(struct sk_buff *skb, enum skb_ext_id id, struct skb_ext *ext)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhj"hMubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"hhhj"hMubj)}(h __skb_ext_seth]j%)}(h __skb_ext_seth]h __skb_ext_set}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"hhhj"hMubj)}(h>(struct sk_buff *skb, enum skb_ext_id id, struct skb_ext *ext)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jj"sbc.__skb_ext_setasbuh1hhj"ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hj #hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hskbh]hskb}(hj-#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(henum skb_ext_id idh](h)}(hhh]henum}(hjF#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjB#ubj)}(h h]h }(hjS#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB#ubh)}(hhh]j%)}(h skb_ext_idh]h skb_ext_id}(hjd#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hja#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjf#modnameN classnameNjj!)}j$]j#c.__skb_ext_setasbuh1hhjB#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB#ubj%)}(hidh]hid}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjB#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(hstruct skb_ext *exth](h)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubh)}(hhh]j%)}(hskb_exth]hskb_ext}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj#modnameN classnameNjj!)}j$]j#c.__skb_ext_setasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hexth]hext}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj"hhhj"hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj"hMubah}(h]j}"ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"hMhj"hhubjS)}(hhh]jX)}(h2attach the specified extension storage to this skbh]h2attach the specified extension storage to this skb}(hj*$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj'$hhubah}(h]h ]h"]h$]h&]uh1jRhj"hhhj"hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjB$jxjB$jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer ``enum skb_ext_id id`` extension id ``struct skb_ext *ext`` extension storage previously allocated via __skb_ext_alloc() **Description** Existing extensions, if any, are cleared. Returns the pointer to the extension.h](jX)}(h**Parameters**h]j)}(hjL$h]h Parameters}(hjN$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ$ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjF$ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjk$h]hstruct sk_buff *skb}(hjm$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhje$ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhje$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjb$ubj)}(h$``enum skb_ext_id id`` extension id h](j)}(h``enum skb_ext_id id``h]j)}(hj$h]henum skb_ext_id id}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj$ubj)}(hhh]jX)}(h extension idh]h extension id}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjb$ubj)}(hU``struct skb_ext *ext`` extension storage previously allocated via __skb_ext_alloc() h](j)}(h``struct skb_ext *ext``h]j)}(hj$h]hstruct skb_ext *ext}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj$ubj)}(hhh]jX)}(hh]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjh%hhhjz%hMubj)}(h skb_ext_addh]j%)}(h skb_ext_addh]h skb_ext_add}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjh%hhhjz%hMubj)}(h)(struct sk_buff *skb, enum skb_ext_id id)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]j')}jj%sb c.skb_ext_addasbuh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%ubj%)}(hskbh]hskb}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%ubj)}(henum skb_ext_id idh](h)}(hhh]henum}(hj(&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$&ubj)}(h h]h }(hj5&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$&ubh)}(hhh]j%)}(h skb_ext_idh]h skb_ext_id}(hjF&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjC&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjH&modnameN classnameNjj!)}j$]j% c.skb_ext_addasbuh1hhj$&ubj)}(h h]h }(hjd&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$&ubj%)}(hidh]hid}(hjr&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjh%hhhjz%hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjd%hhhjz%hMubah}(h]j_%ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjz%hMhja%hhubjS)}(hhh]jX)}(h1allocate space for given extension, COW if neededh]h1allocate space for given extension, COW if needed}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jRhja%hhhjz%hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer ``enum skb_ext_id id`` extension to allocate space for **Description** Allocates enough space for the given extension. If the extension is already present, a pointer to that extension is returned. If the skb was cloned, COW applies and the returned memory can be modified without changing the extension space of clones buffers. Returns pointer to the extension or NULL on allocation failure.h](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubj)}(hhh](j)}(h``struct sk_buff *skb`` buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj&h]hstruct sk_buff *skb}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubj)}(hhh]jX)}(hbufferh]hbuffer}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubj)}(h7``enum skb_ext_id id`` extension to allocate space for h](j)}(h``enum skb_ext_id id``h]j)}(hj'h]henum skb_ext_id id}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj'ubj)}(hhh]jX)}(hextension to allocate space forh]hextension to allocate space for}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+'hMhj,'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj+'hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubjX)}(h**Description**h]j)}(hjQ'h]h Description}(hjS'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO'ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubjX)}(h}Allocates enough space for the given extension. If the extension is already present, a pointer to that extension is returned.h]h}Allocates enough space for the given extension. If the extension is already present, a pointer to that extension is returned.}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubjX)}(hIf the skb was cloned, COW applies and the returned memory can be modified without changing the extension space of clones buffers.h]hIf the skb was cloned, COW applies and the returned memory can be modified without changing the extension space of clones buffers.}(hjv'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubjX)}(h?Returns pointer to the extension or NULL on allocation failure.h]h?Returns pointer to the extension or NULL on allocation failure.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_splice_from_iter (C function)c.skb_splice_from_iterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hZssize_t skb_splice_from_iter (struct sk_buff *skb, struct iov_iter *iter, ssize_t maxsize)h]h)}(hYssize_t skb_splice_from_iter(struct sk_buff *skb, struct iov_iter *iter, ssize_t maxsize)h](h)}(hhh]j%)}(hssize_th]hssize_t}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]j')}jskb_splice_from_itersbc.skb_splice_from_iterasbuh1hhj'hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj'hMubj)}(hskb_splice_from_iterh]j%)}(hj'h]hskb_splice_from_iter}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj'hMubj)}(h=(struct sk_buff *skb, struct iov_iter *iter, ssize_t maxsize)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj$(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&(modnameN classnameNjj!)}j$]j'c.skb_splice_from_iterasbuh1hhj(ubj)}(h h]h }(hjB(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hjP(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hskbh]hskb}(hj](hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubj)}(hstruct iov_iter *iterh](h)}(hjh]hstruct}(hjv(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjr(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr(ubh)}(hhh]j%)}(hiov_iterh]hiov_iter}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j'c.skb_splice_from_iterasbuh1hhjr(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr(ubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjr(ubj%)}(hiterh]hiter}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjr(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubj)}(hssize_t maxsizeh](h)}(hhh]j%)}(hssize_th]hssize_t}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j'c.skb_splice_from_iterasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj%)}(hmaxsizeh]hmaxsize}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj'hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj'hhhj'hMubah}(h]j'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMhj'hhubjS)}(hhh]jX)}(h Splice (or copy) pages to skbuffh]h Splice (or copy) pages to skbuff}(hj?)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj<)hhubah}(h]h ]h"]h$]h&]uh1jRhj'hhhj'hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjW)jxjW)jyjzj{uh1hhhhj[hNhNubj})}(hX5**Parameters** ``struct sk_buff *skb`` The buffer to add pages to ``struct iov_iter *iter`` Iterator representing the pages to be added ``ssize_t maxsize`` Maximum amount of pages to be added **Description** This is a common helper function for supporting MSG_SPLICE_PAGES. It extracts pages from an iterator and adds them to the socket buffer if possible, copying them to fragments if not possible (such as if they're slab pages). Returns the amount of data spliced/copied or -EMSGSIZE if there's insufficient space in the buffer to transfer anything.h](jX)}(h**Parameters**h]j)}(hja)h]h Parameters}(hjc)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_)ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj[)ubj)}(hhh](j)}(h3``struct sk_buff *skb`` The buffer to add pages to h](j)}(h``struct sk_buff *skb``h]j)}(hj)h]hstruct sk_buff *skb}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~)ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhjz)ubj)}(hhh]jX)}(hThe buffer to add pages toh]hThe buffer to add pages to}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhjz)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjw)ubj)}(hF``struct iov_iter *iter`` Iterator representing the pages to be added h](j)}(h``struct iov_iter *iter``h]j)}(hj)h]hstruct iov_iter *iter}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj)ubj)}(hhh]jX)}(h+Iterator representing the pages to be addedh]h+Iterator representing the pages to be added}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjw)ubj)}(h8``ssize_t maxsize`` Maximum amount of pages to be added h](j)}(h``ssize_t maxsize``h]j)}(hj)h]hssize_t maxsize}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj)ubj)}(hhh]jX)}(h#Maximum amount of pages to be addedh]h#Maximum amount of pages to be added}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjw)ubeh}(h]h ]h"]h$]h&]uh1jhj[)ubjX)}(h**Description**h]j)}(hj-*h]h Description}(hj/*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+*ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj[)ubjX)}(hThis is a common helper function for supporting MSG_SPLICE_PAGES. It extracts pages from an iterator and adds them to the socket buffer if possible, copying them to fragments if not possible (such as if they're slab pages).h]hThis is a common helper function for supporting MSG_SPLICE_PAGES. It extracts pages from an iterator and adds them to the socket buffer if possible, copying them to fragments if not possible (such as if they’re slab pages).}(hjC*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj[)ubjX)}(hxReturns the amount of data spliced/copied or -EMSGSIZE if there's insufficient space in the buffer to transfer anything.h]hzReturns the amount of data spliced/copied or -EMSGSIZE if there’s insufficient space in the buffer to transfer anything.}(hjR*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:26: ./net/core/skbuff.chMhj[)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_ns_capable (C function)c.sk_ns_capablehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hSbool sk_ns_capable (const struct sock *sk, struct user_namespace *user_ns, int cap)h]h)}(hRbool sk_ns_capable(const struct sock *sk, struct user_namespace *user_ns, int cap)h](j)}(hjTh]hbool}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}*hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}*hhhj*hKubj)}(h sk_ns_capableh]j%)}(h sk_ns_capableh]h sk_ns_capable}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj}*hhhj*hKubj)}(h@(const struct sock *sk, struct user_namespace *user_ns, int cap)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(hsockh]hsock}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*modnameN classnameNjj!)}j$]j')}jj*sbc.sk_ns_capableasbuh1hhj*ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hj$+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hskh]hsk}(hj1+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubj)}(hstruct user_namespace *user_nsh](h)}(hjh]hstruct}(hjJ+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjF+ubj)}(h h]h }(hjW+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjF+ubh)}(hhh]j%)}(huser_namespaceh]huser_namespace}(hjh+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hje+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjj+modnameN classnameNjj!)}j$]j+c.sk_ns_capableasbuh1hhjF+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjF+ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjF+ubj%)}(huser_nsh]huser_ns}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubj)}(hint caph](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj%)}(hcaph]hcap}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj}*hhhj*hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjy*hhhj*hKubah}(h]jt*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hKhjv*hhubjS)}(hhh]jX)}(hGeneral socket capability testh]hGeneral socket capability test}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj+hhubah}(h]h ]h"]h$]h&]uh1jRhjv*hhhj*hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhj[hNhNubj})}(hX{**Parameters** ``const struct sock *sk`` Socket to use a capability on or through ``struct user_namespace *user_ns`` The user namespace of the capability to use ``int cap`` The capability to use **Description** Test to see if the opener of the socket had when the socket was created and the current process has the capability **cap** in the user namespace **user_ns**.h](jX)}(h**Parameters**h]j)}(hj",h]h Parameters}(hj$,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ,ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj,ubj)}(hhh](j)}(hC``const struct sock *sk`` Socket to use a capability on or through h](j)}(h``const struct sock *sk``h]j)}(hjA,h]hconst struct sock *sk}(hjC,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?,ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj;,ubj)}(hhh]jX)}(h(Socket to use a capability on or throughh]h(Socket to use a capability on or through}(hjZ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjV,hKhjW,ubah}(h]h ]h"]h$]h&]uh1jhj;,ubeh}(h]h ]h"]h$]h&]uh1jhjV,hKhj8,ubj)}(hO``struct user_namespace *user_ns`` The user namespace of the capability to use h](j)}(h"``struct user_namespace *user_ns``h]j)}(hjz,h]hstruct user_namespace *user_ns}(hj|,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx,ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhjt,ubj)}(hhh]jX)}(h+The user namespace of the capability to useh]h+The user namespace of the capability to use}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhjt,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj8,ubj)}(h"``int cap`` The capability to use h](j)}(h ``int cap``h]j)}(hj,h]hint cap}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj,ubj)}(hhh]jX)}(hThe capability to useh]hThe capability to use}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj8,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj,ubjX)}(hTest to see if the opener of the socket had when the socket was created and the current process has the capability **cap** in the user namespace **user_ns**.h](hsTest to see if the opener of the socket had when the socket was created and the current process has the capability }(hj-hhhNhNubj)}(h**cap**h]hcap}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh in the user namespace }(hj-hhhNhNubj)}(h **user_ns**h]huser_ns}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_capable (C function) c.sk_capablehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h0bool sk_capable (const struct sock *sk, int cap)h]h)}(h/bool sk_capable(const struct sock *sk, int cap)h](j)}(hjTh]hbool}(hjW-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS-hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKubj)}(h h]h }(hje-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjS-hhhjd-hKubj)}(h sk_capableh]j%)}(h sk_capableh]h sk_capable}(hjw-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjS-hhhjd-hKubj)}(h (const struct sock *sk, int cap)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(hsockh]hsock}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jjy-sb c.sk_capableasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hskh]hsk}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubj)}(hint caph](j)}(hinth]hint}(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj..hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj%)}(hcaph]hcap}(hj<.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjS-hhhjd-hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjO-hhhjd-hKubah}(h]jJ-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjd-hKhjL-hhubjS)}(hhh]jX)}(hSocket global capability testh]hSocket global capability test}(hjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhjc.hhubah}(h]h ]h"]h$]h&]uh1jRhjL-hhhjd-hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj~.jxj~.jyjzj{uh1hhhhj[hNhNubj})}(hX%**Parameters** ``const struct sock *sk`` Socket to use a capability on or through ``int cap`` The global capability to use **Description** Test to see if the opener of the socket had when the socket was created and the current process has the capability **cap** in all user namespaces.h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj.ubj)}(hhh](j)}(hC``const struct sock *sk`` Socket to use a capability on or through h](j)}(h``const struct sock *sk``h]j)}(hj.h]hconst struct sock *sk}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj.ubj)}(hhh]jX)}(h(Socket to use a capability on or throughh]h(Socket to use a capability on or through}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj.ubj)}(h)``int cap`` The global capability to use h](j)}(h ``int cap``h]j)}(hj.h]hint cap}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj.ubj)}(hhh]jX)}(hThe global capability to useh]hThe global capability to use}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubjX)}(h**Description**h]j)}(hj/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj.ubjX)}(hTest to see if the opener of the socket had when the socket was created and the current process has the capability **cap** in all user namespaces.h](hsTest to see if the opener of the socket had when the socket was created and the current process has the capability }(hj1/hhhNhNubj)}(h**cap**h]hcap}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1/ubh in all user namespaces.}(hj1/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_net_capable (C function)c.sk_net_capablehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h4bool sk_net_capable (const struct sock *sk, int cap)h]h)}(h3bool sk_net_capable(const struct sock *sk, int cap)h](j)}(hjTh]hbool}(hjr/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn/hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjn/hhhj/hKubj)}(hsk_net_capableh]j%)}(hsk_net_capableh]hsk_net_capable}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjn/hhhj/hKubj)}(h (const struct sock *sk, int cap)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(hsockh]hsock}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jj/sbc.sk_net_capableasbuh1hhj/ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hj0hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hskh]hsk}(hj"0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubj)}(hint caph](j)}(hinth]hint}(hj;0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj70ubj)}(h h]h }(hjI0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj70ubj%)}(hcaph]hcap}(hjW0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj70ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjn/hhhj/hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjj/hhhj/hKubah}(h]je/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj/hKhjg/hhubjS)}(hhh]jX)}(h(Network namespace socket capability testh]h(Network namespace socket capability test}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj~0hhubah}(h]h ]h"]h$]h&]uh1jRhjg/hhhj/hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1hhhhj[hNhNubj})}(hX<**Parameters** ``const struct sock *sk`` Socket to use a capability on or through ``int cap`` The capability to use **Description** Test to see if the opener of the socket had when the socket was created and the current process has the capability **cap** over the network namespace the socket is a member of.h](jX)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj0ubj)}(hhh](j)}(hC``const struct sock *sk`` Socket to use a capability on or through h](j)}(h``const struct sock *sk``h]j)}(hj0h]hconst struct sock *sk}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj0ubj)}(hhh]jX)}(h(Socket to use a capability on or throughh]h(Socket to use a capability on or through}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj0ubj)}(h"``int cap`` The capability to use h](j)}(h ``int cap``h]j)}(hj0h]hint cap}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj0ubj)}(hhh]jX)}(hThe capability to useh]hThe capability to use}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hKhj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hKhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubjX)}(h**Description**h]j)}(hj61h]h Description}(hj81hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj41ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj0ubjX)}(hTest to see if the opener of the socket had when the socket was created and the current process has the capability **cap** over the network namespace the socket is a member of.h](hsTest to see if the opener of the socket had when the socket was created and the current process has the capability }(hjL1hhhNhNubj)}(h**cap**h]hcap}(hjT1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL1ubh6 over the network namespace the socket is a member of.}(hjL1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chKhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_set_memalloc (C function)c.sk_set_memallochNtauh1hhj[hhhNhNubh)}(hhh](h)}(h&void sk_set_memalloc (struct sock *sk)h]h)}(h%void sk_set_memalloc(struct sock *sk)h](j)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM'ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1hhhj1hM'ubj)}(hsk_set_memalloch]j%)}(hsk_set_memalloch]hsk_set_memalloc}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj1hhhj1hM'ubj)}(h(struct sock *sk)h]j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubh)}(hhh]j%)}(hsockh]hsock}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jj1sbc.sk_set_memallocasbuh1hhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1ubj%)}(hskh]hsk}(hj#2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubah}(h]h ]h"]h$]h&]j<j=uh1jhj1hhhj1hM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1hhhj1hM'ubah}(h]j1ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hM'hj1hhubjS)}(hhh]jX)}(hsets ``SOCK_MEMALLOC``h](hsets }(hjM2hhhNhNubj)}(h``SOCK_MEMALLOC``h]h SOCK_MEMALLOC}(hjU2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM2ubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM'hjJ2hhubah}(h]h ]h"]h$]h&]uh1jRhj1hhhj1hM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjs2jxjs2jyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sock *sk`` socket to set it on **Description** Set ``SOCK_MEMALLOC`` on a socket for access to emergency reserves. It's the responsibility of the admin to adjust min_free_kbytes to meet the requirementsh](jX)}(h**Parameters**h]j)}(hj}2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{2ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM+hjw2ubj)}(hhh]j)}(h(``struct sock *sk`` socket to set it on h](j)}(h``struct sock *sk``h]j)}(hj2h]hstruct sock *sk}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM(hj2ubj)}(hhh]jX)}(hsocket to set it onh]hsocket to set it on}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hM(hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM(hj2ubah}(h]h ]h"]h$]h&]uh1jhjw2ubjX)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM*hjw2ubjX)}(hSet ``SOCK_MEMALLOC`` on a socket for access to emergency reserves. It's the responsibility of the admin to adjust min_free_kbytes to meet the requirementsh](hSet }(hj2hhhNhNubj)}(h``SOCK_MEMALLOC``h]h SOCK_MEMALLOC}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh on a socket for access to emergency reserves. It’s the responsibility of the admin to adjust min_free_kbytes to meet the requirements}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM)hjw2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_alloc (C function) c.sk_allochNtauh1hhj[hhhNhNubh)}(hhh](h)}(hbstruct sock * sk_alloc (struct net *net, int family, gfp_t priority, struct proto *prot, int kern)h]h)}(h`struct sock *sk_alloc(struct net *net, int family, gfp_t priority, struct proto *prot, int kern)h](h)}(hjh]hstruct}(hj.3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*3hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMubj)}(h h]h }(hj<3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*3hhhj;3hMubh)}(hhh]j%)}(hsockh]hsock}(hjM3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJ3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjO3modnameN classnameNjj!)}j$]j')}jsk_allocsb c.sk_allocasbuh1hhj*3hhhj;3hMubj)}(h h]h }(hjn3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*3hhhj;3hMubj;)}(hj>h]h*}(hj|3hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*3hhhj;3hMubj)}(hsk_alloch]j%)}(hjk3h]hsk_alloc}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*3hhhj;3hMubj)}(hK(struct net *net, int family, gfp_t priority, struct proto *prot, int kern)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(hneth]hnet}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]ji3 c.sk_allocasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hj3hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hneth]hnet}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(h int familyh](j)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj&4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj%)}(hfamilyh]hfamily}(hj44hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(hgfp_t priorityh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjP4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR4modnameN classnameNjj!)}j$]ji3 c.sk_allocasbuh1hhjI4ubj)}(h h]h }(hjn4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI4ubj%)}(hpriorityh]hpriority}(hj|4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(hstruct proto *proth](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hprotoh]hproto}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]ji3 c.sk_allocasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hproth"]hprot}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(hint kernh](j)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj%)}(hkernh]hkern}(hj!5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj*3hhhj;3hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&3hhhj;3hMubah}(h]j!3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj;3hMhj#3hhubjS)}(hhh]jX)}(h%All socket objects are allocated hereh]h%All socket objects are allocated here}(hjK5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhjH5hhubah}(h]h ]h"]h$]h&]uh1jRhj#3hhhj;3hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjc5jxjc5jyjzj{uh1hhhhj[hNhNubj})}(hX,**Parameters** ``struct net *net`` the applicable net namespace ``int family`` protocol family ``gfp_t priority`` for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc) ``struct proto *prot`` struct proto associated with this new sock instance ``int kern`` is this to be a kernel socket?h](jX)}(h**Parameters**h]j)}(hjm5h]h Parameters}(hjo5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk5ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhjg5ubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hj5h]hstruct net *net}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhj5ubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(h``int family`` protocol family h](j)}(h``int family``h]j)}(hj5h]h int family}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhj5ubj)}(hhh]jX)}(hprotocol familyh]hprotocol family}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubj)}(hH``gfp_t priority`` for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc) h](j)}(h``gfp_t priority``h]j)}(hj5h]hgfp_t priority}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhj5ubj)}(hhh]jX)}(h4for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc)h](hfor allocation (}(hj6hhhNhNubj)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh, }(hj6hhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hj16hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh, etc)}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubj)}(hK``struct proto *prot`` struct proto associated with this new sock instance h](j)}(h``struct proto *prot``h]j)}(hj[6h]hstruct proto *prot}(hj]6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY6ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhjU6ubj)}(hhh]jX)}(h3struct proto associated with this new sock instanceh]h3struct proto associated with this new sock instance}(hjt6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp6hMhjq6ubah}(h]h ]h"]h$]h&]uh1jhjU6ubeh}(h]h ]h"]h$]h&]uh1jhjp6hMhj5ubj)}(h+``int kern`` is this to be a kernel socket?h](j)}(h ``int kern``h]j)}(hj6h]hint kern}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhj6ubj)}(hhh]jX)}(his this to be a kernel socket?h]his this to be a kernel socket?}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj5ubeh}(h]h ]h"]h$]h&]uh1jhjg5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_clone (C function) c.sk_clonehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hOstruct sock * sk_clone (const struct sock *sk, const gfp_t priority, bool lock)h]h)}(hMstruct sock *sk_clone(const struct sock *sk, const gfp_t priority, bool lock)h](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhj6hM ubh)}(hhh]j%)}(hsockh]hsock}(hj 7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jsk_clonesb c.sk_cloneasbuh1hhj6hhhj6hM ubj)}(h h]h }(hj.7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhj6hM ubj;)}(hj>h]h*}(hj<7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6hhhj6hM ubj)}(hsk_cloneh]j%)}(hj+7h]hsk_clone}(hjM7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhj6hM ubj)}(h8(const struct sock *sk, const gfp_t priority, bool lock)h](j)}(hconst struct sock *skh](h)}(hjh]hconst}(hjh7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjd7ubj)}(h h]h }(hju7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd7ubh)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjd7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd7ubh)}(hhh]j%)}(hsockh]hsock}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j)7 c.sk_cloneasbuh1hhjd7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd7ubj;)}(hj>h]h*}(hj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjd7ubj%)}(hskh]hsk}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjd7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`7ubj)}(hconst gfp_t priorityh](h)}(hjh]hconst}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(hgfp_th]hgfp_t}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj8modnameN classnameNjj!)}j$]j)7 c.sk_cloneasbuh1hhj7ubj)}(h h]h }(hj/8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj%)}(hpriorityh]hpriority}(hj=8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`7ubj)}(h bool lockh](j)}(hjTh]hbool}(hjV8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR8ubj)}(h h]h }(hjc8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR8ubj%)}(hlockh]hlock}(hjq8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjR8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`7ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhj6hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhj6hM ubah}(h]j6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hM hj6hhubjS)}(hhh]jX)}(hclone a socketh]hclone a socket}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj8hhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhj6hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhj[hNhNubj})}(hXQ**Parameters** ``const struct sock *sk`` the socket to clone ``const gfp_t priority`` for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc) ``bool lock`` if true, lock the cloned sk **Description** If **lock** is true, the clone is locked by bh_lock_sock(), and caller must unlock socket even in error path by bh_unlock_sock().h](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj8ubj)}(hhh](j)}(h.``const struct sock *sk`` the socket to clone h](j)}(h``const struct sock *sk``h]j)}(hj8h]hconst struct sock *sk}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj8ubj)}(hhh]jX)}(hthe socket to cloneh]hthe socket to clone}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hM hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM hj8ubj)}(hN``const gfp_t priority`` for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc) h](j)}(h``const gfp_t priority``h]j)}(hj9h]hconst gfp_t priority}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj9ubj)}(hhh]jX)}(h4for allocation (``GFP_KERNEL``, ``GFP_ATOMIC``, etc)h](hfor allocation (}(hj.9hhhNhNubj)}(h``GFP_KERNEL``h]h GFP_KERNEL}(hj69hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.9ubh, }(hj.9hhhNhNubj)}(h``GFP_ATOMIC``h]h GFP_ATOMIC}(hjH9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.9ubh, etc)}(hj.9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj*9hM hj+9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj*9hM hj8ubj)}(h*``bool lock`` if true, lock the cloned sk h](j)}(h ``bool lock``h]j)}(hjr9h]h bool lock}(hjt9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp9ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hjl9ubj)}(hhh]jX)}(hif true, lock the cloned skh]hif true, lock the cloned sk}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhjl9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj8ubjX)}(hIf **lock** is true, the clone is locked by bh_lock_sock(), and caller must unlock socket even in error path by bh_unlock_sock().h](hIf }(hj9hhhNhNubj)}(h**lock**h]hlock}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubhv is true, the clone is locked by bh_lock_sock(), and caller must unlock socket even in error path by bh_unlock_sock().}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!skb_page_frag_refill (C function)c.skb_page_frag_refillhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hObool skb_page_frag_refill (unsigned int sz, struct page_frag *pfrag, gfp_t gfp)h]h)}(hNbool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)h](j)}(hjTh]hbool}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM1 ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhj:hM1 ubj)}(hskb_page_frag_refillh]j%)}(hskb_page_frag_refillh]hskb_page_frag_refill}(hj$:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj :ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhj:hM1 ubj)}(h5(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)h](j)}(hunsigned int szh](j)}(hunsignedh]hunsigned}(hj@:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<:ubj)}(h h]h }(hjN:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<:ubj)}(hinth]hint}(hj\:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<:ubj)}(h h]h }(hjj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<:ubj%)}(hszh]hsz}(hjx:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8:ubj)}(hstruct page_frag *pfragh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubh)}(hhh]j%)}(h page_fragh]h page_frag}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jj&:sbc.skb_page_frag_refillasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:ubj%)}(hpfragh]hpfrag}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8:ubj)}(h gfp_t gfph](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]j:c.skb_page_frag_refillasbuh1hhj:ubj)}(h h]h }(hj$;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj%)}(hgfph]hgfp}(hj2;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8:ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhj:hM1 ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj9hhhj:hM1 ubah}(h]j9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hM1 hj9hhubjS)}(hhh]jX)}(h+check that a page_frag contains enough roomh]h+check that a page_frag contains enough room}(hj\;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM1 hjY;hhubah}(h]h ]h"]h$]h&]uh1jRhj9hhhj:hM1 ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjt;jxjt;jyjzj{uh1hhhhj[hNhNubj})}(hX\**Parameters** ``unsigned int sz`` minimum size of the fragment we want to get ``struct page_frag *pfrag`` pointer to page_frag ``gfp_t gfp`` priority for memory allocation **Note** While this allocator tries to use high order pages, there is no guarantee that allocations succeed. Therefore, **sz** MUST be less or equal than PAGE_SIZE.h](jX)}(h**Parameters**h]j)}(hj~;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|;ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM5 hjx;ubj)}(hhh](j)}(h@``unsigned int sz`` minimum size of the fragment we want to get h](j)}(h``unsigned int sz``h]j)}(hj;h]hunsigned int sz}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM2 hj;ubj)}(hhh]jX)}(h+minimum size of the fragment we want to geth]h+minimum size of the fragment we want to get}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hM2 hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM2 hj;ubj)}(h1``struct page_frag *pfrag`` pointer to page_frag h](j)}(h``struct page_frag *pfrag``h]j)}(hj;h]hstruct page_frag *pfrag}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM3 hj;ubj)}(hhh]jX)}(hpointer to page_fragh]hpointer to page_frag}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hM3 hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM3 hj;ubj)}(h-``gfp_t gfp`` priority for memory allocation h](j)}(h ``gfp_t gfp``h]j)}(hj<h]h gfp_t gfp}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj <ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM4 hj <ubj)}(hhh]jX)}(hpriority for memory allocationh]hpriority for memory allocation}(hj(<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$<hM4 hj%<ubah}(h]h ]h"]h$]h&]uh1jhj <ubeh}(h]h ]h"]h$]h&]uh1jhj$<hM4 hj;ubeh}(h]h ]h"]h$]h&]uh1jhjx;ubjX)}(h**Note**h]j)}(hjJ<h]hNote}(hjL<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH<ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM6 hjx;ubjX)}(hWhile this allocator tries to use high order pages, there is no guarantee that allocations succeed. Therefore, **sz** MUST be less or equal than PAGE_SIZE.h](hoWhile this allocator tries to use high order pages, there is no guarantee that allocations succeed. Therefore, }(hj`<hhhNhNubj)}(h**sz**h]hsz}(hjh<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`<ubh& MUST be less or equal than PAGE_SIZE.}(hj`<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM6 hjx;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_wait_data (C function)c.sk_wait_datahNtauh1hhj[hhhNhNubh)}(hhh](h)}(hJint sk_wait_data (struct sock *sk, long *timeo, const struct sk_buff *skb)h]h)}(hIint sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)h](j)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<hhhj<hM ubj)}(h sk_wait_datah]j%)}(h sk_wait_datah]h sk_wait_data}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj<hhhj<hM ubj)}(h9(struct sock *sk, long *timeo, const struct sk_buff *skb)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(hsockh]hsock}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jj<sbc.sk_wait_dataasbuh1hhj<ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hj*=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hskh]hsk}(hj7=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj<ubj)}(h long *timeoh](j)}(hlongh]hlong}(hjP=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL=ubj)}(h h]h }(hj^=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjL=ubj;)}(hj>h]h*}(hjl=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjL=ubj%)}(htimeoh]htimeo}(hjy=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj<ubj)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j=c.sk_wait_dataasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hskbh]hskb}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj<ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj<hhhj<hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj<hhhj<hM ubah}(h]j<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hM hj<hhubjS)}(hhh]jX)}(h+wait for data to arrive at sk_receive_queueh]h+wait for data to arrive at sk_receive_queue}(hj.>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj+>hhubah}(h]h ]h"]h$]h&]uh1jRhj<hhhj<hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjF>jxjF>jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sock *sk`` sock to wait on ``long *timeo`` for how long ``const struct sk_buff *skb`` last skb seen on sk_receive_queue **Description** Now socket state including sk->sk_err is changed only under lock, hence we may omit checks after joining wait queue. We check receive queue before schedule() only as optimization; it is very likely that release_sock() added new data.h](jX)}(h**Parameters**h]j)}(hjP>h]h Parameters}(hjR>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN>ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hjJ>ubj)}(hhh](j)}(h$``struct sock *sk`` sock to wait on h](j)}(h``struct sock *sk``h]j)}(hjo>h]hstruct sock *sk}(hjq>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm>ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hji>ubj)}(hhh]jX)}(hsock to wait onh]hsock to wait on}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hM hj>ubah}(h]h ]h"]h$]h&]uh1jhji>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM hjf>ubj)}(h``long *timeo`` for how long h](j)}(h``long *timeo``h]j)}(hj>h]h long *timeo}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj>ubj)}(hhh]jX)}(h for how longh]h for how long}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM hjf>ubj)}(h@``const struct sk_buff *skb`` last skb seen on sk_receive_queue h](j)}(h``const struct sk_buff *skb``h]j)}(hj>h]hconst struct sk_buff *skb}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hj>ubj)}(hhh]jX)}(h!last skb seen on sk_receive_queueh]h!last skb seen on sk_receive_queue}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM hjf>ubeh}(h]h ]h"]h$]h&]uh1jhjJ>ubjX)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hjJ>ubjX)}(hNow socket state including sk->sk_err is changed only under lock, hence we may omit checks after joining wait queue. We check receive queue before schedule() only as optimization; it is very likely that release_sock() added new data.h]hNow socket state including sk->sk_err is changed only under lock, hence we may omit checks after joining wait queue. We check receive queue before schedule() only as optimization; it is very likely that release_sock() added new data.}(hj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chM hjJ>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__sk_mem_schedule (C function)c.__sk_mem_schedulehNtauh1hhj[hhhNhNubh)}(hhh](h)}(h;int __sk_mem_schedule (struct sock *sk, int size, int kind)h]h)}(h:int __sk_mem_schedule(struct sock *sk, int size, int kind)h](j)}(hinth]hint}(hja?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]?hhhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMC ubj)}(h h]h }(hjp?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]?hhhjo?hMC ubj)}(h__sk_mem_scheduleh]j%)}(h__sk_mem_scheduleh]h__sk_mem_schedule}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~?ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]?hhhjo?hMC ubj)}(h%(struct sock *sk, int size, int kind)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubh)}(hhh]j%)}(hsockh]hsock}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j')}jj?sbc.__sk_mem_scheduleasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(hskh]hsk}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(hint sizeh](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj @ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj @ubj%)}(hsizeh]hsize}(hj,@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj @ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(hint kindh](j)}(hinth]hint}(hjE@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA@ubj)}(h h]h }(hjS@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjA@ubj%)}(hkindh]hkind}(hja@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjA@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj]?hhhjo?hMC ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjY?hhhjo?hMC ubah}(h]jT?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjo?hMC hjV?hhubjS)}(hhh]jX)}(h.increase sk_forward_alloc and memory_allocatedh]h.increase sk_forward_alloc and memory_allocated}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMC hj@hhubah}(h]h ]h"]h$]h&]uh1jRhjV?hhhjo?hMC ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@jxj@jyjzj{uh1hhhhj[hNhNubj})}(hXZ**Parameters** ``struct sock *sk`` socket ``int size`` memory size to allocate ``int kind`` allocation type **Description** If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means rmem allocation. This function assumes that protocols which have memory_pressure use sk_wmem_queued as write buffer accounting.h](jX)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMG hj@ubj)}(hhh](j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hj@h]hstruct sock *sk}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMD hj@ubj)}(hhh]jX)}(hsocketh]hsocket}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMD hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMD hj@ubj)}(h%``int size`` memory size to allocate h](j)}(h ``int size``h]j)}(hjAh]hint size}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chME hj@ubj)}(hhh]jX)}(hmemory size to allocateh]hmemory size to allocate}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhME hjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhME hj@ubj)}(h``int kind`` allocation type h](j)}(h ``int kind``h]j)}(hj>Ah]hint kind}(hj@AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh]h*}(hjQBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(hskh]hsk}(hj^BhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(h int amounth](j)}(hinth]hint}(hjwBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsBubj%)}(hamounth]hamount}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubeh}(h]h ]h"]h$]h&]j<j=uh1jhjAhhhjAhMo ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjAhhhjAhMo ubah}(h]jAah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhMo hjAhhubjS)}(hhh]jX)}(h-reclaim sk_forward_alloc and memory_allocatedh]h-reclaim sk_forward_alloc and memory_allocated}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMo hjBhhubah}(h]h ]h"]h$]h&]uh1jRhjAhhhjAhMo ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhj[hNhNubj})}(hu**Parameters** ``struct sock *sk`` socket ``int amount`` number of bytes (rounded down to a PAGE_SIZE multiple)h](jX)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMs hjBubj)}(hhh](j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hjBh]hstruct sock *sk}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMp hjBubj)}(hhh]jX)}(hsocketh]hsocket}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMp hjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjChMp hjBubj)}(hE``int amount`` number of bytes (rounded down to a PAGE_SIZE multiple)h](j)}(h``int amount``h]j)}(hj7Ch]h int amount}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Cubah}(h]h ]h"]h$]h&]uh1jhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMr hj1Cubj)}(hhh]jX)}(h6number of bytes (rounded down to a PAGE_SIZE multiple)h]h6number of bytes (rounded down to a PAGE_SIZE multiple)}(hjPChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhO/var/lib/git/docbuild/linux/Documentation/networking/kapi:29: ./net/core/sock.chMq hjMCubah}(h]h ]h"]h$]h&]uh1jhj1Cubeh}(h]h ]h"]h$]h&]uh1jhjLChMr hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$__skb_try_recv_datagram (C function)c.__skb_try_recv_datagramhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hstruct sk_buff * __skb_try_recv_datagram (struct sock *sk, struct sk_buff_head *queue, unsigned int flags, int *off, int *err, struct sk_buff **last)h]h)}(hstruct sk_buff *__skb_try_recv_datagram(struct sock *sk, struct sk_buff_head *queue, unsigned int flags, int *off, int *err, struct sk_buff **last)h](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjChhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChKubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}j__skb_try_recv_datagramsbc.__skb_try_recv_datagramasbuh1hhjChhhjChKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjChKubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjChhhjChKubj)}(h__skb_try_recv_datagramh]j%)}(hjCh]h__skb_try_recv_datagram}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjChKubj)}(hl(struct sock *sk, struct sk_buff_head *queue, unsigned int flags, int *off, int *err, struct sk_buff **last)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj DhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hsockh]hsock}(hj)DhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&Dubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+DmodnameN classnameNjj!)}j$]jCc.__skb_try_recv_datagramasbuh1hhjDubj)}(h h]h }(hjGDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjUDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hskh]hsk}(hjbDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hstruct sk_buff_head *queueh](h)}(hjh]hstruct}(hj{DhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwDubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]jCc.__skb_try_recv_datagramasbuh1hhjwDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwDubj;)}(hj>h]h*}(hjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwDubj%)}(hqueueh]hqueue}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj%)}(hflagsh]hflags}(hj#EhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hint *offh](j)}(hinth]hint}(hjh]h*}(hjXEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8Eubj%)}(hoffh]hoff}(hjeEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8Eubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hint *errh](j)}(hinth]hint}(hj~EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzEubj;)}(hj>h]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzEubj%)}(herrh]herr}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hstruct sk_buff **lasth](h)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]jCc.__skb_try_recv_datagramasbuh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hj FhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj;)}(hj>h]h*}(hjFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(hlasth]hlast}(hj$FhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjChKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjChKubah}(h]jCah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChKhjChhubjS)}(hhh]jX)}(hReceive a datagram skbuffh]hReceive a datagram skbuff}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjKFhhubah}(h]h ]h"]h$]h&]uh1jRhjChhhjChKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjfFjxjfFjyjzj{uh1hhhhj[hNhNubj})}(hX{**Parameters** ``struct sock *sk`` socket ``struct sk_buff_head *queue`` socket queue from which to receive ``unsigned int flags`` MSG\_ flags ``int *off`` an offset in bytes to peek skb from. Returns an offset within an skb where data actually starts ``int *err`` error code returned ``struct sk_buff **last`` set to last peeked message to inform the wait function what to look for when peeking **Description** Get a datagram skbuff, understands the peeking, nonblocking wakeups and possible races. This replaces identical code in packet, raw and udp, as well as the IPX AX.25 and Appletalk. It also finally fixes the long standing peek and read race for datagram sockets. If you alter this routine remember it must be re-entrant. This function will lock the socket if a skb is returned, so the caller needs to unlock the socket in that case (usually by calling skb_free_datagram). Returns NULL with **err** set to -EAGAIN if no data was available or to some other value if an error was detected. * It does not lock socket since today. This function is * free of race conditions. This measure should/can improve * significantly datagram socket latencies at high loads, * when data copying to user space takes lots of time. * (BTW I've just killed the last cli() in IP/IPv6/core/netlink/packet * 8) Great win.) * --ANK (980729) The order of the tests when we find no data waiting are specified quite explicitly by POSIX 1003.1g, don't change them without having the standard around please.h](jX)}(h**Parameters**h]j)}(hjpFh]h Parameters}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnFubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjjFubj)}(hhh](j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hjFh]hstruct sock *sk}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjFubj)}(hhh]jX)}(hsocketh]hsocket}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhKhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjFubj)}(hB``struct sk_buff_head *queue`` socket queue from which to receive h](j)}(h``struct sk_buff_head *queue``h]j)}(hjFh]hstruct sk_buff_head *queue}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjFubj)}(hhh]jX)}(h"socket queue from which to receiveh]h"socket queue from which to receive}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhKhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjFubj)}(h#``unsigned int flags`` MSG\_ flags h](j)}(h``unsigned int flags``h]j)}(hjGh]hunsigned int flags}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjFubj)}(hhh]jX)}(h MSG\_ flagsh]h MSG_ flags}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhKhjGubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjGhKhjFubj)}(hm``int *off`` an offset in bytes to peek skb from. Returns an offset within an skb where data actually starts h](j)}(h ``int *off``h]j)}(hj:Gh]hint *off}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhj:Hubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(h8free of race conditions. This measure should/can improveh]jX)}(hjTHh]h8free of race conditions. This measure should/can improve}(hjVHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjRHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(h6significantly datagram socket latencies at high loads,h]jX)}(hjlHh]h6significantly datagram socket latencies at high loads,}(hjnHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjjHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(h3when data copying to user space takes lots of time.h]jX)}(hjHh]h3when data copying to user space takes lots of time.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(hC(BTW I've just killed the last cli() in IP/IPv6/core/netlink/packeth]jX)}(hjHh]hE(BTW I’ve just killed the last cli() in IP/IPv6/core/netlink/packet}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(h8) Great win.)h]henumerated_list)}(hhh]j9H)}(h Great win.)h]jX)}(hjHh]h Great win.)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjHubah}(h]h ]h"]h$]h&]uh1j8HhjHubah}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffixjstartKuh1jHhjHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubj9H)}(h--ANK (980729) h]jX)}(h--ANK (980729)h]h--ANK (980729)}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjHubah}(h]h ]h"]h$]h&]uh1j8Hhj5Hubeh}(h]h ]h"]h$]h&]bulletj>uh1j3HhjKHhKhjGubjX)}(hThe order of the tests when we find no data waiting are specified quite explicitly by POSIX 1003.1g, don't change them without having the standard around please.h]hThe order of the tests when we find no data waiting are specified quite explicitly by POSIX 1003.1g, don’t change them without having the standard around please.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chKhjGubeh}(h]h ]h"]h$]h&]uh1j hjHhKhjjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hskb_kill_datagram (C function)c.skb_kill_datagramhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hPint skb_kill_datagram (struct sock *sk, struct sk_buff *skb, unsigned int flags)h]h)}(hOint skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)h](j)}(hinth]hint}(hj9IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5IhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMbubj)}(h h]h }(hjHIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5IhhhjGIhMbubj)}(hskb_kill_datagramh]j%)}(hskb_kill_datagramh]hskb_kill_datagram}(hjZIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5IhhhjGIhMbubj)}(h:(struct sock *sk, struct sk_buff *skb, unsigned int flags)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hjvIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrIubh)}(hhh]j%)}(hsockh]hsock}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j')}jj\Isbc.skb_kill_datagramasbuh1hhjrIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrIubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrIubj%)}(hskh]hsk}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnIubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]jIc.skb_kill_datagramasbuh1hhjIubj)}(h h]h }(hj$JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hj2JhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hskbh]hskb}(hj?JhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnIubj)}(hunsigned int flagsh](j)}(hunsignedh]hunsigned}(hjXJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTJubj)}(h h]h }(hjfJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTJubj)}(hinth]hint}(hjtJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTJubj%)}(hflagsh]hflags}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnIubeh}(h]h ]h"]h$]h&]j<j=uh1jhj5IhhhjGIhMbubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1IhhhjGIhMbubah}(h]j,Iah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGIhMbhj.IhhubjS)}(hhh]jX)}(hFree a datagram skbuff forciblyh]hFree a datagram skbuff forcibly}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMbhjJhhubah}(h]h ]h"]h$]h&]uh1jRhj.IhhhjGIhMbubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sock *sk`` socket ``struct sk_buff *skb`` datagram skbuff ``unsigned int flags`` MSG\_ flags **Description** This function frees a datagram skbuff that was received by skb_recv_datagram. The flags argument must match the one used for skb_recv_datagram. If the MSG_PEEK flag is set, and the packet is still on the receive queue of the socket, it will be taken off the queue before it is freed. This function currently only disables BH when acquiring the sk_receive_queue lock. Therefore it must not be used in a context where that lock is acquired in an IRQ context. It returns 0 if the packet was removed by us.h](jX)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMfhjJubj)}(hhh](j)}(h``struct sock *sk`` socket h](j)}(h``struct sock *sk``h]j)}(hjJh]hstruct sock *sk}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMchjJubj)}(hhh]jX)}(hsocketh]hsocket}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMchjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMchjJubj)}(h(``struct sk_buff *skb`` datagram skbuff h](j)}(h``struct sk_buff *skb``h]j)}(hj4Kh]hstruct sk_buff *skb}(hj6KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Kubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMdhj.Kubj)}(hhh]jX)}(hdatagram skbuffh]hdatagram skbuff}(hjMKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIKhMdhjJKubah}(h]h ]h"]h$]h&]uh1jhj.Kubeh}(h]h ]h"]h$]h&]uh1jhjIKhMdhjJubj)}(h#``unsigned int flags`` MSG\_ flags h](j)}(h``unsigned int flags``h]j)}(hjmKh]hunsigned int flags}(hjoKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkKubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMehjgKubj)}(hhh]jX)}(h MSG\_ flagsh]h MSG_ flags}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMehjKubah}(h]h ]h"]h$]h&]uh1jhjgKubeh}(h]h ]h"]h$]h&]uh1jhjKhMehjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjX)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMghjJubj )}(hXThis function frees a datagram skbuff that was received by skb_recv_datagram. The flags argument must match the one used for skb_recv_datagram. If the MSG_PEEK flag is set, and the packet is still on the receive queue of the socket, it will be taken off the queue before it is freed. This function currently only disables BH when acquiring the sk_receive_queue lock. Therefore it must not be used in a context where that lock is acquired in an IRQ context. It returns 0 if the packet was removed by us.h](jX)}(hThis function frees a datagram skbuff that was received by skb_recv_datagram. The flags argument must match the one used for skb_recv_datagram.h]hThis function frees a datagram skbuff that was received by skb_recv_datagram. The flags argument must match the one used for skb_recv_datagram.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMfhjKubjX)}(hIf the MSG_PEEK flag is set, and the packet is still on the receive queue of the socket, it will be taken off the queue before it is freed.h]hIf the MSG_PEEK flag is set, and the packet is still on the receive queue of the socket, it will be taken off the queue before it is freed.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMjhjKubjX)}(hThis function currently only disables BH when acquiring the sk_receive_queue lock. Therefore it must not be used in a context where that lock is acquired in an IRQ context.h]hThis function currently only disables BH when acquiring the sk_receive_queue lock. Therefore it must not be used in a context where that lock is acquired in an IRQ context.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMnhjKubjX)}(h-It returns 0 if the packet was removed by us.h]h-It returns 0 if the packet was removed by us.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMrhjKubeh}(h]h ]h"]h$]h&]uh1j hjKhMfhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.skb_copy_and_crc32c_datagram_iter (C function)#c.skb_copy_and_crc32c_datagram_iterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hvint skb_copy_and_crc32c_datagram_iter (const struct sk_buff *skb, int offset, struct iov_iter *to, int len, u32 *crcp)h]h)}(huint skb_copy_and_crc32c_datagram_iter(const struct sk_buff *skb, int offset, struct iov_iter *to, int len, u32 *crcp)h](j)}(hinth]hint}(hj$LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj LhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMubj)}(h h]h }(hj3LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Lhhhj2LhMubj)}(h!skb_copy_and_crc32c_datagram_iterh]j%)}(h!skb_copy_and_crc32c_datagram_iterh]h!skb_copy_and_crc32c_datagram_iter}(hjELhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjALubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj Lhhhj2LhMubj)}(hP(const struct sk_buff *skb, int offset, struct iov_iter *to, int len, u32 *crcp)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjaLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]Lubj)}(h h]h }(hjnLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Lubh)}(hjh]hstruct}(hj|LhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]Lubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Lubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j')}jjGLsb#c.skb_copy_and_crc32c_datagram_iterasbuh1hhj]Lubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]Lubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]Lubj%)}(hskbh]hskb}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]Lubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYLubj)}(h int offseth](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj%)}(hoffseth]hoffset}(hj MhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYLubj)}(hstruct iov_iter *toh](h)}(hjh]hstruct}(hj#MhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hj0MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(hiov_iterh]hiov_iter}(hjAMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>Mubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCMmodnameN classnameNjj!)}j$]jL#c.skb_copy_and_crc32c_datagram_iterasbuh1hhjMubj)}(h h]h }(hj_MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hj>h]h*}(hjmMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(htoh]hto}(hjzMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYLubj)}(hint lenh](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj%)}(hlenh]hlen}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYLubj)}(h u32 *crcph](h)}(hhh]j%)}(hu32h]hu32}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjMmodnameN classnameNjj!)}j$]jL#c.skb_copy_and_crc32c_datagram_iterasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(hcrcph]hcrcp}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYLubeh}(h]h ]h"]h$]h&]j<j=uh1jhj Lhhhj2LhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhj2LhMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2LhMhjLhhubjS)}(hhh]jX)}(h=Copy datagram to an iovec iterator and update a CRC32C value.h]h=Copy datagram to an iovec iterator and update a CRC32C value.}(hj.NhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj+Nhhubah}(h]h ]h"]h$]h&]uh1jRhjLhhhj2LhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjFNjxjFNjyjzj{uh1hhhhj[hNhNubj})}(hXc**Parameters** ``const struct sk_buff *skb`` buffer to copy ``int offset`` offset in the buffer to start copying from ``struct iov_iter *to`` iovec iterator to copy to ``int len`` amount of data to copy from buffer to iovec ``u32 *crcp`` pointer to CRC32C value to update **Return** 0 on success, -EFAULT if there was a fault during copy.h](jX)}(h**Parameters**h]j)}(hjPNh]h Parameters}(hjRNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjJNubj)}(hhh](j)}(h-``const struct sk_buff *skb`` buffer to copy h](j)}(h``const struct sk_buff *skb``h]j)}(hjoNh]hconst struct sk_buff *skb}(hjqNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjiNubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjiNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjfNubj)}(h:``int offset`` offset in the buffer to start copying from h](j)}(h``int offset``h]j)}(hjNh]h int offset}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjNubj)}(hhh]jX)}(h*offset in the buffer to start copying fromh]h*offset in the buffer to start copying from}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjfNubj)}(h2``struct iov_iter *to`` iovec iterator to copy to h](j)}(h``struct iov_iter *to``h]j)}(hjNh]hstruct iov_iter *to}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjNubj)}(hhh]jX)}(hiovec iterator to copy toh]hiovec iterator to copy to}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjfNubj)}(h8``int len`` amount of data to copy from buffer to iovec h](j)}(h ``int len``h]j)}(hjOh]hint len}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjOubj)}(hhh]jX)}(h+amount of data to copy from buffer to iovech]h+amount of data to copy from buffer to iovec}(hj3OhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/OhMhj0Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj/OhMhjfNubj)}(h0``u32 *crcp`` pointer to CRC32C value to update h](j)}(h ``u32 *crcp``h]j)}(hjSOh]h u32 *crcp}(hjUOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQOubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjMOubj)}(hhh]jX)}(h!pointer to CRC32C value to updateh]h!pointer to CRC32C value to update}(hjlOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhOhMhjiOubah}(h]h ]h"]h$]h&]uh1jhjMOubeh}(h]h ]h"]h$]h&]uh1jhjhOhMhjfNubeh}(h]h ]h"]h$]h&]uh1jhjJNubjX)}(h **Return**h]j)}(hjOh]hReturn}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjJNubjX)}(h70 on success, -EFAULT if there was a fault during copy.h]h70 on success, -EFAULT if there was a fault during copy.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjJNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#skb_copy_datagram_iter (C function)c.skb_copy_datagram_iterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h`int skb_copy_datagram_iter (const struct sk_buff *skb, int offset, struct iov_iter *to, int len)h]h)}(h_int skb_copy_datagram_iter(const struct sk_buff *skb, int offset, struct iov_iter *to, int len)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjOhM ubj)}(hskb_copy_datagram_iterh]j%)}(hskb_copy_datagram_iterh]hskb_copy_datagram_iter}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjOhM ubj)}(hE(const struct sk_buff *skb, int offset, struct iov_iter *to, int len)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj Pubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Pubh)}(hjh]hstruct}(hj+PhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj Pubj)}(h h]h }(hj8PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Pubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjIPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKPmodnameN classnameNjj!)}j$]j')}jjOsbc.skb_copy_datagram_iterasbuh1hhj Pubj)}(h h]h }(hjiPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Pubj;)}(hj>h]h*}(hjwPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj Pubj%)}(hskbh]hskb}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Pubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h int offseth](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj%)}(hoffseth]hoffset}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hstruct iov_iter *toh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(hiov_iterh]hiov_iter}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jePc.skb_copy_datagram_iterasbuh1hhjPubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(htoh]hto}(hj)QhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hint lenh](j)}(hinth]hint}(hjBQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Qubj)}(h h]h }(hjPQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>Qubj%)}(hlenh]hlen}(hj^QhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>Qubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjOhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjOhM ubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhM hjOhhubjS)}(hhh]jX)}(h%Copy a datagram to an iovec iterator.h]h%Copy a datagram to an iovec iterator.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hjQhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjOhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjQjxjQjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``const struct sk_buff *skb`` buffer to copy ``int offset`` offset in the buffer to start copying from ``struct iov_iter *to`` iovec iterator to copy to ``int len`` amount of data to copy from buffer to iovech](jX)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjQubj)}(hhh](j)}(h-``const struct sk_buff *skb`` buffer to copy h](j)}(h``const struct sk_buff *skb``h]j)}(hjQh]hconst struct sk_buff *skb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjQubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjQubj)}(h:``int offset`` offset in the buffer to start copying from h](j)}(h``int offset``h]j)}(hjRh]h int offset}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjQubj)}(hhh]jX)}(h*offset in the buffer to start copying fromh]h*offset in the buffer to start copying from}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjQubj)}(h2``struct iov_iter *to`` iovec iterator to copy to h](j)}(h``struct iov_iter *to``h]j)}(hj;Rh]hstruct iov_iter *to}(hj=RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Rubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj5Rubj)}(hhh]jX)}(hiovec iterator to copy toh]hiovec iterator to copy to}(hjTRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPRhMhjQRubah}(h]h ]h"]h$]h&]uh1jhj5Rubeh}(h]h ]h"]h$]h&]uh1jhjPRhMhjQubj)}(h7``int len`` amount of data to copy from buffer to iovech](j)}(h ``int len``h]j)}(hjtRh]hint len}(hjvRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrRubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjnRubj)}(hhh]jX)}(h+amount of data to copy from buffer to iovech]h+amount of data to copy from buffer to iovec}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjRubah}(h]h ]h"]h$]h&]uh1jhjnRubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjQubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(skb_copy_datagram_from_iter (C function)c.skb_copy_datagram_from_iterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(haint skb_copy_datagram_from_iter (struct sk_buff *skb, int offset, struct iov_iter *from, int len)h]h)}(h`int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset, struct iov_iter *from, int len)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhjRhMubj)}(hskb_copy_datagram_from_iterh]j%)}(hskb_copy_datagram_from_iterh]hskb_copy_datagram_from_iter}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhjRhMubj)}(hA(struct sk_buff *skb, int offset, struct iov_iter *from, int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj ShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj)ShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&Subah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+SmodnameN classnameNjj!)}j$]j')}jjRsbc.skb_copy_datagram_from_iterasbuh1hhjSubj)}(h h]h }(hjIShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hjWShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hskbh]hskb}(hjdShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(h int offseth](j)}(hinth]hint}(hj}ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjySubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjySubj%)}(hoffseth]hoffset}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjySubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(hstruct iov_iter *fromh](h)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(hiov_iterh]hiov_iter}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]jESc.skb_copy_datagram_from_iterasbuh1hhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hfromh]hfrom}(hj ThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(hint lenh](j)}(hinth]hint}(hj"ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(h h]h }(hj0ThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj%)}(hlenh]hlen}(hj>ThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhjRhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjRhhhjRhMubah}(h]jRah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMhjRhhubjS)}(hhh]jX)}(h!Copy a datagram from an iov_iter.h]h!Copy a datagram from an iov_iter.}(hjhThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjeThhubah}(h]h ]h"]h$]h&]uh1jRhjRhhhjRhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjTjxjTjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to copy ``int offset`` offset in the buffer to start copying to ``struct iov_iter *from`` the copy source ``int len`` amount of data to copy to buffer from iovec **Description** Returns 0 or -EFAULT.h](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM!hjTubj)}(hhh](j)}(h'``struct sk_buff *skb`` buffer to copy h](j)}(h``struct sk_buff *skb``h]j)}(hjTh]hstruct sk_buff *skb}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjTubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubj)}(h8``int offset`` offset in the buffer to start copying to h](j)}(h``int offset``h]j)}(hjTh]h int offset}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjTubj)}(hhh]jX)}(h(offset in the buffer to start copying toh]h(offset in the buffer to start copying to}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubj)}(h*``struct iov_iter *from`` the copy source h](j)}(h``struct iov_iter *from``h]j)}(hjUh]hstruct iov_iter *from}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hjUubj)}(hhh]jX)}(hthe copy sourceh]hthe copy source}(hj4UhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0UhM hj1Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj0UhM hjTubj)}(h8``int len`` amount of data to copy to buffer from iovec h](j)}(h ``int len``h]j)}(hjTUh]hint len}(hjVUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRUubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM!hjNUubj)}(hhh]jX)}(h+amount of data to copy to buffer from iovech]h+amount of data to copy to buffer from iovec}(hjmUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjiUhM!hjjUubah}(h]h ]h"]h$]h&]uh1jhjNUubeh}(h]h ]h"]h$]h&]uh1jhjiUhM!hjTubeh}(h]h ]h"]h$]h&]uh1jhjTubjX)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM#hjTubj )}(hReturns 0 or -EFAULT.h]jX)}(hjUh]hReturns 0 or -EFAULT.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM"hjUubah}(h]h ]h"]h$]h&]uh1j hjUhM"hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"zerocopy_sg_from_iter (C function)c.zerocopy_sg_from_iterhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hFint zerocopy_sg_from_iter (struct sk_buff *skb, struct iov_iter *from)h]h)}(hEint zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *from)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjUhMubj)}(hzerocopy_sg_from_iterh]j%)}(hzerocopy_sg_from_iterh]hzerocopy_sg_from_iter}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjUhhhjUhMubj)}(h,(struct sk_buff *skb, struct iov_iter *from)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hj'VhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj8VhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5Vubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:VmodnameN classnameNjj!)}j$]j')}jjVsbc.zerocopy_sg_from_iterasbuh1hhjVubj)}(h h]h }(hjXVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj;)}(hj>h]h*}(hjfVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj%)}(hskbh]hskb}(hjsVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjVubj)}(hstruct iov_iter *fromh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hhh]j%)}(hiov_iterh]hiov_iter}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVmodnameN classnameNjj!)}j$]jTVc.zerocopy_sg_from_iterasbuh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj;)}(hj>h]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj%)}(hfromh]hfrom}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjVubeh}(h]h ]h"]h$]h&]j<j=uh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUhhhjUhMubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjUhMhjUhhubjS)}(hhh]jX)}(h*Build a zerocopy datagram from an iov_iterh]h*Build a zerocopy datagram from an iov_iter}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj Whhubah}(h]h ]h"]h$]h&]uh1jRhjUhhhjUhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%Wjxj%Wjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to copy ``struct iov_iter *from`` the source to copy from **Description** The function will first copy up to headlen, and then pin the userspace pages and build frags through them. Returns 0, -EFAULT or -EMSGSIZE.h](jX)}(h**Parameters**h]j)}(hj/Wh]h Parameters}(hj1WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Wubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hj)Wubj)}(hhh](j)}(h'``struct sk_buff *skb`` buffer to copy h](j)}(h``struct sk_buff *skb``h]j)}(hjNWh]hstruct sk_buff *skb}(hjPWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLWubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjHWubj)}(hhh]jX)}(hbuffer to copyh]hbuffer to copy}(hjgWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjcWhMhjdWubah}(h]h ]h"]h$]h&]uh1jhjHWubeh}(h]h ]h"]h$]h&]uh1jhjcWhMhjEWubj)}(h2``struct iov_iter *from`` the source to copy from h](j)}(h``struct iov_iter *from``h]j)}(hjWh]hstruct iov_iter *from}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hjWubj)}(hhh]jX)}(hthe source to copy fromh]hthe source to copy from}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjEWubeh}(h]h ]h"]h$]h&]uh1jhj)WubjX)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hj)Wubj )}(hThe function will first copy up to headlen, and then pin the userspace pages and build frags through them. Returns 0, -EFAULT or -EMSGSIZE.h](jX)}(hjThe function will first copy up to headlen, and then pin the userspace pages and build frags through them.h]hjThe function will first copy up to headlen, and then pin the userspace pages and build frags through them.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hjWubjX)}(h Returns 0, -EFAULT or -EMSGSIZE.h]h Returns 0, -EFAULT or -EMSGSIZE.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chM hjWubeh}(h]h ]h"]h$]h&]uh1j hjWhM hj)Wubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+skb_copy_and_csum_datagram_msg (C function) c.skb_copy_and_csum_datagram_msghNtauh1hhj[hhhNhNubh)}(hhh](h)}(hVint skb_copy_and_csum_datagram_msg (struct sk_buff *skb, int hlen, struct msghdr *msg)h]h)}(hUint skb_copy_and_csum_datagram_msg(struct sk_buff *skb, int hlen, struct msghdr *msg)h](j)}(hinth]hint}(hj XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMlubj)}(h h]h }(hj/XhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhj.XhMlubj)}(hskb_copy_and_csum_datagram_msgh]j%)}(hskb_copy_and_csum_datagram_msgh]hskb_copy_and_csum_datagram_msg}(hjAXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=Xubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXhhhj.XhMlubj)}(h3(struct sk_buff *skb, int hlen, struct msghdr *msg)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj]XhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYXubj)}(h h]h }(hjjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYXubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj{XhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}XmodnameN classnameNjj!)}j$]j')}jjCXsb c.skb_copy_and_csum_datagram_msgasbuh1hhjYXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYXubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYXubj%)}(hskbh]hskb}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUXubj)}(hint hlenh](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj%)}(hhlenh]hhlen}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUXubj)}(hstruct msghdr *msgh](h)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(hmsghdrh]hmsghdr}(hj"YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$YmodnameN classnameNjj!)}j$]jX c.skb_copy_and_csum_datagram_msgasbuh1hhjYubj)}(h h]h }(hj@YhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjNYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hmsgh]hmsg}(hj[YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUXubeh}(h]h ]h"]h$]h&]j<j=uh1jhjXhhhj.XhMlubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXhhhj.XhMlubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.XhMlhjXhhubjS)}(hhh]jX)}(h$Copy and checksum skb to user iovec.h]h$Copy and checksum skb to user iovec.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMlhjYhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhj.XhMlubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjYjxjYjyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` skbuff ``int hlen`` hardware length ``struct msghdr *msg`` destination **Description** Caller _must_ check that skb will fit to this iovec. **Return** 0 - success. -EINVAL - checksum failure. -EFAULT - fault during copy.h](jX)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMphjYubj)}(hhh](j)}(h``struct sk_buff *skb`` skbuff h](j)}(h``struct sk_buff *skb``h]j)}(hjYh]hstruct sk_buff *skb}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMmhjYubj)}(hhh]jX)}(hskbuffh]hskbuff}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMmhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMmhjYubj)}(h``int hlen`` hardware length h](j)}(h ``int hlen``h]j)}(hjYh]hint hlen}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMnhjYubj)}(hhh]jX)}(hhardware lengthh]hhardware length}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMnhjZubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjZhMnhjYubj)}(h#``struct msghdr *msg`` destination h](j)}(h``struct msghdr *msg``h]j)}(hj8Zh]hstruct msghdr *msg}(hj:ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Zubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMohj2Zubj)}(hhh]jX)}(h destinationh]h destination}(hjQZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMZhMohjNZubah}(h]h ]h"]h$]h&]uh1jhj2Zubeh}(h]h ]h"]h$]h&]uh1jhjMZhMohjYubeh}(h]h ]h"]h$]h&]uh1jhjYubjX)}(h**Description**h]j)}(hjsZh]h Description}(hjuZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqZubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMqhjYubj )}(h5Caller _must_ check that skb will fit to this iovec. h]jX)}(h4Caller _must_ check that skb will fit to this iovec.h]h4Caller _must_ check that skb will fit to this iovec.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMphjZubah}(h]h ]h"]h$]h&]uh1j hjZhMphjYubjX)}(h **Return**h]j)}(hjZh]hReturn}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMrhjYubjX)}(hK0 - success. -EINVAL - checksum failure. -EFAULT - fault during copy.h]hK0 - success. -EINVAL - checksum failure. -EFAULT - fault during copy.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMshjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h datagram_poll_queue (C function)c.datagram_poll_queuehNtauh1hhj[hhhNhNubh)}(hhh](h)}(hw__poll_t datagram_poll_queue (struct file *file, struct socket *sock, poll_table *wait, struct sk_buff_head *rcv_queue)h]h)}(hv__poll_t datagram_poll_queue(struct file *file, struct socket *sock, poll_table *wait, struct sk_buff_head *rcv_queue)h](h)}(hhh]j%)}(h__poll_th]h__poll_t}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]j')}jdatagram_poll_queuesbc.datagram_poll_queueasbuh1hhjZhhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZhhhj [hMubj)}(hdatagram_poll_queueh]j%)}(hj [h]hdatagram_poll_queue}(hj [hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZhhhj [hMubj)}(hZ(struct file *file, struct socket *sock, poll_table *wait, struct sk_buff_head *rcv_queue)h](j)}(hstruct file *fileh](h)}(hjh]hstruct}(hj;[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7[ubj)}(h h]h }(hjH[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7[ubh)}(hhh]j%)}(hfileh]hfile}(hjY[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjV[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[[modnameN classnameNjj!)}j$]j[c.datagram_poll_queueasbuh1hhj7[ubj)}(h h]h }(hjw[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7[ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7[ubj%)}(hfileh]hfile}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3[ubj)}(hstruct socket *sockh](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hhh]j%)}(hsocketh]hsocket}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]j[c.datagram_poll_queueasbuh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hsockh]hsock}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3[ubj)}(hpoll_table *waith](h)}(hhh]j%)}(h poll_tableh]h poll_table}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj \modnameN classnameNjj!)}j$]j[c.datagram_poll_queueasbuh1hhj\ubj)}(h h]h }(hj<\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjJ\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hwaith]hwait}(hjW\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3[ubj)}(hstruct sk_buff_head *rcv_queueh](h)}(hjh]hstruct}(hjp\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjl\ubj)}(h h]h }(hj}\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl\ubh)}(hhh]j%)}(h sk_buff_headh]h sk_buff_head}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j[c.datagram_poll_queueasbuh1hhjl\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl\ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjl\ubj%)}(h rcv_queueh]h rcv_queue}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjl\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3[ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjZhhhj [hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhj [hMubah}(h]jZah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj [hMhjZhhubjS)}(hhh]jX)}(h6same as datagram_poll, but on a specific receive queueh]h6same as datagram_poll, but on a specific receive queue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jRhjZhhhj [hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj ]jxj ]jyjzj{uh1hhhhj[hNhNubj})}(hX**Parameters** ``struct file *file`` file struct ``struct socket *sock`` socket ``poll_table *wait`` poll table ``struct sk_buff_head *rcv_queue`` receive queue to poll **Description** Performs polling on the given receive queue, handling shutdown, error, and connection state. This is useful for protocols that deliver userspace-bound packets through a custom queue instead of sk->sk_receive_queue. **Return** poll bitmask indicating the socket's current stateh](jX)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj ]ubj)}(hhh](j)}(h"``struct file *file`` file struct h](j)}(h``struct file *file``h]j)}(hj2]h]hstruct file *file}(hj4]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj,]ubj)}(hhh]jX)}(h file structh]h file struct}(hjK]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjG]hMhjH]ubah}(h]h ]h"]h$]h&]uh1jhj,]ubeh}(h]h ]h"]h$]h&]uh1jhjG]hMhj)]ubj)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hjk]h]hstruct socket *sock}(hjm]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhje]ubj)}(hhh]jX)}(hsocketh]hsocket}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhje]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj)]ubj)}(h ``poll_table *wait`` poll table h](j)}(h``poll_table *wait``h]j)}(hj]h]hpoll_table *wait}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj]ubj)}(hhh]jX)}(h poll tableh]h poll table}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj)]ubj)}(h9``struct sk_buff_head *rcv_queue`` receive queue to poll h](j)}(h"``struct sk_buff_head *rcv_queue``h]j)}(hj]h]hstruct sk_buff_head *rcv_queue}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj]ubj)}(hhh]jX)}(hreceive queue to pollh]hreceive queue to poll}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj)]ubeh}(h]h ]h"]h$]h&]uh1jhj ]ubjX)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj ]ubj )}(hPerforms polling on the given receive queue, handling shutdown, error, and connection state. This is useful for protocols that deliver userspace-bound packets through a custom queue instead of sk->sk_receive_queue. h]jX)}(hPerforms polling on the given receive queue, handling shutdown, error, and connection state. This is useful for protocols that deliver userspace-bound packets through a custom queue instead of sk->sk_receive_queue.h]hPerforms polling on the given receive queue, handling shutdown, error, and connection state. This is useful for protocols that deliver userspace-bound packets through a custom queue instead of sk->sk_receive_queue.}(hj2^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj.^ubah}(h]h ]h"]h$]h&]uh1j hj@^hMhj ]ubjX)}(h **Return**h]j)}(hjI^h]hReturn}(hjK^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG^ubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj ]ubjX)}(h2poll bitmask indicating the socket's current stateh]h4poll bitmask indicating the socket’s current state}(hj_^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj ]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdatagram_poll (C function)c.datagram_pollhNtauh1hhj[hhhNhNubh)}(hhh](h)}(hQ__poll_t datagram_poll (struct file *file, struct socket *sock, poll_table *wait)h]h)}(hP__poll_t datagram_poll(struct file *file, struct socket *sock, poll_table *wait)h](h)}(hhh]j%)}(h__poll_th]h__poll_t}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j')}j datagram_pollsbc.datagram_pollasbuh1hhj^hhhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhj^hMubj)}(h datagram_pollh]j%)}(hj^h]h datagram_poll}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhj^hMubj)}(h:(struct file *file, struct socket *sock, poll_table *wait)h](j)}(hstruct file *fileh](h)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(hfileh]hfile}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_modnameN classnameNjj!)}j$]j^c.datagram_pollasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hj*_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hfileh]hfile}(hj7_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(hstruct socket *sockh](h)}(hjh]hstruct}(hjP_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjL_ubj)}(h h]h }(hj]_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjL_ubh)}(hhh]j%)}(hsocketh]hsocket}(hjn_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjk_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjp_modnameN classnameNjj!)}j$]j^c.datagram_pollasbuh1hhjL_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjL_ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjL_ubj%)}(hsockh]hsock}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(hpoll_table *waith](h)}(hhh]j%)}(h poll_tableh]h poll_table}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_modnameN classnameNjj!)}j$]j^c.datagram_pollasbuh1hhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_ubj%)}(hwaith]hwait}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhj^hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhj^hMubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^hMhj^hhubjS)}(hhh]jX)}(hgeneric datagram pollh]hgeneric datagram poll}(hj&`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj#`hhubah}(h]h ]h"]h$]h&]uh1jRhj^hhhj^hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>`jxj>`jyjzj{uh1hhhhj[hNhNubj})}(hX0**Parameters** ``struct file *file`` file struct ``struct socket *sock`` socket ``poll_table *wait`` poll table **Description** Datagram poll: Again totally generic. This also handles sequenced packet sockets providing the socket receive queue is only ever holding data ready to receive. **Note** when you *don't* use this routine for this protocol, and you use a different write policy from sock_writeable() then please supply your own write_space callback. **Return** poll bitmask indicating the socket's current stateh](jX)}(h**Parameters**h]j)}(hjH`h]h Parameters}(hjJ`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF`ubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjB`ubj)}(hhh](j)}(h"``struct file *file`` file struct h](j)}(h``struct file *file``h]j)}(hjg`h]hstruct file *file}(hji`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhja`ubj)}(hhh]jX)}(h file structh]h file struct}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|`hMhj}`ubah}(h]h ]h"]h$]h&]uh1jhja`ubeh}(h]h ]h"]h$]h&]uh1jhj|`hMhj^`ubj)}(h``struct socket *sock`` socket h](j)}(h``struct socket *sock``h]j)}(hj`h]hstruct socket *sock}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj`ubj)}(hhh]jX)}(hsocketh]hsocket}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj^`ubj)}(h ``poll_table *wait`` poll table h](j)}(h``poll_table *wait``h]j)}(hj`h]hpoll_table *wait}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj`ubj)}(hhh]jX)}(h poll tableh]h poll table}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj^`ubeh}(h]h ]h"]h$]h&]uh1jhjB`ubjX)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhjB`ubj )}(hDatagram poll: Again totally generic. This also handles sequenced packet sockets providing the socket receive queue is only ever holding data ready to receive. h]jX)}(hDatagram poll: Again totally generic. This also handles sequenced packet sockets providing the socket receive queue is only ever holding data ready to receive.h]hDatagram poll: Again totally generic. This also handles sequenced packet sockets providing the socket receive queue is only ever holding data ready to receive.}(hj.ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.chMhj*aubah}(h]h ]h"]h$]h&]uh1j hjh]h*}(hjwbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'bubj%)}(hskh]hsk}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'bubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#bubj)}(h long *timeo_ph](j)}(hlongh]hlong}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(htimeo_ph]htimeo_p}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#bubeh}(h]h ]h"]h$]h&]j<j=uh1jhjahhhjahK6ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjahK6ubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahK6hjahhubjS)}(hhh]jX)}(h1Wait for a socket to get into the connected stateh]h1Wait for a socket to get into the connected state}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK6hjbhhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjahK6ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1hhhhj[hNhNubj})}(h**Parameters** ``struct sock *sk`` sock to wait on ``long *timeo_p`` for how long to wait **Description** Must be called with the socket locked.h](jX)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK:hj cubj)}(hhh](j)}(h$``struct sock *sk`` sock to wait on h](j)}(h``struct sock *sk``h]j)}(hj1ch]hstruct sock *sk}(hj3chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/cubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK7hj+cubj)}(hhh]jX)}(hsock to wait onh]hsock to wait on}(hjJchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFchK7hjGcubah}(h]h ]h"]h$]h&]uh1jhj+cubeh}(h]h ]h"]h$]h&]uh1jhjFchK7hj(cubj)}(h'``long *timeo_p`` for how long to wait h](j)}(h``long *timeo_p``h]j)}(hjjch]h long *timeo_p}(hjlchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhcubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK8hjdcubj)}(hhh]jX)}(hfor how long to waith]hfor how long to wait}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchK8hjcubah}(h]h ]h"]h$]h&]uh1jhjdcubeh}(h]h ]h"]h$]h&]uh1jhjchK8hj(cubeh}(h]h ]h"]h$]h&]uh1jhj cubjX)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK:hj cubjX)}(h&Must be called with the socket locked.h]h&Must be called with the socket locked.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chK9hj cubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"sk_stream_wait_memory (C function)c.sk_stream_wait_memoryhNtauh1hhj[hhhNhNubh)}(hhh](h)}(h:int sk_stream_wait_memory (struct sock *sk, long *timeo_p)h]h)}(h9int sk_stream_wait_memory(struct sock *sk, long *timeo_p)h](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKvubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjchhhjchKvubj)}(hsk_stream_wait_memoryh]j%)}(hsk_stream_wait_memoryh]hsk_stream_wait_memory}(hj dhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjchhhjchKvubj)}(h (struct sock *sk, long *timeo_p)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hj'dhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#dubj)}(h h]h }(hj4dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#dubh)}(hhh]j%)}(hsockh]hsock}(hjEdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGdmodnameN classnameNjj!)}j$]j')}jj dsbc.sk_stream_wait_memoryasbuh1hhj#dubj)}(h h]h }(hjedhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#dubj;)}(hj>h]h*}(hjsdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#dubj%)}(hskh]hsk}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#dubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjdubj)}(h long *timeo_ph](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(htimeo_ph]htimeo_p}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjdubeh}(h]h ]h"]h$]h&]j<j=uh1jhjchhhjchKvubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjchKvubah}(h]jcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjchKvhjchhubjS)}(hhh]jX)}(h!Wait for more memory for a socketh]h!Wait for more memory for a socket}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKvhjdhhubah}(h]h ]h"]h$]h&]uh1jRhjchhhjchKvubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjejxjejyjzj{uh1hhhhj[hNhNubj})}(ha**Parameters** ``struct sock *sk`` socket to wait for memory ``long *timeo_p`` for how longh](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj eubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKzhjeubj)}(hhh](j)}(h.``struct sock *sk`` socket to wait for memory h](j)}(h``struct sock *sk``h]j)}(hj-eh]hstruct sock *sk}(hj/ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+eubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKwhj'eubj)}(hhh]jX)}(hsocket to wait for memoryh]hsocket to wait for memory}(hjFehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBehKwhjCeubah}(h]h ]h"]h$]h&]uh1jhj'eubeh}(h]h ]h"]h$]h&]uh1jhjBehKwhj$eubj)}(h``long *timeo_p`` for how longh](j)}(h``long *timeo_p``h]j)}(hjfeh]h long *timeo_p}(hjhehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdeubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKyhj`eubj)}(hhh]jX)}(h for how longh]h for how long}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:35: ./net/core/stream.chKxhj|eubah}(h]h ]h"]h$]h&]uh1jhj`eubeh}(h]h ]h"]h$]h&]uh1jhj{ehKyhj$eubeh}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hj[hhhNhNubeh}(h]socket-buffer-functionsah ]h"]socket buffer functionsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Socket Filterh]h Socket Filter}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehhhhhK'ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_filter_trim_cap (C function)c.sk_filter_trim_caphNtauh1hhjehhhNhNubh)}(hhh](h)}(hmint sk_filter_trim_cap (struct sock *sk, struct sk_buff *skb, unsigned int cap, enum skb_drop_reason *reason)h]h)}(hlint sk_filter_trim_cap(struct sock *sk, struct sk_buff *skb, unsigned int cap, enum skb_drop_reason *reason)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chKyubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjehhhjehKyubj)}(hsk_filter_trim_caph]j%)}(hsk_filter_trim_caph]hsk_filter_trim_cap}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjehhhjehKyubj)}(hV(struct sock *sk, struct sk_buff *skb, unsigned int cap, enum skb_drop_reason *reason)h](j)}(hstruct sock *skh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfubj)}(h h]h }(hj#fhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(hhh]j%)}(hsockh]hsock}(hj4fhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1fubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6fmodnameN classnameNjj!)}j$]j')}jjesbc.sk_filter_trim_capasbuh1hhjfubj)}(h h]h }(hjTfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hj>h]h*}(hjbfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hskh]hsk}(hjofhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]jPfc.sk_filter_trim_capasbuh1hhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hskbh]hskb}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(hunsigned int caph](j)}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hj"ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj%)}(hcaph]hcap}(hj0ghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(henum skb_drop_reason *reasonh](h)}(hhh]henum}(hjIghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEgubj)}(h h]h }(hjVghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEgubh)}(hhh]j%)}(hskb_drop_reasonh]hskb_drop_reason}(hjgghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjigmodnameN classnameNjj!)}j$]jPfc.sk_filter_trim_capasbuh1hhjEgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEgubj%)}(hreasonh]hreason}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubeh}(h]h ]h"]h$]h&]j<j=uh1jhjehhhjehKyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjehhhjehKyubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehKyhjehhubjS)}(hhh]jX)}(h$run a packet through a socket filterh]h$run a packet through a socket filter}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chKyhjghhubah}(h]h ]h"]h$]h&]uh1jRhjehhhjehKyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjgjxjgjyjzj{uh1hhhhjehNhNubj})}(hXo**Parameters** ``struct sock *sk`` sock associated with :c:type:`sk_buff` ``struct sk_buff *skb`` buffer to filter ``unsigned int cap`` limit on how short the eBPF program may trim the packet ``enum skb_drop_reason *reason`` record drop reason on errors (negative return value) **Description** Run the eBPF program and then cut skb->data to correct size returned by the program. If pkt_len is 0 we toss packet. If skb->len is smaller than pkt_len we keep whole skb->data. This is the socket level wrapper to bpf_prog_run. It returns 0 if the packet should be accepted or -EPERM if the packet should be tossed.h](jX)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chK}hjgubj)}(hhh](j)}(h;``struct sock *sk`` sock associated with :c:type:`sk_buff` h](j)}(h``struct sock *sk``h]j)}(hj hh]hstruct sock *sk}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chKzhjhubj)}(hhh]jX)}(h&sock associated with :c:type:`sk_buff`h](hsock associated with }(hj$hhhhNhNubh)}(h:c:type:`sk_buff`h]j)}(hj.hh]hsk_buff}(hj0hhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj,hubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsk_buffuh1hhj hhKzhj$hubeh}(h]h ]h"]h$]h&]uh1jWhj hhKzhj!hubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhj hhKzhjhubj)}(h)``struct sk_buff *skb`` buffer to filter h](j)}(h``struct sk_buff *skb``h]j)}(hjchh]hstruct sk_buff *skb}(hjehhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjahubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chK{hj]hubj)}(hhh]jX)}(hbuffer to filterh]hbuffer to filter}(hj|hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhhK{hjyhubah}(h]h ]h"]h$]h&]uh1jhj]hubeh}(h]h ]h"]h$]h&]uh1jhjxhhK{hjhubj)}(hM``unsigned int cap`` limit on how short the eBPF program may trim the packet h](j)}(h``unsigned int cap``h]j)}(hjhh]hunsigned int cap}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chK|hjhubj)}(hhh]jX)}(h7limit on how short the eBPF program may trim the packeth]h7limit on how short the eBPF program may trim the packet}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhK|hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhK|hjhubj)}(hV``enum skb_drop_reason *reason`` record drop reason on errors (negative return value) h](j)}(h ``enum skb_drop_reason *reason``h]j)}(hjhh]henum skb_drop_reason *reason}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chK}hjhubj)}(hhh]jX)}(h4record drop reason on errors (negative return value)h]h4record drop reason on errors (negative return value)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhK}hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhK}hjhubeh}(h]h ]h"]h$]h&]uh1jhjgubjX)}(h**Description**h]j)}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chKhjgubjX)}(hX;Run the eBPF program and then cut skb->data to correct size returned by the program. If pkt_len is 0 we toss packet. If skb->len is smaller than pkt_len we keep whole skb->data. This is the socket level wrapper to bpf_prog_run. It returns 0 if the packet should be accepted or -EPERM if the packet should be tossed.h]hX;Run the eBPF program and then cut skb->data to correct size returned by the program. If pkt_len is 0 we toss packet. If skb->len is smaller than pkt_len we keep whole skb->data. This is the socket level wrapper to bpf_prog_run. It returns 0 if the packet should be accepted or -EPERM if the packet should be tossed.}(hj&ihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chK~hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hbpf_prog_create (C function)c.bpf_prog_createhNtauh1hhjehhhNhNubh)}(hhh](h)}(hJint bpf_prog_create (struct bpf_prog **pfp, struct sock_fprog_kern *fprog)h]h)}(hIint bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)h](j)}(hinth]hint}(hjUihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQihhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMaubj)}(h h]h }(hjdihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQihhhjcihMaubj)}(hbpf_prog_createh]j%)}(hbpf_prog_createh]hbpf_prog_create}(hjvihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjriubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjQihhhjcihMaubj)}(h6(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)h](j)}(hstruct bpf_prog **pfph](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hbpf_progh]hbpf_prog}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]j')}jjxisbc.bpf_prog_createasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hpfph]hpfp}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubj)}(hstruct sock_fprog_kern *fprogh](h)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj jubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj jubh)}(hhh]j%)}(hsock_fprog_kernh]hsock_fprog_kern}(hj/jhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,jubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1jmodnameN classnameNjj!)}j$]jic.bpf_prog_createasbuh1hhj jubj)}(h h]h }(hjMjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj jubj;)}(hj>h]h*}(hj[jhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj jubj%)}(hfprogh]hfprog}(hjhjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj jubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubeh}(h]h ]h"]h$]h&]j<j=uh1jhjQihhhjcihMaubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMihhhjcihMaubah}(h]jHiah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjcihMahjJihhubjS)}(hhh]jX)}(hcreate an unattached filterh]hcreate an unattached filter}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMahjjhhubah}(h]h ]h"]h$]h&]uh1jRhjJihhhjcihMaubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhjehNhNubj})}(hX**Parameters** ``struct bpf_prog **pfp`` the unattached filter that is created ``struct sock_fprog_kern *fprog`` the filter program **Description** Create a filter independent of any socket. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.h](jX)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMehjjubj)}(hhh](j)}(h@``struct bpf_prog **pfp`` the unattached filter that is created h](j)}(h``struct bpf_prog **pfp``h]j)}(hjjh]hstruct bpf_prog **pfp}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMbhjjubj)}(hhh]jX)}(h%the unattached filter that is createdh]h%the unattached filter that is created}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMbhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMbhjjubj)}(h5``struct sock_fprog_kern *fprog`` the filter program h](j)}(h!``struct sock_fprog_kern *fprog``h]j)}(hj kh]hstruct sock_fprog_kern *fprog}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj kubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMchjkubj)}(hhh]jX)}(hthe filter programh]hthe filter program}(hj%khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!khMchj"kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj!khMchjjubeh}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hjGkh]h Description}(hjIkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEkubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMehjjubjX)}(hXCreate a filter independent of any socket. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.h]hXCreate a filter independent of any socket. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.}(hj]khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMdhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&bpf_prog_create_from_user (C function)c.bpf_prog_create_from_userhNtauh1hhjehhhNhNubh)}(hhh](h)}(h~int bpf_prog_create_from_user (struct bpf_prog **pfp, struct sock_fprog *fprog, bpf_aux_classic_check_t trans, bool save_orig)h]h)}(h}int bpf_prog_create_from_user(struct bpf_prog **pfp, struct sock_fprog *fprog, bpf_aux_classic_check_t trans, bool save_orig)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhjkhMubj)}(hbpf_prog_create_from_userh]j%)}(hbpf_prog_create_from_userh]hbpf_prog_create_from_user}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkhhhjkhMubj)}(h`(struct bpf_prog **pfp, struct sock_fprog *fprog, bpf_aux_classic_check_t trans, bool save_orig)h](j)}(hstruct bpf_prog **pfph](h)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(hbpf_progh]hbpf_prog}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjkmodnameN classnameNjj!)}j$]j')}jjksbc.bpf_prog_create_from_userasbuh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hj>h]h*}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj;)}(hj>h]h*}(hj"lhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(hpfph]hpfp}(hj/lhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hstruct sock_fprog *fprogh](h)}(hjh]hstruct}(hjHlhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDlubj)}(h h]h }(hjUlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDlubh)}(hhh]j%)}(h sock_fprogh]h sock_fprog}(hjflhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjclubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhlmodnameN classnameNjj!)}j$]jlc.bpf_prog_create_from_userasbuh1hhjDlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDlubj;)}(hj>h]h*}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDlubj%)}(hfprogh]hfprog}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hbpf_aux_classic_check_t transh](h)}(hhh]j%)}(hbpf_aux_classic_check_th]hbpf_aux_classic_check_t}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]jlc.bpf_prog_create_from_userasbuh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj%)}(htransh]htrans}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hbool save_origh](j)}(hjTh]hbool}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj%)}(h save_origh]h save_orig}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubeh}(h]h ]h"]h$]h&]j<j=uh1jhjkhhhjkhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjkhhhjkhMubah}(h]jkah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkhMhjkhhubjS)}(hhh]jX)}(h,create an unattached filter from user bufferh]h,create an unattached filter from user buffer}(hjEmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjBmhhubah}(h]h ]h"]h$]h&]uh1jRhjkhhhjkhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj]mjxj]mjyjzj{uh1hhhhjehNhNubj})}(hX**Parameters** ``struct bpf_prog **pfp`` the unattached filter that is created ``struct sock_fprog *fprog`` the filter program ``bpf_aux_classic_check_t trans`` post-classic verifier transformation handler ``bool save_orig`` save classic BPF program **Description** This function effectively does the same as bpf_prog_create(), only that it builds up its insns buffer from user space provided buffer. It also allows for passing a bpf_aux_classic_check_t handler.h](jX)}(h**Parameters**h]j)}(hjgmh]h Parameters}(hjimhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjemubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjamubj)}(hhh](j)}(h@``struct bpf_prog **pfp`` the unattached filter that is created h](j)}(h``struct bpf_prog **pfp``h]j)}(hjmh]hstruct bpf_prog **pfp}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjmubj)}(hhh]jX)}(h%the unattached filter that is createdh]h%the unattached filter that is created}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj}mubj)}(h0``struct sock_fprog *fprog`` the filter program h](j)}(h``struct sock_fprog *fprog``h]j)}(hjmh]hstruct sock_fprog *fprog}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjmubj)}(hhh]jX)}(hthe filter programh]hthe filter program}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMhj}mubj)}(hO``bpf_aux_classic_check_t trans`` post-classic verifier transformation handler h](j)}(h!``bpf_aux_classic_check_t trans``h]j)}(hjmh]hbpf_aux_classic_check_t trans}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjmubj)}(hhh]jX)}(h,post-classic verifier transformation handlerh]h,post-classic verifier transformation handler}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj nhMhjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj nhMhj}mubj)}(h,``bool save_orig`` save classic BPF program h](j)}(h``bool save_orig``h]j)}(hj1nh]hbool save_orig}(hj3nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/nubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhj+nubj)}(hhh]jX)}(hsave classic BPF programh]hsave classic BPF program}(hjJnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFnhMhjGnubah}(h]h ]h"]h$]h&]uh1jhj+nubeh}(h]h ]h"]h$]h&]uh1jhjFnhMhj}mubeh}(h]h ]h"]h$]h&]uh1jhjamubjX)}(h**Description**h]j)}(hjlnh]h Description}(hjnnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjnubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjamubjX)}(hThis function effectively does the same as bpf_prog_create(), only that it builds up its insns buffer from user space provided buffer. It also allows for passing a bpf_aux_classic_check_t handler.h]hThis function effectively does the same as bpf_prog_create(), only that it builds up its insns buffer from user space provided buffer. It also allows for passing a bpf_aux_classic_check_t handler.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjamubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjehhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsk_attach_filter (C function)c.sk_attach_filterhNtauh1hhjehhhNhNubh)}(hhh](h)}(h@int sk_attach_filter (struct sock_fprog *fprog, struct sock *sk)h]h)}(h?int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)h](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjnhMubj)}(hsk_attach_filterh]j%)}(hsk_attach_filterh]hsk_attach_filter}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjnhMubj)}(h+(struct sock_fprog *fprog, struct sock *sk)h](j)}(hstruct sock_fprog *fprogh](h)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hhh]j%)}(h sock_fprogh]h sock_fprog}(hj ohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj oubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]j')}jjnsbc.sk_attach_filterasbuh1hhjnubj)}(h h]h }(hj,ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hj:ohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hfprogh]hfprog}(hjGohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hstruct sock *skh](h)}(hjh]hstruct}(hj`ohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\oubj)}(h h]h }(hjmohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\oubh)}(hhh]j%)}(hsockh]hsock}(hj~ohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{oubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]j(oc.sk_attach_filterasbuh1hhj\oubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\oubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\oubj%)}(hskh]hsk}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\oubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjnhMubah}(h]jnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjnhhubjS)}(hhh]jX)}(hattach a socket filterh]hattach a socket filter}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chMhjohhubah}(h]h ]h"]h$]h&]uh1jRhjnhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjehNhNubj})}(hXs**Parameters** ``struct sock_fprog *fprog`` the filter program ``struct sock *sk`` the socket to use **Description** Attach the user's filter code. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.h](jX)}(h**Parameters**h]j)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chM hjoubj)}(hhh](j)}(h0``struct sock_fprog *fprog`` the filter program h](j)}(h``struct sock_fprog *fprog``h]j)}(hj"ph]hstruct sock_fprog *fprog}(hj$phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj pubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chM hjpubj)}(hhh]jX)}(hthe filter programh]hthe filter program}(hj;phhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7phM hj8pubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhj7phM hjpubj)}(h&``struct sock *sk`` the socket to use h](j)}(h``struct sock *sk``h]j)}(hj[ph]hstruct sock *sk}(hj]phhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYpubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chM hjUpubj)}(hhh]jX)}(hthe socket to useh]hthe socket to use}(hjtphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjpphM hjqpubah}(h]h ]h"]h$]h&]uh1jhjUpubeh}(h]h ]h"]h$]h&]uh1jhjpphM hjpubeh}(h]h ]h"]h$]h&]uh1jhjoubjX)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chM hjoubjX)}(hAttach the user's filter code. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.h]hAttach the user’s filter code. We first run some sanity checks on it to make sure it does not explode on us later. If an error occurs or there is insufficient memory for the filter a negative errno code is returned. On success the return is zero.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:41: ./net/core/filter.chM hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjehhhNhNubeh}(h] socket-filterah ]h"] socket filterah$]h&]uh1hhhhhhhhK'ubh)}(hhh](h)}(hGeneric Network Statisticsh]hGeneric Network Statistics}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphhhhhK-ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgnet_stats_basic (C struct)c.gnet_stats_basichNtauh1hhjphhhNhNubh)}(hhh](h)}(hgnet_stats_basich]h)}(hstruct gnet_stats_basich](h)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjphhh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhjqhKubj)}(hgnet_stats_basich]j%)}(hjph]hgnet_stats_basic}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjphhhjqhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjphhhjqhKubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjqhKhjphhubjS)}(hhh]jX)}(h!byte/packet throughput statisticsh]h!byte/packet throughput statistics}(hj6qhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhj3qhhubah}(h]h ]h"]h$]h&]uh1jRhjphhhjqhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjNqjxjNqjyjzj{uh1hhhhjphNhNubj})}(h**Definition**:: struct gnet_stats_basic { __u64 bytes; __u32 packets; }; **Members** ``bytes`` number of seen bytes ``packets`` number of seen packetsh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjZqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVqubh:}(hjVqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhjRqubjU)}(h@struct gnet_stats_basic { __u64 bytes; __u32 packets; };h]h@struct gnet_stats_basic { __u64 bytes; __u32 packets; };}hjsqsbah}(h]h ]h"]h$]h&]j<j=uh1jTh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhjRqubjX)}(h **Members**h]j)}(hjqh]hMembers}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK!hjRqubj)}(hhh](j)}(h``bytes`` number of seen bytes h](j)}(h ``bytes``h]j)}(hjqh]hbytes}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhjqubj)}(hhh]jX)}(hnumber of seen bytesh]hnumber of seen bytes}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjqubj)}(h"``packets`` number of seen packetsh](j)}(h ``packets``h]j)}(hjqh]hpackets}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhjqubj)}(hhh]jX)}(hnumber of seen packetsh]hnumber of seen packets}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjqubeh}(h]h ]h"]h$]h&]uh1jhjRqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgnet_stats_rate_est (C struct)c.gnet_stats_rate_esthNtauh1hhjphhhNhNubh)}(hhh](h)}(hgnet_stats_rate_esth]h)}(hstruct gnet_stats_rate_esth](h)}(hjh]hstruct}(hj6rhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2rhhh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhKubj)}(h h]h }(hjDrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2rhhhjCrhKubj)}(hgnet_stats_rate_esth]j%)}(hj0rh]hgnet_stats_rate_est}(hjVrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRrubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2rhhhjCrhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.rhhhjCrhKubah}(h]j)rah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjCrhKhj+rhhubjS)}(hhh]jX)}(hrate estimatorh]hrate estimator}(hjxrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK hjurhhubah}(h]h ]h"]h$]h&]uh1jRhj+rhhhjCrhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjrjxjrjyjzj{uh1hhhhjphNhNubj})}(h**Definition**:: struct gnet_stats_rate_est { __u32 bps; __u32 pps; }; **Members** ``bps`` current byte rate ``pps`` current packet rateh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK$hjrubjU)}(h=struct gnet_stats_rate_est { __u32 bps; __u32 pps; };h]h=struct gnet_stats_rate_est { __u32 bps; __u32 pps; };}hjrsbah}(h]h ]h"]h$]h&]j<j=uh1jTh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK&hjrubjX)}(h **Members**h]j)}(hjrh]hMembers}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK+hjrubj)}(hhh](j)}(h``bps`` current byte rate h](j)}(h``bps``h]j)}(hjrh]hbps}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK"hjrubj)}(hhh]jX)}(hcurrent byte rateh]hcurrent byte rate}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhK"hjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhK"hjrubj)}(h``pps`` current packet rateh](j)}(h``pps``h]j)}(hjsh]hpps}(hj shhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK"hjsubj)}(hhh]jX)}(hcurrent packet rateh]hcurrent packet rate}(hj7shhhNhNubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK#hj4subah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhj3shK"hjrubeh}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h gnet_stats_rate_est64 (C struct)c.gnet_stats_rate_est64hNtauh1hhjphhhNhNubh)}(hhh](h)}(hgnet_stats_rate_est64h]h)}(hstruct gnet_stats_rate_est64h](h)}(hjh]hstruct}(hjxshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtshhh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK)ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtshhhjshK)ubj)}(hgnet_stats_rate_est64h]j%)}(hjrsh]hgnet_stats_rate_est64}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjtshhhjshK)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjpshhhjshK)ubah}(h]jksah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjshK)hjmshhubjS)}(hhh]jX)}(hrate estimatorh]hrate estimator}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK*hjshhubah}(h]h ]h"]h$]h&]uh1jRhjmshhhjshK)ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhjphNhNubj})}(h**Definition**:: struct gnet_stats_rate_est64 { __u64 bps; __u64 pps; }; **Members** ``bps`` current byte rate ``pps`` current packet rateh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh:}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK.hjsubjU)}(h?struct gnet_stats_rate_est64 { __u64 bps; __u64 pps; };h]h?struct gnet_stats_rate_est64 { __u64 bps; __u64 pps; };}hjssbah}(h]h ]h"]h$]h&]j<j=uh1jTh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK0hjsubjX)}(h **Members**h]j)}(hjth]hMembers}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK5hjsubj)}(hhh](j)}(h``bps`` current byte rate h](j)}(h``bps``h]j)}(hj'th]hbps}(hj)thhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%tubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/networking/kapi:47: ./include/uapi/linux/gen_stats.hhK,hj!tubj)}(hhh]jX)}(hcurrent byte rateh]hcurrent byte rate}(hj@thhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjh]h*}(hjrxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"xubj%)}(hskbh]hskb}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"xubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(hint typeh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj%)}(htypeh]htype}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(hint tc_stats_typeh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj%)}(h tc_stats_typeh]h tc_stats_type}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(hint xstats_typeh](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj%)}(h xstats_typeh]h xstats_type}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(hspinlock_t *lockh](h)}(hhh]j%)}(h spinlock_th]h spinlock_t}(hj:yhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7yubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjh]h*}(hjfyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3yubj%)}(hlockh]hlock}(hjsyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3yubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjymodnameN classnameNjj!)}j$]j`xc.gnet_stats_start_copy_compatasbuh1hhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hdh]hd}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubj)}(h int padattrh](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(h h]h }(hj zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj%)}(hpadattrh]hpadattr}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxubeh}(h]h ]h"]h$]h&]j<j=uh1jhjwhhhjwhK(ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjwhhhjwhK(ubah}(h]jwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwhK(hjwhhubjS)}(hhh]jX)}(h-start dumping procedure in compatibility modeh]h-start dumping procedure in compatibility mode}(hjBzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK(hj?zhhubah}(h]h ]h"]h$]h&]uh1jRhjwhhhjwhK(ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZzjxjZzjyjzj{uh1hhhhjphNhNubj})}(hX1**Parameters** ``struct sk_buff *skb`` socket buffer to put statistics TLVs into ``int type`` TLV type for top level statistic TLV ``int tc_stats_type`` TLV type for backward compatibility struct tc_stats TLV ``int xstats_type`` TLV type for backward compatibility xstats TLV ``spinlock_t *lock`` statistics lock ``struct gnet_dump *d`` dumping handle ``int padattr`` padding attribute **Description** Initializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS. The dumping handle is marked to be in backward compatibility mode telling all gnet_stats_copy_XXX() functions to fill a local copy of struct tc_stats. Returns 0 on success or -1 if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hjdzh]h Parameters}(hjfzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbzubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK,hj^zubj)}(hhh](j)}(hB``struct sk_buff *skb`` socket buffer to put statistics TLVs into h](j)}(h``struct sk_buff *skb``h]j)}(hjzh]hstruct sk_buff *skb}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK)hj}zubj)}(hhh]jX)}(h)socket buffer to put statistics TLVs intoh]h)socket buffer to put statistics TLVs into}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhK)hjzubah}(h]h ]h"]h$]h&]uh1jhj}zubeh}(h]h ]h"]h$]h&]uh1jhjzhK)hjzzubj)}(h2``int type`` TLV type for top level statistic TLV h](j)}(h ``int type``h]j)}(hjzh]hint type}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK*hjzubj)}(hhh]jX)}(h$TLV type for top level statistic TLVh]h$TLV type for top level statistic TLV}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhK*hjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhK*hjzzubj)}(hN``int tc_stats_type`` TLV type for backward compatibility struct tc_stats TLV h](j)}(h``int tc_stats_type``h]j)}(hjzh]hint tc_stats_type}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK+hjzubj)}(hhh]jX)}(h7TLV type for backward compatibility struct tc_stats TLVh]h7TLV type for backward compatibility struct tc_stats TLV}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj {hK+hj {ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj {hK+hjzzubj)}(hC``int xstats_type`` TLV type for backward compatibility xstats TLV h](j)}(h``int xstats_type``h]j)}(hj.{h]hint xstats_type}(hj0{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK,hj({ubj)}(hhh]jX)}(h.TLV type for backward compatibility xstats TLVh]h.TLV type for backward compatibility xstats TLV}(hjG{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjC{hK,hjD{ubah}(h]h ]h"]h$]h&]uh1jhj({ubeh}(h]h ]h"]h$]h&]uh1jhjC{hK,hjzzubj)}(h%``spinlock_t *lock`` statistics lock h](j)}(h``spinlock_t *lock``h]j)}(hjg{h]hspinlock_t *lock}(hji{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK-hja{ubj)}(hhh]jX)}(hstatistics lockh]hstatistics lock}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|{hK-hj}{ubah}(h]h ]h"]h$]h&]uh1jhja{ubeh}(h]h ]h"]h$]h&]uh1jhj|{hK-hjzzubj)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hj{h]hstruct gnet_dump *d}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK.hj{ubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hK.hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hK.hjzzubj)}(h"``int padattr`` padding attribute h](j)}(h``int padattr``h]j)}(hj{h]h int padattr}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK/hj{ubj)}(hhh]jX)}(hpadding attributeh]hpadding attribute}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hK/hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hK/hjzzubeh}(h]h ]h"]h$]h&]uh1jhj^zubjX)}(h**Description**h]j)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK1hj^zubjX)}(hInitializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS.h]hInitializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS.}(hj*|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK0hj^zubjX)}(hThe dumping handle is marked to be in backward compatibility mode telling all gnet_stats_copy_XXX() functions to fill a local copy of struct tc_stats.h]hThe dumping handle is marked to be in backward compatibility mode telling all gnet_stats_copy_XXX() functions to fill a local copy of struct tc_stats.}(hj9|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK4hj^zubjX)}(hOReturns 0 on success or -1 if the room in the socket buffer was not sufficient.h]hOReturns 0 on success or -1 if the room in the socket buffer was not sufficient.}(hjH|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK7hj^zubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"gnet_stats_start_copy (C function)c.gnet_stats_start_copyhNtauh1hhjphhhNhNubh)}(hhh](h)}(hmint gnet_stats_start_copy (struct sk_buff *skb, int type, spinlock_t *lock, struct gnet_dump *d, int padattr)h]h)}(hlint gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock, struct gnet_dump *d, int padattr)h](j)}(hinth]hint}(hjw|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs|hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK`ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs|hhhj|hK`ubj)}(hgnet_stats_start_copyh]j%)}(hgnet_stats_start_copyh]hgnet_stats_start_copy}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjs|hhhj|hK`ubj)}(hS(struct sk_buff *skb, int type, spinlock_t *lock, struct gnet_dump *d, int padattr)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]j')}jj|sbc.gnet_stats_start_copyasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|ubj%)}(hskbh]hskb}(hj }hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(hint typeh](j)}(hinth]hint}(hj&}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"}ubj)}(h h]h }(hj4}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"}ubj%)}(htypeh]htype}(hjB}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(hspinlock_t *lockh](h)}(hhh]j%)}(h spinlock_th]h spinlock_t}(hj^}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`}modnameN classnameNjj!)}j$]j|c.gnet_stats_start_copyasbuh1hhjW}ubj)}(h h]h }(hj|}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW}ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjW}ubj%)}(hlockh]hlock}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j|c.gnet_stats_start_copyasbuh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}ubj%)}(hjyh]hd}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(h int padattrh](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj-~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj%)}(hpadattrh]hpadattr}(hj;~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjs|hhhj|hK`ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjo|hhhj|hK`ubah}(h]jj|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hK`hjl|hhubjS)}(hhh]jX)}(h-start dumping procedure in compatibility modeh]h-start dumping procedure in compatibility mode}(hje~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chK`hjb~hhubah}(h]h ]h"]h$]h&]uh1jRhjl|hhhj|hK`ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj}~jxj}~jyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` socket buffer to put statistics TLVs into ``int type`` TLV type for top level statistic TLV ``spinlock_t *lock`` statistics lock ``struct gnet_dump *d`` dumping handle ``int padattr`` padding attribute **Description** Initializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS. Returns 0 on success or -1 if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKdhj~ubj)}(hhh](j)}(hB``struct sk_buff *skb`` socket buffer to put statistics TLVs into h](j)}(h``struct sk_buff *skb``h]j)}(hj~h]hstruct sk_buff *skb}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKahj~ubj)}(hhh]jX)}(h)socket buffer to put statistics TLVs intoh]h)socket buffer to put statistics TLVs into}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hKahj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKahj~ubj)}(h2``int type`` TLV type for top level statistic TLV h](j)}(h ``int type``h]j)}(hj~h]hint type}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKbhj~ubj)}(hhh]jX)}(h$TLV type for top level statistic TLVh]h$TLV type for top level statistic TLV}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hKbhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKbhj~ubj)}(h%``spinlock_t *lock`` statistics lock h](j)}(h``spinlock_t *lock``h]j)}(hjh]hspinlock_t *lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKchjubj)}(hhh]jX)}(hstatistics lockh]hstatistics lock}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hKchj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hKchj~ubj)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hjQh]hstruct gnet_dump *d}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKdhjKubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhKdhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKdhj~ubj)}(h"``int padattr`` padding attribute h](j)}(h``int padattr``h]j)}(hjh]h int padattr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKehjubj)}(hhh]jX)}(hpadding attributeh]hpadding attribute}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKehj~ubeh}(h]h ]h"]h$]h&]uh1jhj~ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKghj~ubjX)}(hInitializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS.h]hInitializes the dumping handle, grabs the statistic lock and appends an empty TLV header to the socket buffer for use a container for all other statistic TLVS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKfhj~ubjX)}(hOReturns 0 on success or -1 if the room in the socket buffer was not sufficient.h]hOReturns 0 on success or -1 if the room in the socket buffer was not sufficient.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKjhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"gnet_stats_copy_basic (C function)c.gnet_stats_copy_basichNtauh1hhjphhhNhNubh)}(hhh](h)}(hint gnet_stats_copy_basic (struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h]h)}(hint gnet_stats_copy_basic(struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj'hKubj)}(hgnet_stats_copy_basich]j%)}(hgnet_stats_copy_basich]hgnet_stats_copy_basic}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj'hKubj)}(hp(struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h](j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j')}jj<sbc.gnet_stats_copy_basicasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hjyh]hd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(h*struct gnet_stats_basic_sync __percpu *cpuh](h)}(hjh]hstruct}(hjǀhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjÀubj)}(h h]h }(hjԀhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjÀubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.gnet_stats_copy_basicasbuh1hhjÀubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjÀubh__percpu}(hjÀhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjÀubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjÀubj%)}(hcpuh]hcpu}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjÀubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hstruct gnet_stats_basic_sync *bh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]jc.gnet_stats_copy_basicasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(hbh]hb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(h bool runningh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƁhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hrunningh]hrunning}(hjԁhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj'hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj'hKubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hKhjhhubjS)}(hhh]jX)}(h(copy basic statistics into statistic TLVh]h(copy basic statistics into statistic TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj'hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjphNhNubj})}(hXl**Parameters** ``struct gnet_dump *d`` dumping handle ``struct gnet_stats_basic_sync __percpu *cpu`` copy statistic per cpu ``struct gnet_stats_basic_sync *b`` basic statistics ``bool running`` true if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULL **Context** task; must not be run from IRQ or BH contexts **Description** Appends the basic statistics to the top level TLV created by gnet_stats_start_copy(). Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubj)}(hhh](j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hj?h]hstruct gnet_dump *d}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhj9ubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhj6ubj)}(hF``struct gnet_stats_basic_sync __percpu *cpu`` copy statistic per cpu h](j)}(h.``struct gnet_stats_basic_sync __percpu *cpu``h]j)}(hjxh]h*struct gnet_stats_basic_sync __percpu *cpu}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjrubj)}(hhh]jX)}(hcopy statistic per cpuh]hcopy statistic per cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKhj6ubj)}(h5``struct gnet_stats_basic_sync *b`` basic statistics h](j)}(h#``struct gnet_stats_basic_sync *b``h]j)}(hjh]hstruct gnet_stats_basic_sync *b}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubj)}(hhh]jX)}(hbasic statisticsh]hbasic statistics}(hjʂhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƂhKhjǂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƂhKhj6ubj)}(h``bool running`` true if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULL h](j)}(h``bool running``h]j)}(hjh]h bool running}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubj)}(hhh]jX)}(htrue if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULLh](htrue if }(hjhhhNhNubj)}(h**b**h]hb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" represents a running qdisc, thus }(hjhhhNhNubj)}(h**b**h]hb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC’s internal values might change during basic reads. Only used if }(hjhhhNhNubj)}(h**cpu**h]hcpu}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is NULL}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Context**h]j)}(hj\h]hContext}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubjX)}(h-task; must not be run from IRQ or BH contextsh]h-task; must not be run from IRQ or BH contexts}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubjX)}(hUAppends the basic statistics to the top level TLV created by gnet_stats_start_copy().h]hUAppends the basic statistics to the top level TLV created by gnet_stats_start_copy().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%gnet_stats_copy_basic_hw (C function)c.gnet_stats_copy_basic_hwhNtauh1hhjphhhNhNubh)}(hhh](h)}(hint gnet_stats_copy_basic_hw (struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h]h)}(hint gnet_stats_copy_basic_hw(struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h](j)}(hinth]hint}(hj׃hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӃhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӃhhhjhMubj)}(hgnet_stats_copy_basic_hwh]j%)}(hgnet_stats_copy_basic_hwh]hgnet_stats_copy_basic_hw}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjӃhhhjhMubj)}(hp(struct gnet_dump *d, struct gnet_stats_basic_sync __percpu *cpu, struct gnet_stats_basic_sync *b, bool running)h](j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j')}jjsbc.gnet_stats_copy_basic_hwasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjyh]hd}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h*struct gnet_stats_basic_sync __percpu *cpuh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jNc.gnet_stats_copy_basic_hwasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__percpu}(hjhhhNhNubj)}(h h]h }(hjӄhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hcpuh]hcpu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct gnet_stats_basic_sync *bh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]jNc.gnet_stats_copy_basic_hwasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjh]hb}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h bool runningh](j)}(hjTh]hbool}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj%)}(hrunningh]hrunning}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjӃhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjσhhhjhMubah}(h]jʃah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhj̃hhubjS)}(hhh]jX)}(h+copy basic hw statistics into statistic TLVh]h+copy basic hw statistics into statistic TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj̃hhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjӅjxjӅjyjzj{uh1hhhhjphNhNubj})}(hXl**Parameters** ``struct gnet_dump *d`` dumping handle ``struct gnet_stats_basic_sync __percpu *cpu`` copy statistic per cpu ``struct gnet_stats_basic_sync *b`` basic statistics ``bool running`` true if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULL **Context** task; must not be run from IRQ or BH contexts **Description** Appends the basic statistics to the top level TLV created by gnet_stats_start_copy(). Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hj݅h]h Parameters}(hj߅hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۅubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubj)}(hhh](j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hjh]hstruct gnet_dump *d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``struct gnet_stats_basic_sync __percpu *cpu`` copy statistic per cpu h](j)}(h.``struct gnet_stats_basic_sync __percpu *cpu``h]j)}(hj5h]h*struct gnet_stats_basic_sync __percpu *cpu}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhj/ubj)}(hhh]jX)}(hcopy statistic per cpuh]hcopy statistic per cpu}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(h5``struct gnet_stats_basic_sync *b`` basic statistics h](j)}(h#``struct gnet_stats_basic_sync *b``h]j)}(hjnh]hstruct gnet_stats_basic_sync *b}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjhubj)}(hhh]jX)}(hbasic statisticsh]hbasic statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``bool running`` true if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULL h](j)}(h``bool running``h]j)}(hjh]h bool running}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubj)}(hhh]jX)}(htrue if **b** represents a running qdisc, thus **b**'s internal values might change during basic reads. Only used if **cpu** is NULLh](htrue if }(hjhhhNhNubj)}(h**b**h]hb}(hjȆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" represents a running qdisc, thus }(hjhhhNhNubj)}(h**b**h]hb}(hjچhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC’s internal values might change during basic reads. Only used if }(hjhhhNhNubj)}(h**cpu**h]hcpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is NULL}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjׅubjX)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubjX)}(h-task; must not be run from IRQ or BH contextsh]h-task; must not be run from IRQ or BH contexts}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubjX)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubjX)}(hUAppends the basic statistics to the top level TLV created by gnet_stats_start_copy().h]hUAppends the basic statistics to the top level TLV created by gnet_stats_start_copy().}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjׅubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%gnet_stats_copy_rate_est (C function)c.gnet_stats_copy_rate_esthNtauh1hhjphhhNhNubh)}(hhh](h)}(h^int gnet_stats_copy_rate_est (struct gnet_dump *d, struct net_rate_estimator __rcu **rate_est)h]h)}(h]int gnet_stats_copy_rate_est(struct gnet_dump *d, struct net_rate_estimator __rcu **rate_est)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM)ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM)ubj)}(hgnet_stats_copy_rate_esth]j%)}(hgnet_stats_copy_rate_esth]hgnet_stats_copy_rate_est}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM)ubj)}(hA(struct gnet_dump *d, struct net_rate_estimator __rcu **rate_est)h](j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjчhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj͇ubj)}(h h]h }(hjއhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj͇ubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.gnet_stats_copy_rate_estasbuh1hhj͇ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj͇ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj͇ubj%)}(hjyh]hd}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj͇ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjɇubj)}(h*struct net_rate_estimator __rcu **rate_esth](h)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(hnet_rate_estimatorh]hnet_rate_estimator}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbmodnameN classnameNjj!)}j$]j c.gnet_stats_copy_rate_estasbuh1hhj>ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh__rcu}(hj>hhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(hrate_esth]hrate_est}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjɇubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM)ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM)hjhhubjS)}(hhh]jX)}(h2copy rate estimator statistics into statistics TLVh]h2copy rate estimator statistics into statistics TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM)hj߈hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM)ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjphNhNubj})}(hX\**Parameters** ``struct gnet_dump *d`` dumping handle ``struct net_rate_estimator __rcu **rate_est`` rate estimator **Description** Appends the rate estimator statistics to the top level TLV created by gnet_stats_start_copy(). Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM-hjubj)}(hhh](j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hj#h]hstruct gnet_dump *d}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM*hjubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hM*hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM*hjubj)}(h>``struct net_rate_estimator __rcu **rate_est`` rate estimator h](j)}(h.``struct net_rate_estimator __rcu **rate_est``h]j)}(hj\h]h*struct net_rate_estimator __rcu **rate_est}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM+hjVubj)}(hhh]jX)}(hrate estimatorh]hrate estimator}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhM+hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM+hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM-hjubjX)}(h^Appends the rate estimator statistics to the top level TLV created by gnet_stats_start_copy().h]h^Appends the rate estimator statistics to the top level TLV created by gnet_stats_start_copy().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM,hjubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"gnet_stats_copy_queue (C function)c.gnet_stats_copy_queuehNtauh1hhjphhhNhNubh)}(hhh](h)}(hint gnet_stats_copy_queue (struct gnet_dump *d, struct gnet_stats_queue __percpu *cpu_q, struct gnet_stats_queue *q, __u32 qlen)h]h)}(hint gnet_stats_copy_queue(struct gnet_dump *d, struct gnet_stats_queue __percpu *cpu_q, struct gnet_stats_queue *q, __u32 qlen)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubj)}(hgnet_stats_copy_queueh]j%)}(hgnet_stats_copy_queueh]hgnet_stats_copy_queue}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMuubj)}(hf(struct gnet_dump *d, struct gnet_stats_queue __percpu *cpu_q, struct gnet_stats_queue *q, __u32 qlen)h](j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j')}jjsbc.gnet_stats_copy_queueasbuh1hhj$ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hjyh]hd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h'struct gnet_stats_queue __percpu *cpu_qh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_queueh]hgnet_stats_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jbc.gnet_stats_copy_queueasbuh1hhjubj)}(h h]h }(hjՊhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__percpu}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hcpu_qh]hcpu_q}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct gnet_stats_queue *qh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_queueh]hgnet_stats_queue}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]jbc.gnet_stats_copy_queueasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hqh]hq}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h __u32 qlenh](h)}(hhh]j%)}(h__u32h]h__u32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jbc.gnet_stats_copy_queueasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hqlenh]hqlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMuubah}(h]jމah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMuhjhhubjS)}(hhh]jX)}(h)copy queue statistics into statistics TLVh]h)copy queue statistics into statistics TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct gnet_dump *d`` dumping handle ``struct gnet_stats_queue __percpu *cpu_q`` per cpu queue statistics ``struct gnet_stats_queue *q`` queue statistics ``__u32 qlen`` queue length statistics **Description** Appends the queue statistics to the top level TLV created by gnet_stats_start_copy(). Using per cpu queue statistics if they are available. Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMyhjubj)}(hhh](j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hj%h]hstruct gnet_dump *d}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMvhjubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMvhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMvhjubj)}(hE``struct gnet_stats_queue __percpu *cpu_q`` per cpu queue statistics h](j)}(h+``struct gnet_stats_queue __percpu *cpu_q``h]j)}(hj^h]h'struct gnet_stats_queue __percpu *cpu_q}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMwhjXubj)}(hhh]jX)}(hper cpu queue statisticsh]hper cpu queue statistics}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMwhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMwhjubj)}(h0``struct gnet_stats_queue *q`` queue statistics h](j)}(h``struct gnet_stats_queue *q``h]j)}(hjh]hstruct gnet_stats_queue *q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMxhjubj)}(hhh]jX)}(hqueue statisticsh]hqueue statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h'``__u32 qlen`` queue length statistics h](j)}(h``__u32 qlen``h]j)}(hjЌh]h __u32 qlen}(hjҌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΌubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMyhjʌubj)}(hhh]jX)}(hqueue length statisticsh]hqueue length statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjʌubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM{hjubjX)}(hAppends the queue statistics to the top level TLV created by gnet_stats_start_copy(). Using per cpu queue statistics if they are available.h]hAppends the queue statistics to the top level TLV created by gnet_stats_start_copy(). Using per cpu queue statistics if they are available.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMzhjubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chM~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h gnet_stats_copy_app (C function)c.gnet_stats_copy_apphNtauh1hhjphhhNhNubh)}(hhh](h)}(h@int gnet_stats_copy_app (struct gnet_dump *d, void *st, int len)h]h)}(h?int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len)h](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[hhhjmhMubj)}(hgnet_stats_copy_apph]j%)}(hgnet_stats_copy_apph]hgnet_stats_copy_app}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj[hhhjmhMubj)}(h((struct gnet_dump *d, void *st, int len)h](j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.gnet_stats_copy_appasbuh1hhjubj)}(h h]h }(hjڍhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjyh]hd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *sth](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hsth]hst}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint lenh](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj%)}(hlenh]hlen}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj[hhhjmhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWhhhjmhMubah}(h]jRah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjmhMhjThhubjS)}(hhh]jX)}(h8copy application specific statistics into statistics TLVh]h8copy application specific statistics into statistics TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjThhhjmhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct gnet_dump *d`` dumping handle ``void *st`` application specific statistics data ``int len`` length of data **Description** Appends the application specific statistics to the top level TLV created by gnet_stats_start_copy() and remembers the data for XSTATS if the dumping handle is in backward compatibility mode. Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubj)}(hhh](j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hj֎h]hstruct gnet_dump *d}(hj؎hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԎubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjЎubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjЎubeh}(h]h ]h"]h$]h&]uh1jhjhMhj͎ubj)}(h2``void *st`` application specific statistics data h](j)}(h ``void *st``h]j)}(hjh]hvoid *st}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhj ubj)}(hhh]jX)}(h$application specific statistics datah]h$application specific statistics data}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj͎ubj)}(h``int len`` length of data h](j)}(h ``int len``h]j)}(hjHh]hint len}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjBubj)}(hhh]jX)}(hlength of datah]hlength of data}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj͎ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubjX)}(hAppends the application specific statistics to the top level TLV created by gnet_stats_start_copy() and remembers the data for XSTATS if the dumping handle is in backward compatibility mode.h]hAppends the application specific statistics to the top level TLV created by gnet_stats_start_copy() and remembers the data for XSTATS if the dumping handle is in backward compatibility mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#gnet_stats_finish_copy (C function)c.gnet_stats_finish_copyhNtauh1hhjphhhNhNubh)}(hhh](h)}(h0int gnet_stats_finish_copy (struct gnet_dump *d)h]h)}(h/int gnet_stats_finish_copy(struct gnet_dump *d)h](j)}(hinth]hint}(hj׏hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӏhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӏhhhjhMubj)}(hgnet_stats_finish_copyh]j%)}(hgnet_stats_finish_copyh]hgnet_stats_finish_copy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjӏhhhjhMubj)}(h(struct gnet_dump *d)h]j)}(hstruct gnet_dump *dh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h gnet_dumph]h gnet_dump}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j')}jjsbc.gnet_stats_finish_copyasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjyh]hd}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjӏhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjϏhhhjhMubah}(h]jʏah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhj̏hhubjS)}(hhh]jX)}(hfinish dumping procedureh]hfinish dumping procedure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj̏hhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct gnet_dump *d`` dumping handle **Description** Corrects the length of the top level TLV to include all TLVs added by gnet_stats_copy_XXX() calls. Adds the backward compatibility TLVs if gnet_stats_start_copy_compat() was used and releases the statistics lock. Returns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubj)}(hhh]j)}(h'``struct gnet_dump *d`` dumping handle h](j)}(h``struct gnet_dump *d``h]j)}(hjאh]hstruct gnet_dump *d}(hjِhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՐubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjѐubj)}(hhh]jX)}(hdumping handleh]hdumping handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjѐubeh}(h]h ]h"]h$]h&]uh1jhjhMhjΐubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubjX)}(hCorrects the length of the top level TLV to include all TLVs added by gnet_stats_copy_XXX() calls. Adds the backward compatibility TLVs if gnet_stats_start_copy_compat() was used and releases the statistics lock.h]hCorrects the length of the top level TLV to include all TLVs added by gnet_stats_copy_XXX() calls. Adds the backward compatibility TLVs if gnet_stats_start_copy_compat() was used and releases the statistics lock.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubjX)}(hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.h]hpReturns 0 on success or -1 with the statistic lock released if the room in the socket buffer was not sufficient.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:50: ./net/core/gen_stats.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgen_new_estimator (C function)c.gen_new_estimatorhNtauh1hhjphhhNhNubh)}(hhh](h)}(hint gen_new_estimator (struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h]h)}(hint gen_new_estimator(struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKqubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjthKqubj)}(hgen_new_estimatorh]j%)}(hgen_new_estimatorh]hgen_new_estimator}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjbhhhjthKqubj)}(h(struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h](j)}(h$struct gnet_stats_basic_sync *bstatsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjÑmodnameN classnameNjj!)}j$]j')}jjsbc.gen_new_estimatorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbstatsh]hbstats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h1struct gnet_stats_basic_sync __percpu *cpu_bstatsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]jݑc.gen_new_estimatorasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__percpu}(hjhhhNhNubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h cpu_bstatsh]h cpu_bstats}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h*struct net_rate_estimator __rcu **rate_esth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnet_rate_estimatorh]hnet_rate_estimator}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jݑc.gen_new_estimatorasbuh1hhjubj)}(h h]h }(hjӒhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__rcu}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrate_esth]hrate_est}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hspinlock_t *lockh](h)}(hhh]j%)}(h spinlock_th]h spinlock_t}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]jݑc.gen_new_estimatorasbuh1hhj"ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hlockh]hlock}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool runningh](j)}(hjTh]hbool}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj%)}(hrunningh]hrunning}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct nlattr *opth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnlattrh]hnlattr}(hj͓hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjʓubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjϓmodnameN classnameNjj!)}j$]jݑc.gen_new_estimatorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hopth]hopt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjbhhhjthKqubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhjthKqubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthKqhj[hhubjS)}(hhh]jX)}(hcreate a new rate estimatorh]hcreate a new rate estimator}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKqhj-hhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhjthKqubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct gnet_stats_basic_sync *bstats`` basic statistics ``struct gnet_stats_basic_sync __percpu *cpu_bstats`` bstats per cpu ``struct net_rate_estimator __rcu **rate_est`` rate estimator statistics ``spinlock_t *lock`` lock for statistics and control path ``bool running`` true if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **bstats_cpu** is NULL ``struct nlattr *opt`` rate estimator configuration TLV **Description** Creates a new rate estimator with :c:type:`bstats` as source and :c:type:`rate_est` as destination. A new timer with the interval specified in the configuration TLV is created. Upon each interval, the latest statistics will be read from :c:type:`bstats` and the estimated rate will be stored in :c:type:`rate_est` with the statistics lock grabbed during this period. Returns 0 on success or a negative error code.h](jX)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKuhjLubj)}(hhh](j)}(h:``struct gnet_stats_basic_sync *bstats`` basic statistics h](j)}(h(``struct gnet_stats_basic_sync *bstats``h]j)}(hjqh]h$struct gnet_stats_basic_sync *bstats}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKrhjkubj)}(hhh]jX)}(hbasic statisticsh]hbasic statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhKrhjhubj)}(hE``struct gnet_stats_basic_sync __percpu *cpu_bstats`` bstats per cpu h](j)}(h5``struct gnet_stats_basic_sync __percpu *cpu_bstats``h]j)}(hjh]h1struct gnet_stats_basic_sync __percpu *cpu_bstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKshjubj)}(hhh]jX)}(hbstats per cpuh]hbstats per cpu}(hjÔhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjhubj)}(hI``struct net_rate_estimator __rcu **rate_est`` rate estimator statistics h](j)}(h.``struct net_rate_estimator __rcu **rate_est``h]j)}(hjh]h*struct net_rate_estimator __rcu **rate_est}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKthjݔubj)}(hhh]jX)}(hrate estimator statisticsh]hrate estimator statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKthjubah}(h]h ]h"]h$]h&]uh1jhjݔubeh}(h]h ]h"]h$]h&]uh1jhjhKthjhubj)}(h:``spinlock_t *lock`` lock for statistics and control path h](j)}(h``spinlock_t *lock``h]j)}(hjh]hspinlock_t *lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKuhjubj)}(hhh]jX)}(h$lock for statistics and control pathh]h$lock for statistics and control path}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hKuhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hKuhjhubj)}(h``bool running`` true if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **bstats_cpu** is NULL h](j)}(h``bool running``h]j)}(hjUh]h bool running}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKxhjOubj)}(hhh]jX)}(htrue if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **bstats_cpu** is NULLh](htrue if }(hjnhhhNhNubj)}(h **bstats**h]hbstats}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh" represents a running qdisc, thus }(hjnhhhNhNubj)}(h **bstats**h]hbstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubhB’ internal values might change during basic reads. Only used if }(hjnhhhNhNubj)}(h**bstats_cpu**h]h bstats_cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh is NULL}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKvhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhKxhjhubj)}(h8``struct nlattr *opt`` rate estimator configuration TLV h](j)}(h``struct nlattr *opt``h]j)}(hjŕh]hstruct nlattr *opt}(hjǕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÕubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKyhjubj)}(hhh]jX)}(h rate estimator configuration TLVh]h rate estimator configuration TLV}(hjޕhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjڕhKyhjەubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڕhKyhjhubeh}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chK{hjLubjX)}(hXnCreates a new rate estimator with :c:type:`bstats` as source and :c:type:`rate_est` as destination. A new timer with the interval specified in the configuration TLV is created. Upon each interval, the latest statistics will be read from :c:type:`bstats` and the estimated rate will be stored in :c:type:`rate_est` with the statistics lock grabbed during this period.h](h"Creates a new rate estimator with }(hjhhhNhNubh)}(h:c:type:`bstats`h]j)}(hj h]hbstats}(hj"hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjbstatsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKzhjubh as source and }(hjhhhNhNubh)}(h:c:type:`rate_est`h]j)}(hjDh]hrate_est}(hjFhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjrate_estuh1hhj=hKzhjubh as destination. A new timer with the interval specified in the configuration TLV is created. Upon each interval, the latest statistics will be read from }(hjhhhNhNubh)}(h:c:type:`bstats`h]j)}(hjgh]hbstats}(hjihhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjbstatsuh1hhj=hKzhjubh* and the estimated rate will be stored in }(hjhhhNhNubh)}(h:c:type:`rate_est`h]j)}(hjh]hrate_est}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjrate_estuh1hhj=hKzhjubh5 with the statistics lock grabbed during this period.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj=hKzhjLubjX)}(h.Returns 0 on success or a negative error code.h]h.Returns 0 on success or a negative error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgen_kill_estimator (C function)c.gen_kill_estimatorhNtauh1hhjphhhNhNubh)}(hhh](h)}(hDvoid gen_kill_estimator (struct net_rate_estimator __rcu **rate_est)h]h)}(hCvoid gen_kill_estimator(struct net_rate_estimator __rcu **rate_est)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܖhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjܖhhhjhKubj)}(hgen_kill_estimatorh]j%)}(hgen_kill_estimatorh]hgen_kill_estimator}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjܖhhhjhKubj)}(h,(struct net_rate_estimator __rcu **rate_est)h]j)}(h*struct net_rate_estimator __rcu **rate_esth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnet_rate_estimatorh]hnet_rate_estimator}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jjsbc.gen_kill_estimatorasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__rcu}(hjhhhNhNubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrate_esth]hrate_est}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjܖhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjؖhhhjhKubah}(h]jӖah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjՖhhubjS)}(hhh]jX)}(hremove a rate estimatorh]hremove a rate estimator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjՖhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjחjxjחjyjzj{uh1hhhhjphNhNubj})}(h}**Parameters** ``struct net_rate_estimator __rcu **rate_est`` rate estimator **Description** Removes the rate estimator.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjߗubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjۗubj)}(hhh]j)}(h>``struct net_rate_estimator __rcu **rate_est`` rate estimator h](j)}(h.``struct net_rate_estimator __rcu **rate_est``h]j)}(hjh]h*struct net_rate_estimator __rcu **rate_est}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubj)}(hhh]jX)}(hrate estimatorh]hrate estimator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjۗubjX)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjۗubjX)}(hRemoves the rate estimator.h]hRemoves the rate estimator.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjۗubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"gen_replace_estimator (C function)c.gen_replace_estimatorhNtauh1hhjphhhNhNubh)}(hhh](h)}(hint gen_replace_estimator (struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h]h)}(hint gen_replace_estimator(struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhjhKubj)}(hgen_replace_estimatorh]j%)}(hgen_replace_estimatorh]hgen_replace_estimator}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj|hhhjhKubj)}(h(struct gnet_stats_basic_sync *bstats, struct gnet_stats_basic_sync __percpu *cpu_bstats, struct net_rate_estimator __rcu **rate_est, spinlock_t *lock, bool running, struct nlattr *opt)h](j)}(h$struct gnet_stats_basic_sync *bstatsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjʘhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjۘhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjؘubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjݘmodnameN classnameNjj!)}j$]j')}jjsbc.gen_replace_estimatorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbstatsh]hbstats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h1struct gnet_stats_basic_sync __percpu *cpu_bstatsh](h)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh)}(hhh]j%)}(hgnet_stats_basic_synch]hgnet_stats_basic_sync}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjOmodnameN classnameNjj!)}j$]jc.gen_replace_estimatorasbuh1hhj+ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh__percpu}(hj+hhhNhNubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubj%)}(h cpu_bstatsh]h cpu_bstats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h*struct net_rate_estimator __rcu **rate_esth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnet_rate_estimatorh]hnet_rate_estimator}(hjϙhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj̙ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjљmodnameN classnameNjj!)}j$]jc.gen_replace_estimatorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__rcu}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrate_esth]hrate_est}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hspinlock_t *lockh](h)}(hhh]j%)}(h spinlock_th]h spinlock_t}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]jc.gen_replace_estimatorasbuh1hhj<ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hlockh]hlock}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool runningh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hrunningh]hrunning}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct nlattr *opth](h)}(hjh]hstruct}(hjɚhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjŚubj)}(h h]h }(hj֚hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjŚubh)}(hhh]j%)}(hnlattrh]hnlattr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.gen_replace_estimatorasbuh1hhjŚubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjŚubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjŚubj%)}(hopth]hopt}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjŚubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj|hhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjxhhhjhKubah}(h]jsah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjuhhubjS)}(hhh]jX)}(h$replace rate estimator configurationh]h$replace rate estimator configuration}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjGhhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjphNhNubj})}(hX**Parameters** ``struct gnet_stats_basic_sync *bstats`` basic statistics ``struct gnet_stats_basic_sync __percpu *cpu_bstats`` bstats per cpu ``struct net_rate_estimator __rcu **rate_est`` rate estimator statistics ``spinlock_t *lock`` lock for statistics and control path ``bool running`` true if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **cpu_bstats** is NULL ``struct nlattr *opt`` rate estimator configuration TLV **Description** Replaces the configuration of a rate estimator by calling gen_kill_estimator() and gen_new_estimator(). Returns 0 on success or a negative error code.h](jX)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjfubj)}(hhh](j)}(h:``struct gnet_stats_basic_sync *bstats`` basic statistics h](j)}(h(``struct gnet_stats_basic_sync *bstats``h]j)}(hjh]h$struct gnet_stats_basic_sync *bstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubj)}(hhh]jX)}(hbasic statisticsh]hbasic statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hE``struct gnet_stats_basic_sync __percpu *cpu_bstats`` bstats per cpu h](j)}(h5``struct gnet_stats_basic_sync __percpu *cpu_bstats``h]j)}(hjěh]h1struct gnet_stats_basic_sync __percpu *cpu_bstats}(hjƛhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj›ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubj)}(hhh]jX)}(hbstats per cpuh]hbstats per cpu}(hjݛhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjٛhKhjڛubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjٛhKhjubj)}(hI``struct net_rate_estimator __rcu **rate_est`` rate estimator statistics h](j)}(h.``struct net_rate_estimator __rcu **rate_est``h]j)}(hjh]h*struct net_rate_estimator __rcu **rate_est}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubj)}(hhh]jX)}(hrate estimator statisticsh]hrate estimator statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``spinlock_t *lock`` lock for statistics and control path h](j)}(h``spinlock_t *lock``h]j)}(hj6h]hspinlock_t *lock}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhj0ubj)}(hhh]jX)}(h$lock for statistics and control pathh]h$lock for statistics and control path}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhKhjubj)}(h``bool running`` true if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **cpu_bstats** is NULL h](j)}(h``bool running``h]j)}(hjoh]h bool running}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjiubj)}(hhh]jX)}(htrue if **bstats** represents a running qdisc, thus **bstats**' internal values might change during basic reads. Only used if **cpu_bstats** is NULLh](htrue if }(hjhhhNhNubj)}(h **bstats**h]hbstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" represents a running qdisc, thus }(hjhhhNhNubj)}(h **bstats**h]hbstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB’ internal values might change during basic reads. Only used if }(hjhhhNhNubj)}(h**cpu_bstats**h]h cpu_bstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is NULL}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h8``struct nlattr *opt`` rate estimator configuration TLV h](j)}(h``struct nlattr *opt``h]j)}(hjߜh]hstruct nlattr *opt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݜubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjٜubj)}(hhh]jX)}(h rate estimator configuration TLVh]h rate estimator configuration TLV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjٜubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjfubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjfubjX)}(hgReplaces the configuration of a rate estimator by calling gen_kill_estimator() and gen_new_estimator().h]hgReplaces the configuration of a rate estimator by calling gen_kill_estimator() and gen_new_estimator().}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjfubjX)}(h.Returns 0 on success or a negative error code.h]h.Returns 0 on success or a negative error code.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!gen_estimator_active (C function)c.gen_estimator_activehNtauh1hhjphhhNhNubh)}(hhh](h)}(hFbool gen_estimator_active (struct net_rate_estimator __rcu **rate_est)h]h)}(hEbool gen_estimator_active(struct net_rate_estimator __rcu **rate_est)h](j)}(hjTh]hbool}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj{hKubj)}(hgen_estimator_activeh]j%)}(hgen_estimator_activeh]hgen_estimator_active}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj{hKubj)}(h,(struct net_rate_estimator __rcu **rate_est)h]j)}(h*struct net_rate_estimator __rcu **rate_esth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnet_rate_estimatorh]hnet_rate_estimator}(hjȝhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjŝubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjʝmodnameN classnameNjj!)}j$]j')}jjsbc.gen_estimator_activeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh__rcu}(hjhhhNhNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrate_esth]hrate_est}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj{hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj{hKubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hKhjchhubjS)}(hhh]jX)}(h%test if estimator is currently in useh]h%test if estimator is currently in use}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj{hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjphNhNubj})}(h**Parameters** ``struct net_rate_estimator __rcu **rate_est`` rate estimator **Description** Returns true if estimator is active, and false if not.h](jX)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjhubj)}(hhh]j)}(h>``struct net_rate_estimator __rcu **rate_est`` rate estimator h](j)}(h.``struct net_rate_estimator __rcu **rate_est``h]j)}(hjh]h*struct net_rate_estimator __rcu **rate_est}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjubj)}(hhh]jX)}(hrate estimatorh]hrate estimator}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhubjX)}(h**Description**h]j)}(hjȞh]h Description}(hjʞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƞubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjhubjX)}(h6Returns true if estimator is active, and false if not.h]h6Returns true if estimator is active, and false if not.}(hjޞhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:53: ./net/core/gen_estimator.chKhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjphhhNhNubeh}(h]generic-network-statisticsah ]h"]generic network statisticsah$]h&]uh1hhhhhhhhK-ubh)}(hhh](h)}(hSUN RPC subsystemh]hSUN RPC subsystem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK9ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$xdr_encode_opaque_fixed (C function)c.xdr_encode_opaque_fixedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hR__be32 * xdr_encode_opaque_fixed (__be32 *p, const void *ptr, unsigned int nbytes)h]h)}(hP__be32 *xdr_encode_opaque_fixed(__be32 *p, const void *ptr, unsigned int nbytes)h](h)}(hhh]j%)}(h__be32h]h__be32}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]j')}jxdr_encode_opaque_fixedsbc.xdr_encode_opaque_fixedasbuh1hhj"hhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK)ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhjJhK)ubj;)}(hj>h]h*}(hjYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"hhhjJhK)ubj)}(hxdr_encode_opaque_fixedh]j%)}(hjGh]hxdr_encode_opaque_fixed}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"hhhjJhK)ubj)}(h1(__be32 *p, const void *ptr, unsigned int nbytes)h](j)}(h __be32 *ph](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jEc.xdr_encode_opaque_fixedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjGh]hp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubj)}(hconst void *ptrh](h)}(hjh]hconst}(hjٟhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj՟ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj՟ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՟ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj՟ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj՟ubj%)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj՟ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubj)}(hunsigned int nbytesh](j)}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj%)}(hnbytesh]hnbytes}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj"hhhjJhK)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjJhK)ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhK)hjhhubjS)}(hhh]jX)}(hEncode fixed length opaque datah]hEncode fixed length opaque data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK)hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjJhK)ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``__be32 *p`` pointer to current position in XDR buffer. ``const void *ptr`` pointer to data to encode (or NULL) ``unsigned int nbytes`` size of data. **Description** Copy the array of data of length nbytes at ptr to the XDR buffer at position p, then align to the next 32-bit boundary by padding with zero bytes (see RFC1832). **Note** if ptr is NULL, only the padding is performed. Returns the updated current XDR buffer positionh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK-hjubj)}(hhh](j)}(h9``__be32 *p`` pointer to current position in XDR buffer. h](j)}(h ``__be32 *p``h]j)}(hj٠h]h __be32 *p}(hj۠hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjנubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK*hjӠubj)}(hhh]jX)}(h*pointer to current position in XDR buffer.h]h*pointer to current position in XDR buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK*hjubah}(h]h ]h"]h$]h&]uh1jhjӠubeh}(h]h ]h"]h$]h&]uh1jhjhK*hjРubj)}(h8``const void *ptr`` pointer to data to encode (or NULL) h](j)}(h``const void *ptr``h]j)}(hjh]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK+hj ubj)}(hhh]jX)}(h#pointer to data to encode (or NULL)h]h#pointer to data to encode (or NULL)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hK+hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hK+hjРubj)}(h&``unsigned int nbytes`` size of data. h](j)}(h``unsigned int nbytes``h]j)}(hjKh]hunsigned int nbytes}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK,hjEubj)}(hhh]jX)}(h size of data.h]h size of data.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hK,hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hK,hjРubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK.hjubjX)}(hCopy the array of data of length nbytes at ptr to the XDR buffer at position p, then align to the next 32-bit boundary by padding with zero bytes (see RFC1832).h]hCopy the array of data of length nbytes at ptr to the XDR buffer at position p, then align to the next 32-bit boundary by padding with zero bytes (see RFC1832).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK-hjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK1hjubjX)}(h.if ptr is NULL, only the padding is performed.h]h.if ptr is NULL, only the padding is performed.}(hjáhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK1hjubjX)}(h/Returns the updated current XDR buffer positionh]h/Returns the updated current XDR buffer position}(hjҡhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK3hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_encode_opaque (C function)c.xdr_encode_opaquehNtauh1hhjhhhNhNubh)}(hhh](h)}(hL__be32 * xdr_encode_opaque (__be32 *p, const void *ptr, unsigned int nbytes)h]h)}(hJ__be32 *xdr_encode_opaque(__be32 *p, const void *ptr, unsigned int nbytes)h](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jxdr_encode_opaquesbc.xdr_encode_opaqueasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKGubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj%hKGubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhj%hKGubj)}(hxdr_encode_opaqueh]j%)}(hj"h]hxdr_encode_opaque}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj%hKGubj)}(h1(__be32 *p, const void *ptr, unsigned int nbytes)h](j)}(h __be32 *ph](h)}(hhh]j%)}(h__be32h]h__be32}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjemodnameN classnameNjj!)}j$]j c.xdr_encode_opaqueasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hjGh]hp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(hconst void *ptrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hvoidh]hvoid}(hjϢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjݢhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(hunsigned int nbytesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hnbytesh]hnbytes}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj%hKGubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj%hKGubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj%hKGhjhhubjS)}(hhh]jX)}(h"Encode variable length opaque datah]h"Encode variable length opaque data}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKGhjphhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj%hKGubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``__be32 *p`` pointer to current position in XDR buffer. ``const void *ptr`` pointer to data to encode (or NULL) ``unsigned int nbytes`` size of data. **Description** Returns the updated current XDR buffer positionh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKKhjubj)}(hhh](j)}(h9``__be32 *p`` pointer to current position in XDR buffer. h](j)}(h ``__be32 *p``h]j)}(hjh]h __be32 *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKHhjubj)}(hhh]jX)}(h*pointer to current position in XDR buffer.h]h*pointer to current position in XDR buffer.}(hjͣhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjɣhKHhjʣubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɣhKHhjubj)}(h8``const void *ptr`` pointer to data to encode (or NULL) h](j)}(h``const void *ptr``h]j)}(hjh]hconst void *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKIhjubj)}(hhh]jX)}(h#pointer to data to encode (or NULL)h]h#pointer to data to encode (or NULL)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKIhjubj)}(h&``unsigned int nbytes`` size of data. h](j)}(h``unsigned int nbytes``h]j)}(hj&h]hunsigned int nbytes}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKJhj ubj)}(hhh]jX)}(h size of data.h]h size of data.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hKJhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hKJhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKLhjubjX)}(h/Returns the updated current XDR buffer positionh]h/Returns the updated current XDR buffer position}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!xdr_terminate_string (C function)c.xdr_terminate_stringhNtauh1hhjhhhNhNubh)}(hhh](h)}(hDvoid xdr_terminate_string (const struct xdr_buf *buf, const u32 len)h]h)}(hCvoid xdr_terminate_string(const struct xdr_buf *buf, const u32 len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhK]ubj)}(hxdr_terminate_stringh]j%)}(hxdr_terminate_stringh]hxdr_terminate_string}(hjǤhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjäubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhK]ubj)}(h*(const struct xdr_buf *buf, const u32 len)h](j)}(hconst struct xdr_buf *bufh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjߤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߤubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjߤubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߤubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjɤsbc.xdr_terminate_stringasbuh1hhjߤubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߤubj;)}(hj>h]h*}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjߤubj%)}(hbufh]hbuf}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjߤubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjۤubj)}(h const u32 lenh](h)}(hjh]hconst}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j8c.xdr_terminate_stringasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjۤubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhK]ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhK]ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhK]hjhhubjS)}(hhh]jX)}(h.'\0'-terminate a string residing in an xdr_bufh]h2‘0’-terminate a string residing in an xdr_buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK]hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhK]ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct xdr_buf *buf`` XDR buffer where string resides ``const u32 len`` length of string, in bytesh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKahjubj)}(hhh](j)}(h>``const struct xdr_buf *buf`` XDR buffer where string resides h](j)}(h``const struct xdr_buf *buf``h]j)}(hj%h]hconst struct xdr_buf *buf}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK^hjubj)}(hhh]jX)}(hXDR buffer where string residesh]hXDR buffer where string resides}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hK^hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hK^hjubj)}(h,``const u32 len`` length of string, in bytesh](j)}(h``const u32 len``h]j)}(hj^h]h const u32 len}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK`hjXubj)}(hhh]jX)}(hlength of string, in bytesh]hlength of string, in bytes}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chK_hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshK`hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_buf_to_bvec (C function)c.xdr_buf_to_bvechNtauh1hhjhhhNhNubh)}(hhh](h)}(hfunsigned int xdr_buf_to_bvec (struct bio_vec *bvec, unsigned int bvec_size, const struct xdr_buf *xdr)h]h)}(heunsigned int xdr_buf_to_bvec(struct bio_vec *bvec, unsigned int bvec_size, const struct xdr_buf *xdr)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKubj)}(h h]h }(hjǦhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjƦhKubj)}(hinth]hint}(hjզhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjƦhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjƦhKubj)}(hxdr_buf_to_bvech]j%)}(hxdr_buf_to_bvech]hxdr_buf_to_bvec}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjƦhKubj)}(hI(struct bio_vec *bvec, unsigned int bvec_size, const struct xdr_buf *xdr)h](j)}(hstruct bio_vec *bvech](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hbio_vech]hbio_vec}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jjsbc.xdr_buf_to_bvecasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hbvech]hbvec}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hunsigned int bvec_sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h bvec_sizeh]h bvec_size}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hconst struct xdr_buf *xdrh](h)}(hjh]hconst}(hjԧhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjЧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjЧubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjЧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjЧubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jKc.xdr_buf_to_bvecasbuh1hhjЧubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjЧubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjЧubj%)}(hxdrh]hxdr}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjЧubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjƦhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjƦhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjƦhKhjhhubjS)}(hhh]jX)}(h2Copy components of an xdr_buf into a bio_vec arrayh]h2Copy components of an xdr_buf into a bio_vec array}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjmhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjƦhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct bio_vec *bvec`` bio_vec array to populate ``unsigned int bvec_size`` element count of **bio_vec** ``const struct xdr_buf *xdr`` xdr_buf to be copied **Description** Returns the number of entries consumed in **bvec**.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh](j)}(h3``struct bio_vec *bvec`` bio_vec array to populate h](j)}(h``struct bio_vec *bvec``h]j)}(hjh]hstruct bio_vec *bvec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh]jX)}(hbio_vec array to populateh]hbio_vec array to populate}(hjʨhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƨhKhjǨubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƨhKhjubj)}(h8``unsigned int bvec_size`` element count of **bio_vec** h](j)}(h``unsigned int bvec_size``h]j)}(hjh]hunsigned int bvec_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh]jX)}(helement count of **bio_vec**h](helement count of }(hjhhhNhNubj)}(h **bio_vec**h]hbio_vec}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h3``const struct xdr_buf *xdr`` xdr_buf to be copied h](j)}(h``const struct xdr_buf *xdr``h]j)}(hj1h]hconst struct xdr_buf *xdr}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhj+ubj)}(hhh]jX)}(hxdr_buf to be copiedh]hxdr_buf to be copied}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubjX)}(h3Returns the number of entries consumed in **bvec**.h](h*Returns the number of entries consumed in }(hjhhhNhNubj)}(h**bvec**h]hbvec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_inline_pages (C function)c.xdr_inline_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hzvoid xdr_inline_pages (struct xdr_buf *xdr, unsigned int offset, struct page **pages, unsigned int base, unsigned int len)h]h)}(hyvoid xdr_inline_pages(struct xdr_buf *xdr, unsigned int offset, struct page **pages, unsigned int base, unsigned int len)h](j)}(hvoidh]hvoid}(hjéhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKubj)}(h h]h }(hjҩhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjѩhKubj)}(hxdr_inline_pagesh]j%)}(hxdr_inline_pagesh]hxdr_inline_pages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjѩhKubj)}(hd(struct xdr_buf *xdr, unsigned int offset, struct page **pages, unsigned int base, unsigned int len)h](j)}(hstruct xdr_buf *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.xdr_inline_pagesasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct page **pagesh](h)}(hjh]hstruct}(hjêhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjЪhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjުubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j:c.xdr_inline_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpagesh]hpages}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int baseh](j)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj%)}(hbaseh]hbase}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjɫhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjѩhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjѩhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjѩhKhjhhubjS)}(hhh]jX)}(h(Prepare receive buffer for a large replyh]h(Prepare receive buffer for a large reply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjѩhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_buf *xdr`` xdr_buf into which reply will be placed ``unsigned int offset`` expected offset where data payload will start, in bytes ``struct page **pages`` vector of struct page pointers ``unsigned int base`` offset in first page where receive should start, in bytes ``unsigned int len`` expected size of the upper layer data payload, in bytesh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh](j)}(h@``struct xdr_buf *xdr`` xdr_buf into which reply will be placed h](j)}(h``struct xdr_buf *xdr``h]j)}(hj4h]hstruct xdr_buf *xdr}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhj.ubj)}(hhh]jX)}(h'xdr_buf into which reply will be placedh]h'xdr_buf into which reply will be placed}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj+ubj)}(hP``unsigned int offset`` expected offset where data payload will start, in bytes h](j)}(h``unsigned int offset``h]j)}(hjmh]hunsigned int offset}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjgubj)}(hhh]jX)}(h7expected offset where data payload will start, in bytesh]h7expected offset where data payload will start, in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(h7``struct page **pages`` vector of struct page pointers h](j)}(h``struct page **pages``h]j)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh]jX)}(hvector of struct page pointersh]hvector of struct page pointers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(hP``unsigned int base`` offset in first page where receive should start, in bytes h](j)}(h``unsigned int base``h]j)}(hj߬h]hunsigned int base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݬubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhj٬ubj)}(hhh]jX)}(h9offset in first page where receive should start, in bytesh]h9offset in first page where receive should start, in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj٬ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(hL``unsigned int len`` expected size of the upper layer data payload, in bytesh](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhjubj)}(hhh]jX)}(h7expected size of the upper layer data payload, in bytesh]h7expected size of the upper layer data payload, in bytes}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hKhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h_copy_from_pages (C function)c._copy_from_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hOvoid _copy_from_pages (char *p, struct page **pages, size_t pgbase, size_t len)h]h)}(hNvoid _copy_from_pages(char *p, struct page **pages, size_t pgbase, size_t len)h](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjhMubj)}(h_copy_from_pagesh]j%)}(h_copy_from_pagesh]h_copy_from_pages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjhMubj)}(h9(char *p, struct page **pages, size_t pgbase, size_t len)h](j)}(hchar *ph](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj˭hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjGh]hp}(hjحhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct page **pagesh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc._copy_from_pagesasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpagesh]hpages}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t pgbaseh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j*c._copy_from_pagesasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj%)}(hpgbaseh]hpgbase}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t lenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j*c._copy_from_pagesasbuh1hhjubj)}(h h]h }(hjخhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjjhhhjhMubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjghhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjghhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX$**Parameters** ``char *p`` pointer to destination ``struct page **pages`` array of pages ``size_t pgbase`` offset of source data ``size_t len`` length **Description** Copies data into an arbitrary memory location from an array of pages The copy is assumed to be non-overlapping.h](jX)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h#``char *p`` pointer to destination h](j)}(h ``char *p``h]j)}(hjBh]hchar *p}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj<ubj)}(hhh]jX)}(hpointer to destinationh]hpointer to destination}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhMhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhj9ubj)}(h'``struct page **pages`` array of pages h](j)}(h``struct page **pages``h]j)}(hj{h]hstruct page **pages}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjuubj)}(hhh]jX)}(harray of pagesh]harray of pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubj)}(h(``size_t pgbase`` offset of source data h](j)}(h``size_t pgbase``h]j)}(hjh]h size_t pgbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hoffset of source datah]hoffset of source data}(hjͯhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjɯhMhjʯubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɯhMhj9ubj)}(h``size_t len`` length h](j)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hoCopies data into an arbitrary memory location from an array of pages The copy is assumed to be non-overlapping.h]hoCopies data into an arbitrary memory location from an array of pages The copy is assumed to be non-overlapping.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_stream_pos (C function)c.xdr_stream_poshNtauh1hhjhhhNhNubh)}(hhh](h)}(h:unsigned int xdr_stream_pos (const struct xdr_stream *xdr)h]h)}(h9unsigned int xdr_stream_pos(const struct xdr_stream *xdr)h](j)}(hunsignedh]hunsigned}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhhj{hMyubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj{hMyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjihhhj{hMyubj)}(hxdr_stream_posh]j%)}(hxdr_stream_posh]hxdr_stream_pos}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjihhhj{hMyubj)}(h(const struct xdr_stream *xdr)h]j)}(hconst struct xdr_stream *xdrh](h)}(hjh]hconst}(hjưhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj°ubj)}(h h]h }(hjӰhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj°ubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj°ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj°ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_stream_posasbuh1hhj°ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj°ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj°ubj%)}(hxdrh]hxdr}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj°ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjihhhj{hMyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjehhhj{hMyubah}(h]j`ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hMyhjbhhubjS)}(hhh]jX)}(h:Return the current offset from the start of the xdr_streamh]h:Return the current offset from the start of the xdr_stream}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyhjahhubah}(h]h ]h"]h$]h&]uh1jRhjbhhhj{hMyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|jxj|jyjzj{uh1hhhhjhNhNubj})}(hO**Parameters** ``const struct xdr_stream *xdr`` pointer to struct xdr_streamh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM}hjubj)}(hhh]j)}(h=``const struct xdr_stream *xdr`` pointer to struct xdr_streamh](j)}(h ``const struct xdr_stream *xdr``h]j)}(hjh]hconst struct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to struct xdr_streamh]hpointer to struct xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_page_pos (C function)c.xdr_page_poshNtauh1hhjhhhNhNubh)}(hhh](h)}(h8unsigned int xdr_page_pos (const struct xdr_stream *xdr)h]h)}(h7unsigned int xdr_page_pos(const struct xdr_stream *xdr)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(h xdr_page_posh]j%)}(h xdr_page_posh]h xdr_page_pos}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h(const struct xdr_stream *xdr)h]j)}(hconst struct xdr_stream *xdrh](h)}(hjh]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj>sbc.xdr_page_posasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hxdrh]hxdr}(hj̲hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h9Return the current offset from the start of the xdr pagesh]h9Return the current offset from the start of the xdr pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hO**Parameters** ``const struct xdr_stream *xdr`` pointer to struct xdr_streamh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(h=``const struct xdr_stream *xdr`` pointer to struct xdr_streamh](j)}(h ``const struct xdr_stream *xdr``h]j)}(hj7h]hconst struct xdr_stream *xdr}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj1ubj)}(hhh]jX)}(hpointer to struct xdr_streamh]hpointer to struct xdr_stream}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_init_encode (C function)c.xdr_init_encodehNtauh1hhjhhhNhNubh)}(hhh](h)}(hdvoid xdr_init_encode (struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h]h)}(hcvoid xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hxdr_init_encodeh]j%)}(hxdr_init_encodeh]hxdr_init_encode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hO(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjγhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjʳubj)}(h h]h }(hj۳hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjʳubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_init_encodeasbuh1hhjʳubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjʳubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjʳubj%)}(hxdrh]hxdr}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjʳubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƳubj)}(hstruct xdr_buf *bufh](h)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]jc.xdr_init_encodeasbuh1hhj<ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƳubj)}(h __be32 *ph](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_init_encodeasbuh1hhjubj)}(h h]h }(hjѴhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjߴhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjGh]hp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƳubj)}(hstruct rpc_rqst *rqsth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]jc.xdr_init_encodeasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrqsth]hrqst}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƳubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h0Initialize a struct xdr_stream for sending data.h]h0Initialize a struct xdr_stream for sending data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXx**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``struct xdr_buf *buf`` pointer to XDR buffer in which to encode data ``__be32 *p`` current pointer inside XDR buffer ``struct rpc_rqst *rqst`` pointer to controlling rpc_rqst, for debugging **Note** at the moment the RPC client only passes the length of our scratch buffer in the xdr_buf's header kvec. Previously this meant we needed to call xdr_adjust_iovec() after encoding the data. With the new scheme, the xdr_stream manages the details of the buffer length, and takes care of adjusting the kvec length for us.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjƵh]hstruct xdr_stream *xdr}(hjȵhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĵubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjߵhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj۵hMhjܵubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۵hMhjubj)}(hF``struct xdr_buf *buf`` pointer to XDR buffer in which to encode data h](j)}(h``struct xdr_buf *buf``h]j)}(hjh]hstruct xdr_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h-pointer to XDR buffer in which to encode datah]h-pointer to XDR buffer in which to encode data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``__be32 *p`` current pointer inside XDR buffer h](j)}(h ``__be32 *p``h]j)}(hj8h]h __be32 *p}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj2ubj)}(hhh]jX)}(h!current pointer inside XDR bufferh]h!current pointer inside XDR buffer}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubj)}(hI``struct rpc_rqst *rqst`` pointer to controlling rpc_rqst, for debugging h](j)}(h``struct rpc_rqst *rqst``h]j)}(hjqh]hstruct rpc_rqst *rqst}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjkubj)}(hhh]jX)}(h.pointer to controlling rpc_rqst, for debuggingh]h.pointer to controlling rpc_rqst, for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(hX=at the moment the RPC client only passes the length of our scratch buffer in the xdr_buf's header kvec. Previously this meant we needed to call xdr_adjust_iovec() after encoding the data. With the new scheme, the xdr_stream manages the details of the buffer length, and takes care of adjusting the kvec length for us.h](j)}(h:at the moment the RPC client only passes the length of ourh]h:at the moment the RPC client only passes the length of our}(hjɶhhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjŶubj)}(hhh]jX)}(hXscratch buffer in the xdr_buf's header kvec. Previously this meant we needed to call xdr_adjust_iovec() after encoding the data. With the new scheme, the xdr_stream manages the details of the buffer length, and takes care of adjusting the kvec length for us.h]hXscratch buffer in the xdr_buf’s header kvec. Previously this meant we needed to call xdr_adjust_iovec() after encoding the data. With the new scheme, the xdr_stream manages the details of the buffer length, and takes care of adjusting the kvec length for us.}(hj۶hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjضubah}(h]h ]h"]h$]h&]uh1jhjŶubeh}(h]h ]h"]h$]h&]uh1jhj׶hMhj¶ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xdr_init_encode_pages (C function)c.xdr_init_encode_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hHvoid xdr_init_encode_pages (struct xdr_stream *xdr, struct xdr_buf *buf)h]h)}(hGvoid xdr_init_encode_pages(struct xdr_stream *xdr, struct xdr_buf *buf)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj*hMubj)}(hxdr_init_encode_pagesh]j%)}(hxdr_init_encode_pagesh]hxdr_init_encode_pages}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj*hMubj)}(h-(struct xdr_stream *xdr, struct xdr_buf *buf)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjymodnameN classnameNjj!)}j$]j')}jj?sbc.xdr_init_encode_pagesasbuh1hhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjQubj)}(hstruct xdr_buf *bufh](h)}(hjh]hstruct}(hj˷hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjǷubj)}(h h]h }(hjطhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǷubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_init_encode_pagesasbuh1hhjǷubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǷubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjǷubj%)}(hbufh]hbuf}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjǷubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjQubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj*hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj*hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hMhjhhubjS)}(hhh]jX)}(h0Initialize an xdr_stream for encoding into pagesh]h0Initialize an xdr_stream for encoding into pages}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj*hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``struct xdr_buf *buf`` pointer to XDR buffer into which to encode datah](jX)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``struct xdr_buf *buf`` pointer to XDR buffer into which to encode datah](j)}(h``struct xdr_buf *buf``h]j)}(hjƸh]hstruct xdr_buf *buf}(hjȸhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĸubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h/pointer to XDR buffer into which to encode datah]h/pointer to XDR buffer into which to encode data}(hj߸hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjܸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj۸hMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __xdr_commit_encode (C function)c.__xdr_commit_encodehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void __xdr_commit_encode (struct xdr_stream *xdr)h]h)}(h0void __xdr_commit_encode(struct xdr_stream *xdr)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj.hMubj)}(h__xdr_commit_encodeh]j%)}(h__xdr_commit_encodeh]h__xdr_commit_encode}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj.hMubj)}(h(struct xdr_stream *xdr)h]j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j')}jjCsbc.__xdr_commit_encodeasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj.hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj.hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.hMhjhhubjS)}(hhh]jX)}(h$Ensure all data is written to bufferh]h$Ensure all data is written to buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjݹhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj.hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream **Description** We handle encoding across page boundaries by giving the caller a temporary location to write to, then later copying the data into place; xdr_commit_encode does that copying. Normally the caller doesn't need to call this directly, as the following xdr_reserve_space will do it. But an explicit call may be required at the end of encoding, or any other time when the xdr_buf data might be read.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hj!h]hstruct xdr_stream *xdr}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hWe handle encoding across page boundaries by giving the caller a temporary location to write to, then later copying the data into place; xdr_commit_encode does that copying.h]hWe handle encoding across page boundaries by giving the caller a temporary location to write to, then later copying the data into place; xdr_commit_encode does that copying.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hNormally the caller doesn't need to call this directly, as the following xdr_reserve_space will do it. But an explicit call may be required at the end of encoding, or any other time when the xdr_buf data might be read.h]hNormally the caller doesn’t need to call this directly, as the following xdr_reserve_space will do it. But an explicit call may be required at the end of encoding, or any other time when the xdr_buf data might be read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_reserve_space (C function)c.xdr_reserve_spacehNtauh1hhjhhhNhNubh)}(hhh](h)}(hB__be32 * xdr_reserve_space (struct xdr_stream *xdr, size_t nbytes)h]h)}(h@__be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes)h](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jxdr_reserve_spacesbc.xdr_reserve_spaceasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM'ubj)}(h h]h }(hjպhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjԺhM'ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjԺhM'ubj)}(hxdr_reserve_spaceh]j%)}(hjѺh]hxdr_reserve_space}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjԺhM'ubj)}(h'(struct xdr_stream *xdr, size_t nbytes)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]jϺc.xdr_reserve_spaceasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hxdrh]hxdr}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t nbytesh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jϺc.xdr_reserve_spaceasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj%)}(hnbytesh]hnbytes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjԺhM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjԺhM'ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjԺhM'hjhhubjS)}(hhh]jX)}(h Reserve buffer space for sendingh]h Reserve buffer space for sending}(hjػhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM'hjջhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjԺhM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXS**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``size_t nbytes`` number of bytes to reserve **Description** Checks that we have enough buffer space to encode 'nbytes' more bytes of data. If so, update the total xdr_buf length, and adjust the length of the current kvec. The returned pointer is valid only until the next call to xdr_reserve_space() or xdr_commit_encode() on **xdr**. The current implementation of this API guarantees that space reserved for a four-byte data item remains valid until **xdr** is destroyed, but that might not always be true in the future.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM+hjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM(hjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hM(hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hM(hjubj)}(h-``size_t nbytes`` number of bytes to reserve h](j)}(h``size_t nbytes``h]j)}(hjRh]h size_t nbytes}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM)hjLubj)}(hhh]jX)}(hnumber of bytes to reserveh]hnumber of bytes to reserve}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghM)hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM)hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM+hjubjX)}(hChecks that we have enough buffer space to encode 'nbytes' more bytes of data. If so, update the total xdr_buf length, and adjust the length of the current kvec.h]hChecks that we have enough buffer space to encode ‘nbytes’ more bytes of data. If so, update the total xdr_buf length, and adjust the length of the current kvec.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM*hjubjX)}(hX+The returned pointer is valid only until the next call to xdr_reserve_space() or xdr_commit_encode() on **xdr**. The current implementation of this API guarantees that space reserved for a four-byte data item remains valid until **xdr** is destroyed, but that might not always be true in the future.h](hhThe returned pointer is valid only until the next call to xdr_reserve_space() or xdr_commit_encode() on }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhv. The current implementation of this API guarantees that space reserved for a four-byte data item remains valid until }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hj̼hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh? is destroyed, but that might not always be true in the future.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xdr_reserve_space_vec (C function)c.xdr_reserve_space_vechNtauh1hhjhhhNhNubh)}(hhh](h)}(hAint xdr_reserve_space_vec (struct xdr_stream *xdr, size_t nbytes)h]h)}(h@int xdr_reserve_space_vec(struct xdr_stream *xdr, size_t nbytes)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMLubj)}(hxdr_reserve_space_vech]j%)}(hxdr_reserve_space_vech]hxdr_reserve_space_vec}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMLubj)}(h'(struct xdr_stream *xdr, size_t nbytes)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbmodnameN classnameNjj!)}j$]j')}jj(sbc.xdr_reserve_space_vecasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubj)}(h size_t nbytesh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j|c.xdr_reserve_space_vecasbuh1hhjubj)}(h h]h }(hjսhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hnbytesh]hnbytes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMLubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMLubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMLhjhhubjS)}(hhh]jX)}(h3Reserves a large amount of buffer space for sendingh]h3Reserves a large amount of buffer space for sending}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMLhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMLubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``size_t nbytes`` number of bytes to reserve **Description** The size argument passed to xdr_reserve_space() is determined based on the number of bytes remaining in the current page to avoid invalidating iov_base pointers when xdr_commit_encode() is called. Return values: ``0``: success ``-EMSGSIZE``: not enough space is available in **xdr**h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMPhj)ubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjNh]hstruct xdr_stream *xdr}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMMhjHubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMMhjEubj)}(h-``size_t nbytes`` number of bytes to reserve h](j)}(h``size_t nbytes``h]j)}(hjh]h size_t nbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMNhjubj)}(hhh]jX)}(hnumber of bytes to reserveh]hnumber of bytes to reserve}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hj¾h]h Description}(hjľhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMPhj)ubjX)}(hThe size argument passed to xdr_reserve_space() is determined based on the number of bytes remaining in the current page to avoid invalidating iov_base pointers when xdr_commit_encode() is called.h]hThe size argument passed to xdr_reserve_space() is determined based on the number of bytes remaining in the current page to avoid invalidating iov_base pointers when xdr_commit_encode() is called.}(hjؾhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMOhj)ubj)}(hhh]j)}(hUReturn values: ``0``: success ``-EMSGSIZE``: not enough space is available in **xdr**h](j)}(hReturn values:h]hReturn values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMThjubj)}(hhh]jX)}(hF``0``: success ``-EMSGSIZE``: not enough space is available in **xdr**h](j)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh : success }(hjhhhNhNubj)}(h ``-EMSGSIZE``h]h -EMSGSIZE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh#: not enough space is available in }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h xdr_truncate_encode (C function)c.xdr_truncate_encodehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void xdr_truncate_encode (struct xdr_stream *xdr, size_t len)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t lenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]jc.xdr_truncate_encodeasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj|hMwubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj|hMwubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMwhjchhubjS)}(hhh]jX)}(htruncate an encode bufferh]htruncate an encode buffer}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMwhjshhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj|hMwubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``size_t len`` new length of buffer **Description** Truncates the xdr stream, so that xdr->buf->len == len, and xdr->p points at offset len from the start of the buffer, and head, tail, and page lengths are adjusted to correspond. If this means moving xdr->p to a different buffer, we assume that the end pointer should be set to the end of the current page, except in the case of the head buffer when we assume the head buffer's current length represents the end of the available buffer. This is *not* safe to use on a buffer that already has inlined page cache pages (as in a zero-copy server read reply), except for the simple case of truncating from one position in the tail to another.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM{hjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMxhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h$``size_t len`` new length of buffer h](j)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyhjubj)}(hhh]jX)}(hnew length of bufferh]hnew length of buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM{hjubjX)}(hTruncates the xdr stream, so that xdr->buf->len == len, and xdr->p points at offset len from the start of the buffer, and head, tail, and page lengths are adjusted to correspond.h]hTruncates the xdr stream, so that xdr->buf->len == len, and xdr->p points at offset len from the start of the buffer, and head, tail, and page lengths are adjusted to correspond.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMzhjubjX)}(hXIf this means moving xdr->p to a different buffer, we assume that the end pointer should be set to the end of the current page, except in the case of the head buffer when we assume the head buffer's current length represents the end of the available buffer.h]hXIf this means moving xdr->p to a different buffer, we assume that the end pointer should be set to the end of the current page, except in the case of the head buffer when we assume the head buffer’s current length represents the end of the available buffer.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM~hjubjX)}(hThis is *not* safe to use on a buffer that already has inlined page cache pages (as in a zero-copy server read reply), except for the simple case of truncating from one position in the tail to another.h](hThis is }(hj_hhhNhNubjz)}(h*not*h]hnot}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj_ubh safe to use on a buffer that already has inlined page cache pages (as in a zero-copy server read reply), except for the simple case of truncating from one position in the tail to another.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h xdr_truncate_decode (C function)c.xdr_truncate_decodehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void xdr_truncate_decode (struct xdr_stream *xdr, size_t len)h]h)}(hh]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t lenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]jc.xdr_truncate_decodeasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj%)}(hlenh]hlen}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hTruncate a decoding streamh]hTruncate a decoding stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hu**Parameters** ``struct xdr_stream *xdr`` pointer to struct xdr_stream ``size_t len`` Number of bytes to removeh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to struct xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to struct xdr_streamh]hpointer to struct xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``size_t len`` Number of bytes to removeh](j)}(h``size_t len``h]j)}(hj"h]h size_t len}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hNumber of bytes to removeh]hNumber of bytes to remove}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h xdr_restrict_buflen (C function)c.xdr_restrict_buflenhNtauh1hhjhhhNhNubh)}(hhh](h)}(h?int xdr_restrict_buflen (struct xdr_stream *xdr, int newbuflen)h]h)}(h>int xdr_restrict_buflen(struct xdr_stream *xdr, int newbuflen)h](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxhhhjhMubj)}(hxdr_restrict_buflenh]j%)}(hxdr_restrict_buflenh]hxdr_restrict_buflen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjxhhhjhMubj)}(h'(struct xdr_stream *xdr, int newbuflen)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_restrict_buflenasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int newbuflenh](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj%)}(h newbuflenh]h newbuflen}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjxhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjthhhjhMubah}(h]joah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjqhhubjS)}(hhh]jX)}(hdecrease available buffer spaceh]hdecrease available buffer space}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jRhjqhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``int newbuflen`` new maximum number of bytes available **Description** Adjust our idea of how much space is available in the buffer. If we've already used too much space in the buffer, returns -1. If the available space is already smaller than newbuflen, returns 0 and does nothing. Otherwise, adjusts xdr->buf->buflen to newbuflen and ensures xdr->end is set at most offset newbuflen from the start of the buffer.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``int newbuflen`` new maximum number of bytes available h](j)}(h``int newbuflen``h]j)}(hjh]h int newbuflen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h%new maximum number of bytes availableh]h%new maximum number of bytes available}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj&h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hXXAdjust our idea of how much space is available in the buffer. If we've already used too much space in the buffer, returns -1. If the available space is already smaller than newbuflen, returns 0 and does nothing. Otherwise, adjusts xdr->buf->buflen to newbuflen and ensures xdr->end is set at most offset newbuflen from the start of the buffer.h]hXZAdjust our idea of how much space is available in the buffer. If we’ve already used too much space in the buffer, returns -1. If the available space is already smaller than newbuflen, returns 0 and does nothing. Otherwise, adjusts xdr->buf->buflen to newbuflen and ensures xdr->end is set at most offset newbuflen from the start of the buffer.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_write_pages (C function)c.xdr_write_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hgvoid xdr_write_pages (struct xdr_stream *xdr, struct page **pages, unsigned int base, unsigned int len)h]h)}(hfvoid xdr_write_pages(struct xdr_stream *xdr, struct page **pages, unsigned int base, unsigned int len)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjghhhjyhMubj)}(hxdr_write_pagesh]j%)}(hxdr_write_pagesh]hxdr_write_pages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjghhhjyhMubj)}(hR(struct xdr_stream *xdr, struct page **pages, unsigned int base, unsigned int len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_write_pagesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct page **pagesh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]jc.xdr_write_pagesasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpagesh]hpages}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int baseh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjghhhjyhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjyhMubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMhj`hhubjS)}(hhh]jX)}(h5Insert a list of pages into an XDR buffer for sendingh]h5Insert a list of pages into an XDR buffer for sending}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jRhj`hhhjyhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``struct page **pages`` array of pages to insert ``unsigned int base`` starting offset of first data byte in **pages** ``unsigned int len`` number of data bytes in **pages** to insert **Description** After the **pages** are added, the tail iovec is instantiated pointing to end of the head buffer, and the stream is set up to encode subsequent items into the tail.h](jX)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjfubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct page **pages`` array of pages to insert h](j)}(h``struct page **pages``h]j)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(harray of pages to inserth]harray of pages to insert}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``unsigned int base`` starting offset of first data byte in **pages** h](j)}(h``unsigned int base``h]j)}(hjh]hunsigned int base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h/starting offset of first data byte in **pages**h](h&starting offset of first data byte in }(hjhhhNhNubj)}(h **pages**h]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``unsigned int len`` number of data bytes in **pages** to insert h](j)}(h``unsigned int len``h]j)}(hjDh]hunsigned int len}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj>ubj)}(hhh]jX)}(h+number of data bytes in **pages** to inserth](hnumber of data bytes in }(hj]hhhNhNubj)}(h **pages**h]hpages}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh to insert}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjubeh}(h]h ]h"]h$]h&]uh1jhjfubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjfubjX)}(hAfter the **pages** are added, the tail iovec is instantiated pointing to end of the head buffer, and the stream is set up to encode subsequent items into the tail.h](h After the }(hjhhhNhNubj)}(h **pages**h]hpages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh are added, the tail iovec is instantiated pointing to end of the head buffer, and the stream is set up to encode subsequent items into the tail.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_init_decode (C function)c.xdr_init_decodehNtauh1hhjhhhNhNubh)}(hhh](h)}(hdvoid xdr_init_decode (struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h]h)}(hcvoid xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMuubj)}(hxdr_init_decodeh]j%)}(hxdr_init_decodeh]hxdr_init_decode}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMuubj)}(hO(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p, struct rpc_rqst *rqst)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]j')}jj sbc.xdr_init_decodeasbuh1hhj!ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(hxdrh]hxdr}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct xdr_buf *bufh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j_c.xdr_init_decodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h __be32 *ph](h)}(hhh]j%)}(h__be32h]h__be32}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j_c.xdr_init_decodeasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hjGh]hp}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct rpc_rqst *rqsth](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]j_c.xdr_init_decodeasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWubj%)}(hrqsth]hrqst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMuubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMuhjhhubjS)}(hhh]jX)}(h+Initialize an xdr_stream for decoding data.h]h+Initialize an xdr_stream for decoding data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMuhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``struct xdr_buf *buf`` pointer to XDR buffer from which to decode data ``__be32 *p`` current pointer inside XDR buffer ``struct rpc_rqst *rqst`` pointer to controlling rpc_rqst, for debuggingh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyhjubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMvhjubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hMvhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMvhjubj)}(hH``struct xdr_buf *buf`` pointer to XDR buffer from which to decode data h](j)}(h``struct xdr_buf *buf``h]j)}(hjVh]hstruct xdr_buf *buf}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMwhjPubj)}(hhh]jX)}(h/pointer to XDR buffer from which to decode datah]h/pointer to XDR buffer from which to decode data}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMwhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMwhjubj)}(h0``__be32 *p`` current pointer inside XDR buffer h](j)}(h ``__be32 *p``h]j)}(hjh]h __be32 *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMxhjubj)}(hhh]jX)}(h!current pointer inside XDR bufferh]h!current pointer inside XDR buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(hH``struct rpc_rqst *rqst`` pointer to controlling rpc_rqst, for debuggingh](j)}(h``struct rpc_rqst *rqst``h]j)}(hjh]hstruct rpc_rqst *rqst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMzhjubj)}(hhh]jX)}(h.pointer to controlling rpc_rqst, for debuggingh]h.pointer to controlling rpc_rqst, for debugging}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xdr_init_decode_pages (C function)c.xdr_init_decode_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hovoid xdr_init_decode_pages (struct xdr_stream *xdr, struct xdr_buf *buf, struct page **pages, unsigned int len)h]h)}(hnvoid xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf, struct page **pages, unsigned int len)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj0hMubj)}(hxdr_init_decode_pagesh]j%)}(hxdr_init_decode_pagesh]hxdr_init_decode_pages}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj0hMubj)}(hT(struct xdr_stream *xdr, struct xdr_buf *buf, struct page **pages, unsigned int len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjEsbc.xdr_init_decode_pagesasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(hstruct xdr_buf *bufh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_init_decode_pagesasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbufh]hbuf}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(hstruct page **pagesh](h)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(hpageh]hpage}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]jc.xdr_init_decode_pagesasbuh1hhj=ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj0hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj0hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMhjhhubjS)}(hhh]jX)}(h0Initialize an xdr_stream for decoding into pagesh]h0Initialize an xdr_stream for decoding into pages}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj0hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``struct xdr_buf *buf`` pointer to XDR buffer from which to decode data ``struct page **pages`` list of pages to decode into ``unsigned int len`` length in bytes of buffer in pagesh](jX)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj<ubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjah]hstruct xdr_stream *xdr}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj[ubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubj)}(hH``struct xdr_buf *buf`` pointer to XDR buffer from which to decode data h](j)}(h``struct xdr_buf *buf``h]j)}(hjh]hstruct xdr_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h/pointer to XDR buffer from which to decode datah]h/pointer to XDR buffer from which to decode data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h5``struct page **pages`` list of pages to decode into h](j)}(h``struct page **pages``h]j)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hlist of pages to decode intoh]hlist of pages to decode into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h7``unsigned int len`` length in bytes of buffer in pagesh](j)}(h``unsigned int len``h]j)}(hj h]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h"length in bytes of buffer in pagesh]h"length in bytes of buffer in pages}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_finish_decode (C function)c.xdr_finish_decodehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void xdr_finish_decode (struct xdr_stream *xdr)h]h)}(h.void xdr_finish_decode(struct xdr_stream *xdr)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjthMubj)}(hxdr_finish_decodeh]j%)}(hxdr_finish_decodeh]hxdr_finish_decode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjbhhhjthMubj)}(h(struct xdr_stream *xdr)h]j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_finish_decodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjbhhhjthMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhjthMubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthMhj[hhubjS)}(hhh]jX)}(h,Clean up the xdr_stream after decoding data.h]h,Clean up the xdr_stream after decoding data.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhjthMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjhNhNubj})}(hI**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream structh](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjBubj)}(hhh]j)}(h7``struct xdr_stream *xdr`` pointer to xdr_stream structh](j)}(h``struct xdr_stream *xdr``h]j)}(hjgh]hstruct xdr_stream *xdr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjaubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_inline_decode (C function)c.xdr_inline_decodehNtauh1hhjhhhNhNubh)}(hhh](h)}(hB__be32 * xdr_inline_decode (struct xdr_stream *xdr, size_t nbytes)h]h)}(h@__be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes)h](h)}(hhh]j%)}(h__be32h]h__be32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jxdr_inline_decodesbc.xdr_inline_decodeasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hxdr_inline_decodeh]j%)}(hjh]hxdr_inline_decode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h'(struct xdr_stream *xdr, size_t nbytes)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj@modnameN classnameNjj!)}j$]jc.xdr_inline_decodeasbuh1hhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t nbytesh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_inline_decodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hnbytesh]hnbytes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hRetrieve XDR data to decodeh]hRetrieve XDR data to decode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX\**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``size_t nbytes`` number of bytes of data to decode **Description** Check if the input buffer is long enough to enable us to decode 'nbytes' more bytes of data starting at the current position. If so return the current pointer, then update the current pointer position.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hj*h]hstruct xdr_stream *xdr}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj$ubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(h4``size_t nbytes`` number of bytes of data to decode h](j)}(h``size_t nbytes``h]j)}(hjch]h size_t nbytes}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj]ubj)}(hhh]jX)}(h!number of bytes of data to decodeh]h!number of bytes of data to decode}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hCheck if the input buffer is long enough to enable us to decode 'nbytes' more bytes of data starting at the current position. If so return the current pointer, then update the current pointer position.h]hCheck if the input buffer is long enough to enable us to decode ‘nbytes’ more bytes of data starting at the current position. If so return the current pointer, then update the current pointer position.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_read_pages (C function)c.xdr_read_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hFunsigned int xdr_read_pages (struct xdr_stream *xdr, unsigned int len)h]h)}(hEunsigned int xdr_read_pages(struct xdr_stream *xdr, unsigned int len)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hxdr_read_pagesh]j%)}(hxdr_read_pagesh]hxdr_read_pages}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h*(struct xdr_stream *xdr, unsigned int len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj"sbc.xdr_read_pagesasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h5align page-based XDR data to current pointer positionh]h5align page-based XDR data to current pointer position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(jxj(jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``unsigned int len`` number of bytes of page data **Description** Moves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + **len** bytes is moved into the XDR tail[]. The xdr_stream current position is then advanced past that data to align to the next XDR object in the tail. Returns the number of XDR encoded bytes now contained in the pagesh](jX)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj,ubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjQh]hstruct xdr_stream *xdr}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjKubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjHubj)}(h2``unsigned int len`` number of bytes of page data h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hnumber of bytes of page datah]hnumber of bytes of page data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj,ubjX)}(hX#Moves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + **len** bytes is moved into the XDR tail[]. The xdr_stream current position is then advanced past that data to align to the next XDR object in the tail.h](hMoves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + }(hjhhhNhNubj)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bytes is moved into the XDR tail[]. The xdr_stream current position is then advanced past that data to align to the next XDR object in the tail.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj,ubjX)}(hBReturns the number of XDR encoded bytes now contained in the pagesh]hBReturns the number of XDR encoded bytes now contained in the pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_set_pagelen (C function)c.xdr_set_pagelenhNtauh1hhjhhhNhNubh)}(hhh](h)}(h?void xdr_set_pagelen (struct xdr_stream *xdr, unsigned int len)h]h)}(h>void xdr_set_pagelen(struct xdr_stream *xdr, unsigned int len)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM2ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj9hM2ubj)}(hxdr_set_pagelenh]j%)}(hxdr_set_pagelenh]hxdr_set_pagelen}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj9hM2ubj)}(h*(struct xdr_stream *xdr, unsigned int len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjNsbc.xdr_set_pagelenasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj9hM2ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj#hhhj9hM2ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9hM2hj hhubjS)}(hhh]jX)}(h Sets the length of the XDR pagesh]h Sets the length of the XDR pages}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM2hj9hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj9hM2ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjTjxjTjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``unsigned int len`` new length of the XDR page data **Description** Either grows or shrinks the length of the xdr pages by setting pagelen to **len** bytes. When shrinking, any extra data is moved into buf->tail, whereas when growing any data beyond the current pointer is moved into the tail. Returns True if the operation was successful, and False otherwise.h](jX)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM6hjXubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hj}h]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM3hjwubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM3hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhM3hjtubj)}(h5``unsigned int len`` new length of the XDR page data h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM4hjubj)}(hhh]jX)}(hnew length of the XDR page datah]hnew length of the XDR page data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM4hjtubeh}(h]h ]h"]h$]h&]uh1jhjXubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM6hjXubjX)}(hEither grows or shrinks the length of the xdr pages by setting pagelen to **len** bytes. When shrinking, any extra data is moved into buf->tail, whereas when growing any data beyond the current pointer is moved into the tail.h](hJEither grows or shrinks the length of the xdr pages by setting pagelen to }(hjhhhNhNubj)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bytes. When shrinking, any extra data is moved into buf->tail, whereas when growing any data beyond the current pointer is moved into the tail.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM5hjXubjX)}(hBReturns True if the operation was successful, and False otherwise.h]hBReturns True if the operation was successful, and False otherwise.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM9hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_enter_page (C function)c.xdr_enter_pagehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>void xdr_enter_page (struct xdr_stream *xdr, unsigned int len)h]h)}(h=void xdr_enter_page(struct xdr_stream *xdr, unsigned int len)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMPubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjShhhjehMPubj)}(hxdr_enter_pageh]j%)}(hxdr_enter_pageh]hxdr_enter_page}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjShhhjehMPubj)}(h*(struct xdr_stream *xdr, unsigned int len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjzsbc.xdr_enter_pageasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjShhhjehMPubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjehMPubah}(h]jJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehMPhjLhhubjS)}(hhh]jX)}(hdecode data from the XDR pageh]hdecode data from the XDR page}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMPhjehhubah}(h]h ]h"]h$]h&]uh1jRhjLhhhjehMPubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream struct ``unsigned int len`` number of bytes of page data **Description** Moves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + "len" bytes is moved into the XDR tail[]. The current pointer is then repositioned at the beginning of the first XDR page.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMThjubj)}(hhh](j)}(h8``struct xdr_stream *xdr`` pointer to xdr_stream struct h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMQhjubj)}(hhh]jX)}(hpointer to xdr_stream structh]hpointer to xdr_stream struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h2``unsigned int len`` number of bytes of page data h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMRhjubj)}(hhh]jX)}(hnumber of bytes of page datah]hnumber of bytes of page data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMThjubjX)}(hXMoves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + "len" bytes is moved into the XDR tail[]. The current pointer is then repositioned at the beginning of the first XDR page.h]hX Moves data beyond the current pointer position from the XDR head[] buffer into the page list. Any data that lies beyond current position + “len” bytes is moved into the XDR tail[]. The current pointer is then repositioned at the beginning of the first XDR page.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMShjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_buf_subsegment (C function)c.xdr_buf_subsegmenthNtauh1hhjhhhNhNubh)}(hhh](h)}(hoint xdr_buf_subsegment (const struct xdr_buf *buf, struct xdr_buf *subbuf, unsigned int base, unsigned int len)h]h)}(hnint xdr_buf_subsegment(const struct xdr_buf *buf, struct xdr_buf *subbuf, unsigned int base, unsigned int len)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhjphMqubj)}(hxdr_buf_subsegmenth]j%)}(hxdr_buf_subsegmenth]hxdr_buf_subsegment}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhjphMqubj)}(hX(const struct xdr_buf *buf, struct xdr_buf *subbuf, unsigned int base, unsigned int len)h](j)}(hconst struct xdr_buf *bufh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_buf_subsegmentasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct xdr_buf *subbufh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]jc.xdr_buf_subsegmentasbuh1hhj(ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hsubbufh]hsubbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int baseh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbaseh]hbase}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhjphMqubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhjphMqubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjphMqhjWhhubjS)}(hhh]jX)}(hset subbuf to a portion of bufh]hset subbuf to a portion of buf}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMqhjLhhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjphMqubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjgjxjgjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const struct xdr_buf *buf`` an xdr buffer ``struct xdr_buf *subbuf`` the result buffer ``unsigned int base`` beginning of range in bytes ``unsigned int len`` length of range in bytes **Description** sets **subbuf** to an xdr buffer representing the portion of **buf** of length **len** starting at offset **base**. **buf** and **subbuf** may be pointers to the same struct xdr_buf. Returns -1 if base or length are out of bounds.h](jX)}(h**Parameters**h]j)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMuhjkubj)}(hhh](j)}(h,``const struct xdr_buf *buf`` an xdr buffer h](j)}(h``const struct xdr_buf *buf``h]j)}(hjh]hconst struct xdr_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMrhjubj)}(hhh]jX)}(h an xdr bufferh]h an xdr buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubj)}(h-``struct xdr_buf *subbuf`` the result buffer h](j)}(h``struct xdr_buf *subbuf``h]j)}(hjh]hstruct xdr_buf *subbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMshjubj)}(hhh]jX)}(hthe result bufferh]hthe result buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h2``unsigned int base`` beginning of range in bytes h](j)}(h``unsigned int base``h]j)}(hjh]hunsigned int base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMthjubj)}(hhh]jX)}(hbeginning of range in bytesh]hbeginning of range in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h.``unsigned int len`` length of range in bytes h](j)}(h``unsigned int len``h]j)}(hj;h]hunsigned int len}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMuhj5ubj)}(hhh]jX)}(hlength of range in bytesh]hlength of range in bytes}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMuhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMuhjubeh}(h]h ]h"]h$]h&]uh1jhjkubjX)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMwhjkubjX)}(hssets **subbuf** to an xdr buffer representing the portion of **buf** of length **len** starting at offset **base**.h](hsets }(hjhhhNhNubj)}(h **subbuf**h]hsubbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. to an xdr buffer representing the portion of }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh of length }(hjhhhNhNubj)}(h**len**h]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh starting at offset }(hjhhhNhNubj)}(h**base**h]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMvhjkubjX)}(hB**buf** and **subbuf** may be pointers to the same struct xdr_buf.h](j)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **subbuf**h]hsubbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, may be pointers to the same struct xdr_buf.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMyhjkubjX)}(h/Returns -1 if base or length are out of bounds.h]h/Returns -1 if base or length are out of bounds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chM{hjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xdr_stream_subsegment (C function)c.xdr_stream_subsegmenthNtauh1hhjhhhNhNubh)}(hhh](h)}(h`bool xdr_stream_subsegment (struct xdr_stream *xdr, struct xdr_buf *subbuf, unsigned int nbytes)h]h)}(h_bool xdr_stream_subsegment(struct xdr_stream *xdr, struct xdr_buf *subbuf, unsigned int nbytes)h](j)}(hjTh]hbool}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=hhhjNhMubj)}(hxdr_stream_subsegmenth]j%)}(hxdr_stream_subsegmenth]hxdr_stream_subsegment}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj=hhhjNhMubj)}(hE(struct xdr_stream *xdr, struct xdr_buf *subbuf, unsigned int nbytes)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjcsbc.xdr_stream_subsegmentasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubj)}(hstruct xdr_buf *subbufh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_stream_subsegmentasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsubbufh]hsubbuf}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubj)}(hunsigned int nbytesh](j)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj%)}(hnbytesh]hnbytes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuubeh}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhjNhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj9hhhjNhMubah}(h]j4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjNhMhj6hhubjS)}(hhh]jX)}(h&set **subbuf** to a portion of **xdr**h](hset }(hjhhhNhNubj)}(h **subbuf**h]hsubbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to a portion of }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhjNhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXG**Parameters** ``struct xdr_stream *xdr`` an xdr_stream set up for decoding ``struct xdr_buf *subbuf`` the result buffer ``unsigned int nbytes`` length of **xdr** to extract, in bytes **Description** Sets up **subbuf** to represent a portion of **xdr**. The portion starts at the current offset in **xdr**, and extends for a length of **nbytes**. If this is successful, **xdr** is advanced to the next XDR data item following that portion. Return values: ``true``: **subbuf** has been initialized, and **xdr** has been advanced. ``false``: a bounds error has occurredh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h=``struct xdr_stream *xdr`` an xdr_stream set up for decoding h](j)}(h``struct xdr_stream *xdr``h]j)}(hj"h]hstruct xdr_stream *xdr}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h!an xdr_stream set up for decodingh]h!an xdr_stream set up for decoding}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h-``struct xdr_buf *subbuf`` the result buffer h](j)}(h``struct xdr_buf *subbuf``h]j)}(hj[h]hstruct xdr_buf *subbuf}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjUubj)}(hhh]jX)}(hthe result bufferh]hthe result buffer}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(h?``unsigned int nbytes`` length of **xdr** to extract, in bytes h](j)}(h``unsigned int nbytes``h]j)}(hjh]hunsigned int nbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h&length of **xdr** to extract, in bytesh](h length of }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to extract, in bytes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hSets up **subbuf** to represent a portion of **xdr**. The portion starts at the current offset in **xdr**, and extends for a length of **nbytes**. If this is successful, **xdr** is advanced to the next XDR data item following that portion.h](hSets up }(hjhhhNhNubj)}(h **subbuf**h]hsubbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to represent a portion of }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.. The portion starts at the current offset in }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and extends for a length of }(hjhhhNhNubj)}(h **nbytes**h]hnbytes}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. If this is successful, }(hjhhhNhNubj)}(h**xdr**h]hxdr}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> is advanced to the next XDR data item following that portion.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(hReturn values: ``true``: **subbuf** has been initialized, and **xdr** has been advanced. ``false``: a bounds error has occurredh](j)}(hReturn values:h]hReturn values:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjcubj)}(hhh]jX)}(hp``true``: **subbuf** has been initialized, and **xdr** has been advanced. ``false``: a bounds error has occurredh](j)}(h``true``h]htrue}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh: }(hjyhhhNhNubj)}(h **subbuf**h]hsubbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh has been initialized, and }(hjyhhhNhNubj)}(h**xdr**h]hxdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh has been advanced. }(hjyhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh: a bounds error has occurred}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjuhMhj`ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'xdr_stream_move_subsegment (C function)c.xdr_stream_move_subsegmenthNtauh1hhjhhhNhNubh)}(hhh](h)}(hunsigned int xdr_stream_move_subsegment (struct xdr_stream *xdr, unsigned int offset, unsigned int target, unsigned int length)h]h)}(h~unsigned int xdr_stream_move_subsegment(struct xdr_stream *xdr, unsigned int offset, unsigned int target, unsigned int length)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hxdr_stream_move_subsegmenth]j%)}(hxdr_stream_move_subsegmenth]hxdr_stream_move_subsegment}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(hW(struct xdr_stream *xdr, unsigned int offset, unsigned int target, unsigned int length)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j')}jj<sbc.xdr_stream_move_subsegmentasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hunsigned int targeth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(htargeth]htarget}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hunsigned int lengthh](j)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj%)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h)Move part of a stream to another positionh]h)Move part of a stream to another position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` the source xdr_stream ``unsigned int offset`` the source offset of the segment ``unsigned int target`` the target offset of the segment ``unsigned int length`` the number of bytes to move **Description** Moves **length** bytes from **offset** to **target** in the xdr_stream, overwriting anything in its space. Returns the number of bytes in the segment.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` the source xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hj h]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hthe source xdr_streamh]hthe source xdr_stream}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubj)}(h9``unsigned int offset`` the source offset of the segment h](j)}(h``unsigned int offset``h]j)}(hjFh]hunsigned int offset}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj@ubj)}(hhh]jX)}(h the source offset of the segmenth]h the source offset of the segment}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjubj)}(h9``unsigned int target`` the target offset of the segment h](j)}(h``unsigned int target``h]j)}(hjh]hunsigned int target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjyubj)}(hhh]jX)}(h the target offset of the segmenth]h the target offset of the segment}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``unsigned int length`` the number of bytes to move h](j)}(h``unsigned int length``h]j)}(hjh]hunsigned int length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hthe number of bytes to moveh]hthe number of bytes to move}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubjX)}(hMoves **length** bytes from **offset** to **target** in the xdr_stream, overwriting anything in its space. Returns the number of bytes in the segment.h](hMoves }(hj hhhNhNubj)}(h **length**h]hlength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh bytes from }(hj hhhNhNubj)}(h **offset**h]hoffset}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh to }(hj hhhNhNubj)}(h **target**h]htarget}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhb in the xdr_stream, overwriting anything in its space. Returns the number of bytes in the segment.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_stream_zero (C function)c.xdr_stream_zerohNtauh1hhjhhhNhNubh)}(hhh](h)}(h_unsigned int xdr_stream_zero (struct xdr_stream *xdr, unsigned int offset, unsigned int length)h]h)}(h^unsigned int xdr_stream_zero(struct xdr_stream *xdr, unsigned int offset, unsigned int length)h](j)}(hunsignedh]hunsigned}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj|hMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhj|hMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj|hMubj)}(hxdr_stream_zeroh]j%)}(hxdr_stream_zeroh]hxdr_stream_zero}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj|hMubj)}(hB(struct xdr_stream *xdr, unsigned int offset, unsigned int length)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_stream_zeroasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int offseth](j)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj%)}(hoffseth]hoffset}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lengthh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj|hMubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMhjchhubjS)}(hhh]jX)}(h#zero out a portion of an xdr_streamh]h#zero out a portion of an xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj|hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct xdr_stream *xdr`` an xdr_stream to zero out ``unsigned int offset`` the starting point in the stream ``unsigned int length`` the number of bytes to zeroh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h5``struct xdr_stream *xdr`` an xdr_stream to zero out h](j)}(h``struct xdr_stream *xdr``h]j)}(hj-h]hstruct xdr_stream *xdr}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj'ubj)}(hhh]jX)}(han xdr_stream to zero outh]han xdr_stream to zero out}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubj)}(h9``unsigned int offset`` the starting point in the stream h](j)}(h``unsigned int offset``h]j)}(hjfh]hunsigned int offset}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj`ubj)}(hhh]jX)}(h the starting point in the streamh]h the starting point in the stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj$ubj)}(h3``unsigned int length`` the number of bytes to zeroh](j)}(h``unsigned int length``h]j)}(hjh]hunsigned int length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hthe number of bytes to zeroh]hthe number of bytes to zero}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxdr_buf_trim (C function)c.xdr_buf_trimhNtauh1hhjhhhNhNubh)}(hhh](h)}(h9void xdr_buf_trim (struct xdr_buf *buf, unsigned int len)h]h)}(h8void xdr_buf_trim(struct xdr_buf *buf, unsigned int len)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h xdr_buf_trimh]j%)}(h xdr_buf_trimh]h xdr_buf_trim}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h'(struct xdr_buf *buf, unsigned int len)h](j)}(hstruct xdr_buf *bufh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(hxdr_bufh]hxdr_buf}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVmodnameN classnameNjj!)}j$]j')}jjsbc.xdr_buf_trimasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h,lop at most "len" bytes off the end of "buf"h]h4lop at most “len” bytes off the end of “buf”}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj"jxj"jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_buf *buf`` buf to be trimmed ``unsigned int len`` number of bytes to reduce "buf" by **Description** Trim an xdr_buf by the given number of bytes by fixing up the lengths. Note that it's possible that we'll trim less than that amount if the xdr_buf is too small, or if (for instance) it's all in the head and the parser has already read too far into it.h](jX)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj&ubj)}(hhh](j)}(h*``struct xdr_buf *buf`` buf to be trimmed h](j)}(h``struct xdr_buf *buf``h]j)}(hjKh]hstruct xdr_buf *buf}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjEubj)}(hhh]jX)}(hbuf to be trimmedh]hbuf to be trimmed}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjBubj)}(h8``unsigned int len`` number of bytes to reduce "buf" by h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj~ubj)}(hhh]jX)}(h"number of bytes to reduce "buf" byh]h&number of bytes to reduce “buf” by}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj&ubjX)}(hTrim an xdr_buf by the given number of bytes by fixing up the lengths. Note that it's possible that we'll trim less than that amount if the xdr_buf is too small, or if (for instance) it's all in the head and the parser has already read too far into it.h]hXTrim an xdr_buf by the given number of bytes by fixing up the lengths. Note that it’s possible that we’ll trim less than that amount if the xdr_buf is too small, or if (for instance) it’s all in the head and the parser has already read too far into it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)xdr_stream_decode_string_dup (C function)c.xdr_stream_decode_string_duphNtauh1hhjhhhNhNubh)}(hhh](h)}(hissize_t xdr_stream_decode_string_dup (struct xdr_stream *xdr, char **str, size_t maxlen, gfp_t gfp_flags)h]h)}(hhssize_t xdr_stream_decode_string_dup(struct xdr_stream *xdr, char **str, size_t maxlen, gfp_t gfp_flags)h](h)}(hhh]j%)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jxdr_stream_decode_string_dupsbc.xdr_stream_decode_string_dupasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj(hMubj)}(hxdr_stream_decode_string_duph]j%)}(hj%h]hxdr_stream_decode_string_dup}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj(hMubj)}(hD(struct xdr_stream *xdr, char **str, size_t maxlen, gfp_t gfp_flags)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvmodnameN classnameNjj!)}j$]j#c.xdr_stream_decode_string_dupasbuh1hhjRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(h char **strh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstrh]hstr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(h size_t maxlenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j#c.xdr_stream_decode_string_dupasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaxlenh]hmaxlen}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubj)}(hgfp_t gfp_flagsh](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbmodnameN classnameNjj!)}j$]j#c.xdr_stream_decode_string_dupasbuh1hhjYubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(h gfp_flagsh]h gfp_flags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj(hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(hMhjhhubjS)}(hhh]jX)}(h+Decode and duplicate variable length stringh]h+Decode and duplicate variable length string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj(hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``char **str`` location to store pointer to string ``size_t maxlen`` maximum acceptable string length ``gfp_t gfp_flags`` GFP mask to use **Description** Return values: On success, returns length of NUL-terminated string stored in ***ptr** ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of the string would exceed **maxlen** ``-ENOMEM`` on memory allocation failureh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h3``char **str`` location to store pointer to string h](j)}(h``char **str``h]j)}(hj0h]h char **str}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj*ubj)}(hhh]jX)}(h#location to store pointer to stringh]h#location to store pointer to string}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h3``size_t maxlen`` maximum acceptable string length h](j)}(h``size_t maxlen``h]j)}(hjih]h size_t maxlen}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjcubj)}(hhh]jX)}(h maximum acceptable string lengthh]h maximum acceptable string length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubj)}(h$``gfp_t gfp_flags`` GFP mask to use h](j)}(h``gfp_t gfp_flags``h]j)}(hjh]hgfp_t gfp_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hGFP mask to useh]hGFP mask to use}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(hReturn values: On success, returns length of NUL-terminated string stored in ***ptr** ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of the string would exceed **maxlen** ``-ENOMEM`` on memory allocation failureh](j)}(hReturn values:h]hReturn values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hOn success, returns length of NUL-terminated string stored in ***ptr** ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of the string would exceed **maxlen** ``-ENOMEM`` on memory allocation failureh](h>On success, returns length of NUL-terminated string stored in }(hj hhhNhNubj)}(h***ptr**h]h*ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }(hj hhhNhNubj)}(h ``-EBADMSG``h]h-EBADMSG}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh on XDR buffer overflow }(hj hhhNhNubj)}(h ``-EMSGSIZE``h]h -EMSGSIZE}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh( if the size of the string would exceed }(hj hhhNhNubj)}(h **maxlen**h]hmaxlen}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh }hj sbj)}(h ``-ENOMEM``h]h-ENOMEM}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh on memory allocation failure}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*xdr_stream_decode_opaque_auth (C function)c.xdr_stream_decode_opaque_authhNtauh1hhjhhhNhNubh)}(hhh](h)}(hpssize_t xdr_stream_decode_opaque_auth (struct xdr_stream *xdr, u32 *flavor, void **body, unsigned int *body_len)h]h)}(hossize_t xdr_stream_decode_opaque_auth(struct xdr_stream *xdr, u32 *flavor, void **body, unsigned int *body_len)h](h)}(hhh]j%)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jxdr_stream_decode_opaque_authsbc.xdr_stream_decode_opaque_authasbuh1hhjhhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hxdr_stream_decode_opaque_authh]j%)}(hjh]hxdr_stream_decode_opaque_auth}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hJ(struct xdr_stream *xdr, u32 *flavor, void **body, unsigned int *body_len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.xdr_stream_decode_opaque_authasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 *flavorh](h)}(hhh]j%)}(hu32h]hu32}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]jc.xdr_stream_decode_opaque_authasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj%)}(hflavorh]hflavor}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h void **bodyh](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbodyh]hbody}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int *body_lenh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hbody_lenh]hbody_len}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h(Decode struct opaque_auth (RFC5531 S8.2)h]h(Decode struct opaque_auth (RFC5531 S8.2)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``u32 *flavor`` location to store decoded flavor ``void **body`` location to store decode body ``unsigned int *body_len`` location to store length of decoded body **Description** Return values: On success, returns the number of buffer bytes consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the decoded size of the body field exceeds 400 octetsh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hjh]hstruct xdr_stream *xdr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``u32 *flavor`` location to store decoded flavor h](j)}(h``u32 *flavor``h]j)}(hjh]h u32 *flavor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(h location to store decoded flavorh]h location to store decoded flavor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h.``void **body`` location to store decode body h](j)}(h``void **body``h]j)}(hj/h]h void **body}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj)ubj)}(hhh]jX)}(hlocation to store decode bodyh]hlocation to store decode body}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(hD``unsigned int *body_len`` location to store length of decoded body h](j)}(h``unsigned int *body_len``h]j)}(hjhh]hunsigned int *body_len}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjbubj)}(hhh]jX)}(h(location to store length of decoded bodyh]h(location to store length of decoded body}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(hReturn values: On success, returns the number of buffer bytes consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the decoded size of the body field exceeds 400 octetsh](j)}(hReturn values:h]hReturn values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hOn success, returns the number of buffer bytes consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the decoded size of the body field exceeds 400 octetsh](h8On success, returns the number of buffer bytes consumed }(hjhhhNhNubj)}(h ``-EBADMSG``h]h-EBADMSG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh on XDR buffer overflow }(hjhhhNhNubj)}(h ``-EMSGSIZE``h]h -EMSGSIZE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 if the decoded size of the body field exceeds 400 octets}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*xdr_stream_encode_opaque_auth (C function)c.xdr_stream_encode_opaque_authhNtauh1hhjhhhNhNubh)}(hhh](h)}(hmssize_t xdr_stream_encode_opaque_auth (struct xdr_stream *xdr, u32 flavor, void *body, unsigned int body_len)h]h)}(hlssize_t xdr_stream_encode_opaque_auth(struct xdr_stream *xdr, u32 flavor, void *body, unsigned int body_len)h](h)}(hhh]j%)}(hssize_th]hssize_t}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jxdr_stream_encode_opaque_authsbc.xdr_stream_encode_opaque_authasbuh1hhj3hhhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhj[hMubj)}(hxdr_stream_encode_opaque_authh]j%)}(hjXh]hxdr_stream_encode_opaque_auth}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhj[hMubj)}(hG(struct xdr_stream *xdr, u32 flavor, void *body, unsigned int body_len)h](j)}(hstruct xdr_stream *xdrh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xdr_streamh]h xdr_stream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jVc.xdr_stream_encode_opaque_authasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxdrh]hxdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 flavorh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jVc.xdr_stream_encode_opaque_authasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflavorh]hflavor}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h void *bodyh](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hbodyh]hbody}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int body_lenh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbody_lenh]hbody_len}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhj[hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhj[hMubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[hMhj,hhubjS)}(hhh]jX)}(h(Encode struct opaque_auth (RFC5531 S8.2)h]h(Encode struct opaque_auth (RFC5531 S8.2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj,hhhj[hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct xdr_stream *xdr`` pointer to xdr_stream ``u32 flavor`` verifier flavor to encode ``void *body`` content of body to encode ``unsigned int body_len`` length of body to encode **Description** Return values: On success, returns length in bytes of XDR buffer consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of **body** exceeds 400 octetsh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh](j)}(h1``struct xdr_stream *xdr`` pointer to xdr_stream h](j)}(h``struct xdr_stream *xdr``h]j)}(hj&h]hstruct xdr_stream *xdr}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj ubj)}(hhh]jX)}(hpointer to xdr_streamh]hpointer to xdr_stream}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(h)``u32 flavor`` verifier flavor to encode h](j)}(h``u32 flavor``h]j)}(hj_h]h u32 flavor}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjYubj)}(hhh]jX)}(hverifier flavor to encodeh]hverifier flavor to encode}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMhjubj)}(h)``void *body`` content of body to encode h](j)}(h``void *body``h]j)}(hjh]h void *body}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hcontent of body to encodeh]hcontent of body to encode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``unsigned int body_len`` length of body to encode h](j)}(h``unsigned int body_len``h]j)}(hjh]hunsigned int body_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]jX)}(hlength of body to encodeh]hlength of body to encode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhjubj)}(hhh]j)}(hReturn values: On success, returns length in bytes of XDR buffer consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of **body** exceeds 400 octetsh](j)}(hReturn values:h]hReturn values:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj%ubj)}(hhh]jX)}(hOn success, returns length in bytes of XDR buffer consumed ``-EBADMSG`` on XDR buffer overflow ``-EMSGSIZE`` if the size of **body** exceeds 400 octetsh](h;On success, returns length in bytes of XDR buffer consumed }(hj;hhhNhNubj)}(h ``-EBADMSG``h]h-EBADMSG}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh on XDR buffer overflow }(hj;hhhNhNubj)}(h ``-EMSGSIZE``h]h -EMSGSIZE}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh if the size of }(hj;hhhNhNubj)}(h**body**h]hbody}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh exceeds 400 octets}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhP/var/lib/git/docbuild/linux/Documentation/networking/kapi:59: ./net/sunrpc/xdr.chMhj8ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_reg_xprt_class (C function)c.svc_reg_xprt_classhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3int svc_reg_xprt_class (struct svc_xprt_class *xcl)h]h)}(h2int svc_reg_xprt_class(struct svc_xprt_class *xcl)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKNubj)}(hsvc_reg_xprt_classh]j%)}(hsvc_reg_xprt_classh]hsvc_reg_xprt_class}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKNubj)}(h(struct svc_xprt_class *xcl)h]j)}(hstruct svc_xprt_class *xclh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_xprt_classh]hsvc_xprt_class}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.svc_reg_xprt_classasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxclh]hxcl}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKNubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKNubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKNhjhhubjS)}(hhh]jX)}(h*Register a server-side RPC transport classh]h*Register a server-side RPC transport class}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKNhjohhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKNubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct svc_xprt_class *xcl`` New transport class to be registered **Description** Returns zero on success; otherwise a negative errno is returned.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKRhjubj)}(hhh]j)}(hD``struct svc_xprt_class *xcl`` New transport class to be registered h](j)}(h``struct svc_xprt_class *xcl``h]j)}(hjh]hstruct svc_xprt_class *xcl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKOhjubj)}(hhh]jX)}(h$New transport class to be registeredh]h$New transport class to be registered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKOhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKQhjubjX)}(h@Returns zero on success; otherwise a negative errno is returned.h]h@Returns zero on success; otherwise a negative errno is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!svc_unreg_xprt_class (C function)c.svc_unreg_xprt_classhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6void svc_unreg_xprt_class (struct svc_xprt_class *xcl)h]h)}(h5void svc_unreg_xprt_class(struct svc_xprt_class *xcl)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhjAhKhubj)}(hsvc_unreg_xprt_classh]j%)}(hsvc_unreg_xprt_classh]hsvc_unreg_xprt_class}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/hhhjAhKhubj)}(h(struct svc_xprt_class *xcl)h]j)}(hstruct svc_xprt_class *xclh](h)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(hhh]j%)}(hsvc_xprt_classh]hsvc_xprt_class}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjVsbc.svc_unreg_xprt_classasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubj%)}(hxclh]hxcl}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhubah}(h]h ]h"]h$]h&]j<j=uh1jhj/hhhjAhKhubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+hhhjAhKhubah}(h]j&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhKhhj(hhubjS)}(hhh]jX)}(h,Unregister a server-side RPC transport classh]h,Unregister a server-side RPC transport class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhhjhhubah}(h]h ]h"]h$]h&]uh1jRhj(hhhjAhKhubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hS**Parameters** ``struct svc_xprt_class *xcl`` Transport class to be unregisteredh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKlhjubj)}(hhh]j)}(hA``struct svc_xprt_class *xcl`` Transport class to be unregisteredh](j)}(h``struct svc_xprt_class *xcl``h]j)}(hj4h]hstruct svc_xprt_class *xcl}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKnhj.ubj)}(hhh]jX)}(h"Transport class to be unregisteredh]h"Transport class to be unregistered}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKihjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKnhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$svc_xprt_deferred_close (C function)c.svc_xprt_deferred_closehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void svc_xprt_deferred_close (struct svc_xprt *xprt)h]h)}(h3void svc_xprt_deferred_close(struct svc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hsvc_xprt_deferred_closeh]j%)}(hsvc_xprt_deferred_closeh]hsvc_xprt_deferred_close}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(struct svc_xprt *xprt)h]j)}(hstruct svc_xprt *xprth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.svc_xprt_deferred_closeasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxprth]hxprt}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hClose a transporth]hClose a transport}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjKhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjfjxjfjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct svc_xprt *xprt`` transport instance **Description** Used in contexts that need to defer the work of shutting down the transport to an nfsd thread.h](jX)}(h**Parameters**h]j)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjjubj)}(hhh]j)}(h-``struct svc_xprt *xprt`` transport instance h](j)}(h``struct svc_xprt *xprt``h]j)}(hjh]hstruct svc_xprt *xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubj)}(hhh]jX)}(htransport instanceh]htransport instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjjubjX)}(h^Used in contexts that need to defer the work of shutting down the transport to an nfsd thread.h]h^Used in contexts that need to defer the work of shutting down the transport to an nfsd thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_xprt_received (C function)c.svc_xprt_receivedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void svc_xprt_received (struct svc_xprt *xprt)h]h)}(h-void svc_xprt_received(struct svc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhKubj)}(hsvc_xprt_receivedh]j%)}(hsvc_xprt_receivedh]hsvc_xprt_received}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhKubj)}(h(struct svc_xprt *xprt)h]j)}(hstruct svc_xprt *xprth](h)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]j')}jj2sbc.svc_xprt_receivedasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHubj%)}(hxprth]hxprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubah}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hstart next receiver threadh]hstart next receiver thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_xprt *xprt`` controlling transport **Description** The caller must hold the XPT_BUSY bit and must not thereafter touch transport data. **Note** XPT_DATA only gets cleared when a read-attempt finds no (or insufficient) data.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubj)}(hhh]j)}(h0``struct svc_xprt *xprt`` controlling transport h](j)}(h``struct svc_xprt *xprt``h]j)}(hjh]hstruct svc_xprt *xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhj ubj)}(hhh]jX)}(hcontrolling transporth]hcontrolling transport}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubjX)}(hSThe caller must hold the XPT_BUSY bit and must not thereafter touch transport data.h]hSThe caller must hold the XPT_BUSY bit and must not thereafter touch transport data.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubjX)}(h**Note**h]j)}(hjrh]hNote}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubjX)}(hOXPT_DATA only gets cleared when a read-attempt finds no (or insufficient) data.h]hOXPT_DATA only gets cleared when a read-attempt finds no (or insufficient) data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$svc_xprt_create_from_sa (C function)c.svc_xprt_create_from_sahNtauh1hhjhhhNhNubh)}(hhh](h)}(hint svc_xprt_create_from_sa (struct svc_serv *serv, const char *xprt_name, struct net *net, struct sockaddr *sap, int flags, const struct cred *cred)h]h)}(hint svc_xprt_create_from_sa(struct svc_serv *serv, const char *xprt_name, struct net *net, struct sockaddr *sap, int flags, const struct cred *cred)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM"ubj)}(hsvc_xprt_create_from_sah]j%)}(hsvc_xprt_create_from_sah]hsvc_xprt_create_from_sa}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM"ubj)}(hy(struct svc_serv *serv, const char *xprt_name, struct net *net, struct sockaddr *sap, int flags, const struct cred *cred)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.svc_xprt_create_from_saasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hservh]hserv}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *xprt_nameh](h)}(hjh]hconst}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(h xprt_nameh]h xprt_name}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j.c.svc_xprt_create_from_saasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sockaddr *saph](h)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]j.c.svc_xprt_create_from_saasbuh1hhj/ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hsaph]hsap}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int flagsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst struct cred *credh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j.c.svc_xprt_create_from_saasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hcredh]hcred}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM"ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM"ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM"hjhhubjS)}(hhh]jX)}(h2Add a new listener to **serv** from socket addressh](hAdd a new listener to }(hjthhhNhNubj)}(h**serv**h]hserv}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh from socket address}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM"hjqhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM"ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` target RPC service ``const char *xprt_name`` transport class name ``struct net *net`` network namespace ``struct sockaddr *sap`` socket address pointer ``int flags`` SVC_SOCK flags ``const struct cred *cred`` credential to bind to this transport **Description** Return local xprt port on success or ``-EPROTONOSUPPORT`` on failureh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM&hjubj)}(hhh](j)}(h-``struct svc_serv *serv`` target RPC service h](j)}(h``struct svc_serv *serv``h]j)}(hjh]hstruct svc_serv *serv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM#hjubj)}(hhh]jX)}(htarget RPC serviceh]htarget RPC service}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h/``const char *xprt_name`` transport class name h](j)}(h``const char *xprt_name``h]j)}(hjh]hconst char *xprt_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM$hjubj)}(hhh]jX)}(htransport class nameh]htransport class name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(h&``struct net *net`` network namespace h](j)}(h``struct net *net``h]j)}(hj9h]hstruct net *net}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM%hj3ubj)}(hhh]jX)}(hnetwork namespaceh]hnetwork namespace}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhM%hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhM%hjubj)}(h0``struct sockaddr *sap`` socket address pointer h](j)}(h``struct sockaddr *sap``h]j)}(hjrh]hstruct sockaddr *sap}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM&hjlubj)}(hhh]jX)}(hsocket address pointerh]hsocket address pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(h``int flags`` SVC_SOCK flags h](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM'hjubj)}(hhh]jX)}(hSVC_SOCK flagsh]hSVC_SOCK flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(hA``const struct cred *cred`` credential to bind to this transport h](j)}(h``const struct cred *cred``h]j)}(hjh]hconst struct cred *cred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM(hjubj)}(hhh]jX)}(h$credential to bind to this transporth]h$credential to bind to this transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM*hjubjX)}(hDReturn local xprt port on success or ``-EPROTONOSUPPORT`` on failureh](h%Return local xprt port on success or }(hj5hhhNhNubj)}(h``-EPROTONOSUPPORT``h]h-EPROTONOSUPPORT}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh on failure}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM)hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_xprt_create (C function)c.svc_xprt_createhNtauh1hhjhhhNhNubh)}(hhh](h)}(hint svc_xprt_create (struct svc_serv *serv, const char *xprt_name, struct net *net, const int family, const unsigned short port, int flags, const struct cred *cred)h]h)}(hint svc_xprt_create(struct svc_serv *serv, const char *xprt_name, struct net *net, const int family, const unsigned short port, int flags, const struct cred *cred)h](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhjhMLubj)}(hsvc_xprt_createh]j%)}(hsvc_xprt_createh]hsvc_xprt_create}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrhhhjhMLubj)}(h(struct svc_serv *serv, const char *xprt_name, struct net *net, const int family, const unsigned short port, int flags, const struct cred *cred)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.svc_xprt_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hservh]hserv}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *xprt_nameh](h)}(hjh]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj)}(hcharh]hchar}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(h xprt_nameh]h xprt_name}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.svc_xprt_createasbuh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst int familyh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hfamilyh]hfamily}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst unsigned short porth](h)}(hjh]hconst}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj)}(hshorth]hshort}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj%)}(hporth]hport}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int flagsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst struct cred *credh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hcredh]hcred}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.svc_xprt_createasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjHhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hcredh]hcred}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjrhhhjhMLubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjhMLubah}(h]jiah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMLhjkhhubjS)}(hhh]jX)}(hAdd a new listener to **serv**h](hAdd a new listener to }(hjhhhNhNubj)}(h**serv**h]hserv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMLhj|hhubah}(h]h ]h"]h$]h&]uh1jRhjkhhhjhMLubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` target RPC service ``const char *xprt_name`` transport class name ``struct net *net`` network namespace ``const int family`` network address family ``const unsigned short port`` listener port ``int flags`` SVC_SOCK flags ``const struct cred *cred`` credential to bind to this transport **Description** Return local xprt port on success or ``-EPROTONOSUPPORT`` on failureh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMPhjubj)}(hhh](j)}(h-``struct svc_serv *serv`` target RPC service h](j)}(h``struct svc_serv *serv``h]j)}(hjh]hstruct svc_serv *serv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMMhjubj)}(hhh]jX)}(htarget RPC serviceh]htarget RPC service}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMMhjubj)}(h/``const char *xprt_name`` transport class name h](j)}(h``const char *xprt_name``h]j)}(hjh]hconst char *xprt_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMNhjubj)}(hhh]jX)}(htransport class nameh]htransport class name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjubj)}(h&``struct net *net`` network namespace h](j)}(h``struct net *net``h]j)}(hj@h]hstruct net *net}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMOhj:ubj)}(hhh]jX)}(hnetwork namespaceh]hnetwork namespace}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUhMOhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMOhjubj)}(h,``const int family`` network address family h](j)}(h``const int family``h]j)}(hjyh]hconst int family}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMPhjsubj)}(hhh]jX)}(hnetwork address familyh]hnetwork address family}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h,``const unsigned short port`` listener port h](j)}(h``const unsigned short port``h]j)}(hjh]hconst unsigned short port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMQhjubj)}(hhh]jX)}(h listener porth]h listener port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h``int flags`` SVC_SOCK flags h](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMRhjubj)}(hhh]jX)}(hSVC_SOCK flagsh]hSVC_SOCK flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubj)}(hA``const struct cred *cred`` credential to bind to this transport h](j)}(h``const struct cred *cred``h]j)}(hj$h]hconst struct cred *cred}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMShjubj)}(hhh]jX)}(h$credential to bind to this transporth]h$credential to bind to this transport}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMShj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMShjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMUhjubjX)}(hDReturn local xprt port on success or ``-EPROTONOSUPPORT`` on failureh](h%Return local xprt port on success or }(hjuhhhNhNubj)}(h``-EPROTONOSUPPORT``h]h-EPROTONOSUPPORT}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh on failure}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMThjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_print_addr (C function)c.svc_print_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hEchar * svc_print_addr (struct svc_rqst *rqstp, char *buf, size_t len)h]h)}(hCchar *svc_print_addr(struct svc_rqst *rqstp, char *buf, size_t len)h](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hsvc_print_addrh]j%)}(hsvc_print_addrh]hsvc_print_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h/(struct svc_rqst *rqstp, char *buf, size_t len)h](j)}(hstruct svc_rqst *rqstph](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_rqsth]hsvc_rqst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.svc_print_addrasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrqstph]hrqstp}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h char *bufh](j)}(hcharh]hchar}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h size_t lenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j:c.svc_print_addrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h!Format rq_addr field for printingh]h!Format rq_addr field for printing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct svc_rqst *rqstp`` svc_rqst struct containing address to print ``char *buf`` target buffer for formatted address ``size_t len`` length of target bufferh](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhj)ubj)}(hhh](j)}(hG``struct svc_rqst *rqstp`` svc_rqst struct containing address to print h](j)}(h``struct svc_rqst *rqstp``h]j)}(hjNh]hstruct svc_rqst *rqstp}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjHubj)}(hhh]jX)}(h+svc_rqst struct containing address to printh]h+svc_rqst struct containing address to print}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjEubj)}(h2``char *buf`` target buffer for formatted address h](j)}(h ``char *buf``h]j)}(hjh]h char *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(h#target buffer for formatted addressh]h#target buffer for formatted address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjEubj)}(h&``size_t len`` length of target bufferh](j)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(hlength of target bufferh]hlength of target buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_xprt_enqueue (C function)c.svc_xprt_enqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void svc_xprt_enqueue (struct svc_xprt *xprt)h]h)}(h,void svc_xprt_enqueue(struct svc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj(hMubj)}(hsvc_xprt_enqueueh]j%)}(hsvc_xprt_enqueueh]hsvc_xprt_enqueue}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj(hMubj)}(h(struct svc_xprt *xprt)h]j)}(hstruct svc_xprt *xprth](h)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwmodnameN classnameNjj!)}j$]j')}jj=sbc.svc_xprt_enqueueasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hxprth]hxprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj(hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(hMhjhhubjS)}(hhh]jX)}(h(Queue a transport on an idle nfsd threadh]h(Queue a transport on an idle nfsd thread}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj(hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hG**Parameters** ``struct svc_xprt *xprt`` transport with data pendingh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]j)}(h5``struct svc_xprt *xprt`` transport with data pendingh](j)}(h``struct svc_xprt *xprt``h]j)}(hjh]hstruct svc_xprt *xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(htransport with data pendingh]htransport with data pending}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_reserve (C function) c.svc_reservehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void svc_reserve (struct svc_rqst *rqstp, int space)h]h)}(h3void svc_reserve(struct svc_rqst *rqstp, int space)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqhhhjhMubj)}(h svc_reserveh]j%)}(h svc_reserveh]h svc_reserve}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjqhhhjhMubj)}(h#(struct svc_rqst *rqstp, int space)h](j)}(hstruct svc_rqst *rqstph](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_rqsth]hsvc_rqst}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.svc_reserveasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrqstph]hrqstp}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int spaceh](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hspaceh]hspace}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjmhhhjhMubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjjhhubjS)}(hhh]jX)}(h5change the space reserved for the reply to a request.h]h5change the space reserved for the reply to a request.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjghhubah}(h]h ]h"]h$]h&]uh1jRhjjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXF**Parameters** ``struct svc_rqst *rqstp`` The request in question ``int space`` new max space to reserve **Description** Each request reserves some space on the output queue of the transport to make sure the reply fits. This function reduces that reserved space to be the amount of space used already, plus **space**.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh](j)}(h3``struct svc_rqst *rqstp`` The request in question h](j)}(h``struct svc_rqst *rqstp``h]j)}(hjh]hstruct svc_rqst *rqstp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(hThe request in questionh]hThe request in question}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``int space`` new max space to reserve h](j)}(h ``int space``h]j)}(hjh]h int space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(hnew max space to reserveh]hnew max space to reserve}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubjX)}(hEach request reserves some space on the output queue of the transport to make sure the reply fits. This function reduces that reserved space to be the amount of space used already, plus **space**.h](hEach request reserves some space on the output queue of the transport to make sure the reply fits. This function reduces that reserved space to be the amount of space used already, plus }(hj5 hhhNhNubj)}(h **space**h]hspace}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubh.}(hj5 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_wake_up (C function) c.svc_wake_uphNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void svc_wake_up (struct svc_serv *serv)h]h)}(h'void svc_wake_up(struct svc_serv *serv)h](j)}(hvoidh]hvoid}(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMAubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr hhhj hMAubj)}(h svc_wake_uph]j%)}(h svc_wake_uph]h svc_wake_up}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjr hhhj hMAubj)}(h(struct svc_serv *serv)h]j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sb c.svc_wake_upasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hservh]hserv}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjr hhhj hMAubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjn hhhj hMAubah}(h]ji ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMAhjk hhubjS)}(hhh]jX)}(h/Wake up a service thread for non-transport workh]h/Wake up a service thread for non-transport work}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMAhj3 hhubah}(h]h ]h"]h$]h&]uh1jRhjk hhhj hMAubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjN jxjN jyjzj{uh1hhhhjhNhNubj})}(hX|**Parameters** ``struct svc_serv *serv`` RPC service **Description** Some svc_serv's will have occasional work to do, even when a xprt is not waiting to be serviced. This function is there to "kick" a task in one of those services so that it can wake up and do that work. Note that we only bother with pool 0 as we don't need to wake up more than one thread for this purpose.h](jX)}(h**Parameters**h]j)}(hjX h]h Parameters}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMEhjR ubj)}(hhh]j)}(h&``struct svc_serv *serv`` RPC service h](j)}(h``struct svc_serv *serv``h]j)}(hjw h]hstruct svc_serv *serv}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMBhjq ubj)}(hhh]jX)}(h RPC serviceh]h RPC service}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMBhj ubah}(h]h ]h"]h$]h&]uh1jhjq ubeh}(h]h ]h"]h$]h&]uh1jhj hMBhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMDhjR ubjX)}(hX2Some svc_serv's will have occasional work to do, even when a xprt is not waiting to be serviced. This function is there to "kick" a task in one of those services so that it can wake up and do that work. Note that we only bother with pool 0 as we don't need to wake up more than one thread for this purpose.h]hX:Some svc_serv’s will have occasional work to do, even when a xprt is not waiting to be serviced. This function is there to “kick” a task in one of those services so that it can wake up and do that work. Note that we only bother with pool 0 as we don’t need to wake up more than one thread for this purpose.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMChjR ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_recv (C function) c.svc_recvhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int svc_recv (struct svc_rqst *rqstp, long timeo)h]h)}(h0int svc_recv(struct svc_rqst *rqstp, long timeo)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMKubj)}(hsvc_recvh]j%)}(hsvc_recvh]hsvc_recv}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMKubj)}(h$(struct svc_rqst *rqstp, long timeo)h](j)}(hstruct svc_rqst *rqstph](h)}(hjh]hstruct}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0 ubj)}(h h]h }(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0 ubh)}(hhh]j%)}(hsvc_rqsth]hsvc_rqst}(hjR hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjT modnameN classnameNjj!)}j$]j')}jj sb c.svc_recvasbuh1hhj0 ubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0 ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0 ubj%)}(hrqstph]hrqstp}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0 ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj, ubj)}(h long timeoh](j)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(htimeoh]htimeo}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj, ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMKubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMKhj hhubjS)}(hhh]jX)}(h5Receive and process the next request on any transporth]h5Receive and process the next request on any transport}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMKhj hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_rqst *rqstp`` an idle RPC service thread ``long timeo`` timeout (in jiffies) (0 means infinite timeout) **Description** This code is carefully organised not to touch any cachelines in the shared svc_serv structure, only cachelines in the local svc_pool. If the timeout is 0, then the sleep will never time out. Returns -ETIMEDOUT if idle for an extended period -EBUSY if there is more work to do than available threads 0 otherwise.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMOhj ubj)}(hhh](j)}(h6``struct svc_rqst *rqstp`` an idle RPC service thread h](j)}(h``struct svc_rqst *rqstp``h]j)}(hj- h]hstruct svc_rqst *rqstp}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMLhj' ubj)}(hhh]jX)}(han idle RPC service threadh]han idle RPC service thread}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB hMLhjC ubah}(h]h ]h"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]uh1jhjB hMLhj$ ubj)}(h?``long timeo`` timeout (in jiffies) (0 means infinite timeout) h](j)}(h``long timeo``h]j)}(hjf h]h long timeo}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMMhj` ubj)}(hhh]jX)}(h/timeout (in jiffies) (0 means infinite timeout)h]h/timeout (in jiffies) (0 means infinite timeout)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{ hMMhj| ubah}(h]h ]h"]h$]h&]uh1jhj` ubeh}(h]h ]h"]h$]h&]uh1jhj{ hMMhj$ ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMOhj ubjX)}(hThis code is carefully organised not to touch any cachelines in the shared svc_serv structure, only cachelines in the local svc_pool.h]hThis code is carefully organised not to touch any cachelines in the shared svc_serv structure, only cachelines in the local svc_pool.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMNhj ubjX)}(h8If the timeout is 0, then the sleep will never time out.h]h8If the timeout is 0, then the sleep will never time out.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMRhj ubj)}(hhh]j)}(hxReturns -ETIMEDOUT if idle for an extended period -EBUSY if there is more work to do than available threads 0 otherwise.h](j)}(h1Returns -ETIMEDOUT if idle for an extended periodh]h1Returns -ETIMEDOUT if idle for an extended period}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMUhj ubj)}(hhh]jX)}(hF-EBUSY if there is more work to do than available threads 0 otherwise.h]hF-EBUSY if there is more work to do than available threads 0 otherwise.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMUhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMUhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_xprt_close (C function)c.svc_xprt_closehNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void svc_xprt_close (struct svc_xprt *xprt)h]h)}(h*void svc_xprt_close(struct svc_xprt *xprt)h](j)}(hvoidh]hvoid}(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj* hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM>ubj)}(h h]h }(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj* hhhj< hM>ubj)}(hsvc_xprt_closeh]j%)}(hsvc_xprt_closeh]hsvc_xprt_close}(hjO hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjK ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj* hhhj< hM>ubj)}(h(struct svc_xprt *xprt)h]j)}(hstruct svc_xprt *xprth](h)}(hjh]hstruct}(hjk hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjg ubj)}(h h]h }(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjg ubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjQ sbc.svc_xprt_closeasbuh1hhjg ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjg ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjg ubj%)}(hxprth]hxprt}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjg ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjc ubah}(h]h ]h"]h$]h&]j<j=uh1jhj* hhhj< hM>ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj& hhhj< hM>ubah}(h]j! ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj< hM>hj# hhubjS)}(hhh]jX)}(hClose a client connectionh]hClose a client connection}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM>hj hhubah}(h]h ]h"]h$]h&]uh1jRhj# hhhj< hM>ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hC**Parameters** ``struct svc_xprt *xprt`` transport to disconnecth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMBhj ubj)}(hhh]j)}(h1``struct svc_xprt *xprt`` transport to disconnecth](j)}(h``struct svc_xprt *xprt``h]j)}(hj/h]hstruct svc_xprt *xprt}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMDhj)ubj)}(hhh]jX)}(htransport to disconnecth]htransport to disconnect}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM?hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMDhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!svc_xprt_destroy_all (C function)c.svc_xprt_destroy_allhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSvoid svc_xprt_destroy_all (struct svc_serv *serv, struct net *net, bool unregister)h]h)}(hRvoid svc_xprt_destroy_all(struct svc_serv *serv, struct net *net, bool unregister)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM|ubj)}(hsvc_xprt_destroy_allh]j%)}(hsvc_xprt_destroy_allh]hsvc_xprt_destroy_all}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM|ubj)}(h9(struct svc_serv *serv, struct net *net, bool unregister)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.svc_xprt_destroy_allasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hservh]hserv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net *neth](h)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hneth]hnet}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]jc.svc_xprt_destroy_allasbuh1hhj4ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hbool unregisterh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h unregisterh]h unregister}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM|ubah}(h]j|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM|hj~hhubjS)}(hhh]jX)}(h+Destroy transports associated with **serv**h](h#Destroy transports associated with }(hjhhhNhNubj)}(h**serv**h]hserv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM|hjhhubah}(h]h ]h"]h$]h&]uh1jRhj~hhhjhM|ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` RPC service to be shut down ``struct net *net`` target network namespace ``bool unregister`` true if it is OK to unregister the destroyed xprts **Description** Server threads may still be running (especially in the case where the service is still running in other network namespaces). So we shut down sockets the same way we would on a running server, by setting XPT_CLOSE, enqueuing, and letting a thread pick it up to do the close. In the case there are no such other threads, threads running, svc_clean_up_xprts() does a simple version of a server's main event loop, and in the case where there are other threads, we may need to wait a little while and then check again to see if they're done.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh](j)}(h6``struct svc_serv *serv`` RPC service to be shut down h](j)}(h``struct svc_serv *serv``h]j)}(hj<h]hstruct svc_serv *serv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM}hj6ubj)}(hhh]jX)}(hRPC service to be shut downh]hRPC service to be shut down}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhM}hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM}hj3ubj)}(h-``struct net *net`` target network namespace h](j)}(h``struct net *net``h]j)}(hjuh]hstruct net *net}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM~hjoubj)}(hhh]jX)}(htarget network namespaceh]htarget network namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhM~hj3ubj)}(hG``bool unregister`` true if it is OK to unregister the destroyed xprts h](j)}(h``bool unregister``h]j)}(hjh]hbool unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(h2true if it is OK to unregister the destroyed xprtsh]h2true if it is OK to unregister the destroyed xprts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubjX)}(h|Server threads may still be running (especially in the case where the service is still running in other network namespaces).h]h|Server threads may still be running (especially in the case where the service is still running in other network namespaces).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubjX)}(hXSo we shut down sockets the same way we would on a running server, by setting XPT_CLOSE, enqueuing, and letting a thread pick it up to do the close. In the case there are no such other threads, threads running, svc_clean_up_xprts() does a simple version of a server's main event loop, and in the case where there are other threads, we may need to wait a little while and then check again to see if they're done.h]hXSo we shut down sockets the same way we would on a running server, by setting XPT_CLOSE, enqueuing, and letting a thread pick it up to do the close. In the case there are no such other threads, threads running, svc_clean_up_xprts() does a simple version of a server’s main event loop, and in the case where there are other threads, we may need to wait a little while and then check again to see if they’re done.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_find_listener (C function)c.svc_find_listenerhNtauh1hhjhhhNhNubh)}(hhh](h)}(h}struct svc_xprt * svc_find_listener (struct svc_serv *serv, const char *xcl_name, struct net *net, const struct sockaddr *sa)h]h)}(h{struct svc_xprt *svc_find_listener(struct svc_serv *serv, const char *xcl_name, struct net *net, const struct sockaddr *sa)h](h)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhjJhMubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j')}jsvc_find_listenersbc.svc_find_listenerasbuh1hhj9hhhjJhMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhjJhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9hhhjJhMubj)}(hsvc_find_listenerh]j%)}(hjzh]hsvc_find_listener}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9hhhjJhMubj)}(hY(struct svc_serv *serv, const char *xcl_name, struct net *net, const struct sockaddr *sa)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jxc.svc_find_listenerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hservh]hserv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *xcl_nameh](h)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(hcharh]hchar}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hxcl_nameh]hxcl_name}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jxc.svc_find_listenerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst struct sockaddr *sah](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]jxc.svc_find_listenerasbuh1hhjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsah]hsa}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj9hhhjJhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhjJhMubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhMhj2hhubjS)}(hhh]jX)}(hfind an RPC transport instanceh]hfind an RPC transport instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj2hhhjJhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` pointer to svc_serv to search ``const char *xcl_name`` C string containing transport's class name ``struct net *net`` owner net pointer ``const struct sockaddr *sa`` sockaddr containing address **Description** Return the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, and matching sockaddr.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM hjubj)}(hhh](j)}(h8``struct svc_serv *serv`` pointer to svc_serv to search h](j)}(h``struct svc_serv *serv``h]j)}(hjh]hstruct svc_serv *serv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(hpointer to svc_serv to searchh]hpointer to svc_serv to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hD``const char *xcl_name`` C string containing transport's class name h](j)}(h``const char *xcl_name``h]j)}(hj h]hconst char *xcl_name}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubj)}(hhh]jX)}(h*C string containing transport's class nameh]h,C string containing transport’s class name}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h&``struct net *net`` owner net pointer h](j)}(h``struct net *net``h]j)}(hjCh]hstruct net *net}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhj=ubj)}(hhh]jX)}(howner net pointerh]howner net pointer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubj)}(h:``const struct sockaddr *sa`` sockaddr containing address h](j)}(h``const struct sockaddr *sa``h]j)}(hj|h]hconst struct sockaddr *sa}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM hjvubj)}(hhh]jX)}(hsockaddr containing addressh]hsockaddr containing address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM"hjubjX)}(hReturn the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, and matching sockaddr.h]hReturn the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, and matching sockaddr.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_find_xprt (C function)c.svc_find_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct svc_xprt * svc_find_xprt (struct svc_serv *serv, const char *xcl_name, struct net *net, const sa_family_t af, const unsigned short port)h]h)}(hstruct svc_xprt *svc_find_xprt(struct svc_serv *serv, const char *xcl_name, struct net *net, const sa_family_t af, const unsigned short port)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM>ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hM>ubh)}(hhh]j%)}(hsvc_xprth]hsvc_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j svc_find_xprtsbc.svc_find_xprtasbuh1hhjhhhj hM>ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hM>ubj;)}(hj>h]h*}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhj hM>ubj)}(h svc_find_xprth]j%)}(hj9h]h svc_find_xprt}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hM>ubj)}(ho(struct svc_serv *serv, const char *xcl_name, struct net *net, const sa_family_t af, const unsigned short port)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j7c.svc_find_xprtasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hservh]hserv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hconst char *xcl_nameh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxcl_nameh]hxcl_name}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hstruct net *neth](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubh)}(hhh]j%)}(hneth]hnet}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j7c.svc_find_xprtasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hconst sa_family_t afh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h sa_family_th]h sa_family_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j7c.svc_find_xprtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hafh]haf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hconst unsigned short porth](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hshorth]hshort}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hporth]hport}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hM>ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hM>ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM>hjhhubjS)}(hhh]jX)}(hfind an RPC transport instanceh]hfind an RPC transport instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM>hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hM>ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` pointer to svc_serv to search ``const char *xcl_name`` C string containing transport's class name ``struct net *net`` owner net pointer ``const sa_family_t af`` Address family of transport's local address ``const unsigned short port`` transport's IP port number **Description** Return the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, address family and port. Specifying 0 for the address family or port is effectively a wild-card, and will result in matching the first transport in the service's list that has a matching class name.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMBhjubj)}(hhh](j)}(h8``struct svc_serv *serv`` pointer to svc_serv to search h](j)}(h``struct svc_serv *serv``h]j)}(hjh]hstruct svc_serv *serv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM?hjubj)}(hhh]jX)}(hpointer to svc_serv to searchh]hpointer to svc_serv to search}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjubj)}(hD``const char *xcl_name`` C string containing transport's class name h](j)}(h``const char *xcl_name``h]j)}(hj h]hconst char *xcl_name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM@hjubj)}(hhh]jX)}(h*C string containing transport's class nameh]h,C string containing transport’s class name}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM@hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM@hjubj)}(h&``struct net *net`` owner net pointer h](j)}(h``struct net *net``h]j)}(hjFh]hstruct net *net}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMAhj@ubj)}(hhh]jX)}(howner net pointerh]howner net pointer}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[hMAhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMAhjubj)}(hE``const sa_family_t af`` Address family of transport's local address h](j)}(h``const sa_family_t af``h]j)}(hjh]hconst sa_family_t af}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMBhjyubj)}(hhh]jX)}(h+Address family of transport's local addressh]h-Address family of transport’s local address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubj)}(h9``const unsigned short port`` transport's IP port number h](j)}(h``const unsigned short port``h]j)}(hjh]hconst unsigned short port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMChjubj)}(hhh]jX)}(htransport's IP port numberh]htransport’s IP port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMEhjubjX)}(hReturn the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, address family and port.h]hReturn the transport instance pointer for the endpoint accepting connections/peer traffic from the specified transport class, address family and port.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMDhjubjX)}(hSpecifying 0 for the address family or port is effectively a wild-card, and will result in matching the first transport in the service's list that has a matching class name.h]hSpecifying 0 for the address family or port is effectively a wild-card, and will result in matching the first transport in the service’s list that has a matching class name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsvc_xprt_names (C function)c.svc_xprt_nameshNtauh1hhjhhhNhNubh)}(hhh](h)}(hGint svc_xprt_names (struct svc_serv *serv, char *buf, const int buflen)h]h)}(hFint svc_xprt_names(struct svc_serv *serv, char *buf, const int buflen)h](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMyubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjUhMyubj)}(hsvc_xprt_namesh]j%)}(hsvc_xprt_namesh]hsvc_xprt_names}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjUhMyubj)}(h4(struct svc_serv *serv, char *buf, const int buflen)h](j)}(hstruct svc_serv *servh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsvc_servh]hsvc_serv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjjsbc.svc_xprt_namesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hservh]hserv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(h char *bufh](j)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(hconst int buflenh](h)}(hjh]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj%)}(hbuflenh]hbuflen}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjUhMyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj?hhhjUhMyubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjUhMyhj<hhubjS)}(hhh]jX)}(h.format a buffer with a list of transport namesh]h.format a buffer with a list of transport names}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jRhj<hhhjUhMyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct svc_serv *serv`` pointer to an RPC service ``char *buf`` pointer to a buffer to be filled in ``const int buflen`` length of buffer to be filled in **Description** Fills in **buf** with a string containing a list of transport names, each name terminated with '\n'. Returns positive length of the filled-in string on success; otherwise a negative errno value is returned if an error occurs.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM}hjubj)}(hhh](j)}(h4``struct svc_serv *serv`` pointer to an RPC service h](j)}(h``struct svc_serv *serv``h]j)}(hjh]hstruct svc_serv *serv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMzhjubj)}(hhh]jX)}(hpointer to an RPC serviceh]hpointer to an RPC service}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(h2``char *buf`` pointer to a buffer to be filled in h](j)}(h ``char *buf``h]j)}(hjh]h char *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM{hj ubj)}(hhh]jX)}(h#pointer to a buffer to be filled inh]h#pointer to a buffer to be filled in}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hM{hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM{hjubj)}(h6``const int buflen`` length of buffer to be filled in h](j)}(h``const int buflen``h]j)}(hjLh]hconst int buflen}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM|hjFubj)}(hhh]jX)}(h length of buffer to be filled inh]h length of buffer to be filled in}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahM|hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM|hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM~hjubjX)}(hdFills in **buf** with a string containing a list of transport names, each name terminated with '\n'.h](h Fills in }(hjhhhNhNubj)}(h**buf**h]hbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX with a string containing a list of transport names, each name terminated with ‘n’.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chM}hjubjX)}(h|Returns positive length of the filled-in string on success; otherwise a negative errno value is returned if an error occurs.h]h|Returns positive length of the filled-in string on success; otherwise a negative errno value is returned if an error occurs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:62: ./net/sunrpc/svc_xprt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$xprt_register_transport (C function)c.xprt_register_transporthNtauh1hhjhhhNhNubh)}(hhh](h)}(h:int xprt_register_transport (struct xprt_class *transport)h]h)}(h9int xprt_register_transport(struct xprt_class *transport)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhK[ubj)}(hxprt_register_transporth]j%)}(hxprt_register_transporth]hxprt_register_transport}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhK[ubj)}(h(struct xprt_class *transport)h]j)}(hstruct xprt_class *transporth](h)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubh)}(hhh]j%)}(h xprt_classh]h xprt_class}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]j')}jjsbc.xprt_register_transportasbuh1hhj&ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj;)}(hj>h]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubj%)}(h transporth]h transport}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhK[ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhK[ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhK[hjhhubjS)}(hhh]jX)}(h#register a transport implementationh]h#register a transport implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK[hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhK[ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXl**Parameters** ``struct xprt_class *transport`` transport to register **Description** If a transport implementation is loaded as a kernel module, it can call this interface to make itself known to the RPC client. **Return** 0: transport successfully registered -EEXIST: transport already registered -EINVAL: transport module being unloadedh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK_hjubj)}(hhh]j)}(h7``struct xprt_class *transport`` transport to register h](j)}(h ``struct xprt_class *transport``h]j)}(hjh]hstruct xprt_class *transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK\hjubj)}(hhh]jX)}(htransport to registerh]htransport to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK^hjubjX)}(h~If a transport implementation is loaded as a kernel module, it can call this interface to make itself known to the RPC client.h]h~If a transport implementation is loaded as a kernel module, it can call this interface to make itself known to the RPC client.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK]hjubjX)}(h **Return**h]j)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chK`hjubjX)}(h0: transport successfully registered -EEXIST: transport already registered -EINVAL: transport module being unloadedh]h0: transport successfully registered -EEXIST: transport already registered -EINVAL: transport module being unloaded}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKahjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&xprt_unregister_transport (C function)c.xprt_unregister_transporthNtauh1hhjhhhNhNubh)}(hhh](h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h transporth]h transport}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h%unregister a transport implementationh]h%unregister a transport implementation}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjRhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct xprt_class *transport`` transport to unregister **Return** 0: transport successfully unregistered -ENOENT: transport never registeredh](jX)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjqubj)}(hhh]j)}(h9``struct xprt_class *transport`` transport to unregister h](j)}(h ``struct xprt_class *transport``h]j)}(hjh]hstruct xprt_class *transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjubj)}(hhh]jX)}(htransport to unregisterh]htransport to unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjqubjX)}(hX0: transport successfully unregistered -ENOENT: transport never registeredh]hX0: transport successfully unregistered -ENOENT: transport never registered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&xprt_find_transport_ident (C function)c.xprt_find_transport_identhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int xprt_find_transport_ident (const char *netid)h]h)}(h0int xprt_find_transport_ident(const char *netid)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj$hKubj)}(hxprt_find_transport_identh]j%)}(hxprt_find_transport_identh]hxprt_find_transport_ident}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj$hKubj)}(h(const char *netid)h]j)}(hconst char *netidh](h)}(hjh]hconst}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj)}(hcharh]hchar}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hnetidh]hnetid}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj$hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj$hKubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hKhj hhubjS)}(hhh]jX)}(h+convert a netid into a transport identifierh]h+convert a netid into a transport identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj$hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const char *netid`` transport to load **Return** > 0: transport identifier -ENOENT: transport module not availableh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjubj)}(hhh]j)}(h(``const char *netid`` transport to load h](j)}(h``const char *netid``h]j)}(hj h]hconst char *netid}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjubj)}(hhh]jX)}(htransport to loadh]htransport to load}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hj= h]hReturn}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj; ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjubjX)}(hM> 0: transport identifier -ENOENT: transport module not availableh]hM> 0: transport identifier -ENOENT: transport module not available}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_reserve_xprt (C function)c.xprt_reserve_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hDint xprt_reserve_xprt (struct rpc_xprt *xprt, struct rpc_task *task)h]h)}(hCint xprt_reserve_xprt(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ hhhj hMubj)}(hxprt_reserve_xprth]j%)}(hxprt_reserve_xprth]hxprt_reserve_xprt}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj~ hhhj hMubj)}(h.(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.xprt_reserve_xprtasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj !hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hxprth]hxprt}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hj1!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-!ubj)}(h h]h }(hj>!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-!ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hjO!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQ!modnameN classnameNjj!)}j$]j c.xprt_reserve_xprtasbuh1hhj-!ubj)}(h h]h }(hjm!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-!ubj;)}(hj>h]h*}(hj{!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-!ubj%)}(htaskh]htask}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj~ hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjz hhhj hMubah}(h]ju ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjw hhubjS)}(hhh]jX)}(h$serialize write access to transportsh]h$serialize write access to transports}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jRhjw hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!jxj!jyjzj{uh1hhhhjhNhNubj})}(hXA**Parameters** ``struct rpc_xprt *xprt`` pointer to the target transport ``struct rpc_task *task`` task that is requesting access to the transport **Description** This prevents mixing the payload of separate requests, and prevents transport connects from colliding with writes. No congestion control is provided.h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj!ubj)}(hhh](j)}(h:``struct rpc_xprt *xprt`` pointer to the target transport h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj!h]hstruct rpc_xprt *xprt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj!ubj)}(hhh]jX)}(hpointer to the target transporth]hpointer to the target transport}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hMhj "ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj!ubj)}(hJ``struct rpc_task *task`` task that is requesting access to the transport h](j)}(h``struct rpc_task *task``h]j)}(hj,"h]hstruct rpc_task *task}(hj."hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*"ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj&"ubj)}(hhh]jX)}(h/task that is requesting access to the transporth]h/task that is requesting access to the transport}(hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjA"hMhjB"ubah}(h]h ]h"]h$]h&]uh1jhj&"ubeh}(h]h ]h"]h$]h&]uh1jhjA"hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hjg"h]h Description}(hji"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje"ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj!ubjX)}(hThis prevents mixing the payload of separate requests, and prevents transport connects from colliding with writes. No congestion control is provided.h]hThis prevents mixing the payload of separate requests, and prevents transport connects from colliding with writes. No congestion control is provided.}(hj}"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_release_xprt (C function)c.xprt_release_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hEvoid xprt_release_xprt (struct rpc_xprt *xprt, struct rpc_task *task)h]h)}(hDvoid xprt_release_xprt(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhj"hMubj)}(hxprt_release_xprth]j%)}(hxprt_release_xprth]hxprt_release_xprt}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"hhhj"hMubj)}(h.(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj #modnameN classnameNjj!)}j$]j')}jj"sbc.xprt_release_xprtasbuh1hhj"ubj)}(h h]h }(hj'#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hj5#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hxprth]hxprt}(hjB#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hj[#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjW#ubj)}(h h]h }(hjh#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW#ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hjy#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{#modnameN classnameNjj!)}j$]j##c.xprt_release_xprtasbuh1hhjW#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW#ubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjW#ubj%)}(htaskh]htask}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj"hhhj"hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj"hMubah}(h]j"ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"hMhj"hhubjS)}(hhh]jX)}(h'allow other requests to use a transporth]h'allow other requests to use a transport}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jRhj"hhhj"hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#jxj#jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` transport with other tasks potentially waiting ``struct rpc_task *task`` task that is releasing access to the transport **Description** Note that "task" can be NULL. No congestion control is provided.h](jX)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj#ubj)}(hhh](j)}(hI``struct rpc_xprt *xprt`` transport with other tasks potentially waiting h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj$h]hstruct rpc_xprt *xprt}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj$ubj)}(hhh]jX)}(h.transport with other tasks potentially waitingh]h.transport with other tasks potentially waiting}(hj6$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2$hMhj3$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj2$hMhj$ubj)}(hI``struct rpc_task *task`` task that is releasing access to the transport h](j)}(h``struct rpc_task *task``h]j)}(hjV$h]hstruct rpc_task *task}(hjX$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT$ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjP$ubj)}(hhh]jX)}(h.task that is releasing access to the transporth]h.task that is releasing access to the transport}(hjo$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjk$hMhjl$ubah}(h]h ]h"]h$]h&]uh1jhjP$ubeh}(h]h ]h"]h$]h&]uh1jhjk$hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjX)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj#ubjX)}(hANote that "task" can be NULL. No congestion control is provided.h]hENote that “task” can be NULL. No congestion control is provided.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#xprt_release_xprt_cong (C function)c.xprt_release_xprt_conghNtauh1hhjhhhNhNubh)}(hhh](h)}(hJvoid xprt_release_xprt_cong (struct rpc_xprt *xprt, struct rpc_task *task)h]h)}(hIvoid xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$hhhj$hMubj)}(hxprt_release_xprt_congh]j%)}(hxprt_release_xprt_congh]hxprt_release_xprt_cong}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj$hhhj$hMubj)}(h.(struct rpc_xprt *xprt, struct rpc_task *task)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%ubj)}(h h]h }(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj1%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3%modnameN classnameNjj!)}j$]j')}jj$sbc.xprt_release_xprt_congasbuh1hhj%ubj)}(h h]h }(hjQ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj;)}(hj>h]h*}(hj_%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%ubj%)}(hxprth]hxprt}(hjl%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj %ubj)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]jM%c.xprt_release_xprt_congasbuh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%ubj%)}(htaskh]htask}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj %ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj$hhhj$hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$hhhj$hMubah}(h]j$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hMhj$hhubjS)}(hhh]jX)}(h'allow other requests to use a transporth]h'allow other requests to use a transport}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jRhj$hhhj$hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjhNhNubj})}(hX3**Parameters** ``struct rpc_xprt *xprt`` transport with other tasks potentially waiting ``struct rpc_task *task`` task that is releasing access to the transport **Description** Note that "task" can be NULL. Another task is awoken to use the transport if the transport's congestion window allows it.h](jX)}(h**Parameters**h]j)}(hj(&h]h Parameters}(hj*&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&&ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj"&ubj)}(hhh](j)}(hI``struct rpc_xprt *xprt`` transport with other tasks potentially waiting h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjG&h]hstruct rpc_xprt *xprt}(hjI&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjA&ubj)}(hhh]jX)}(h.transport with other tasks potentially waitingh]h.transport with other tasks potentially waiting}(hj`&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\&hMhj]&ubah}(h]h ]h"]h$]h&]uh1jhjA&ubeh}(h]h ]h"]h$]h&]uh1jhj\&hMhj>&ubj)}(hI``struct rpc_task *task`` task that is releasing access to the transport h](j)}(h``struct rpc_task *task``h]j)}(hj&h]hstruct rpc_task *task}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~&ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjz&ubj)}(hhh]jX)}(h.task that is releasing access to the transporth]h.task that is releasing access to the transport}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjz&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj>&ubeh}(h]h ]h"]h$]h&]uh1jhj"&ubjX)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj"&ubjX)}(hzNote that "task" can be NULL. Another task is awoken to use the transport if the transport's congestion window allows it.h]hNote that “task” can be NULL. Another task is awoken to use the transport if the transport’s congestion window allows it.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj"&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xprt_request_get_cong (C function)c.xprt_request_get_conghNtauh1hhjhhhNhNubh)}(hhh](h)}(hHbool xprt_request_get_cong (struct rpc_xprt *xprt, struct rpc_rqst *req)h]h)}(hGbool xprt_request_get_cong(struct rpc_xprt *xprt, struct rpc_rqst *req)h](j)}(hjTh]hbool}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj 'hMubj)}(hxprt_request_get_congh]j%)}(hxprt_request_get_congh]hxprt_request_get_cong}(hj 'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj 'hMubj)}(h-(struct rpc_xprt *xprt, struct rpc_rqst *req)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj<'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8'ubj)}(h h]h }(hjI'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8'ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjZ'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\'modnameN classnameNjj!)}j$]j')}jj"'sbc.xprt_request_get_congasbuh1hhj8'ubj)}(h h]h }(hjz'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8'ubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8'ubj%)}(hxprth]hxprt}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4'ubj)}(hstruct rpc_rqst *reqh](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]jv'c.xprt_request_get_congasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hreqh]hreq}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4'ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj 'hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&hhhj 'hMubah}(h]j&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj 'hMhj&hhubjS)}(hhh]jX)}(h"Request congestion control creditsh]h"Request congestion control credits}(hj/(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj,(hhubah}(h]h ]h"]h$]h&]uh1jRhj&hhhj 'hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjG(jxjG(jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` pointer to transport ``struct rpc_rqst *req`` pointer to RPC request **Description** Useful for transports that require congestion control.h](jX)}(h**Parameters**h]j)}(hjQ(h]h Parameters}(hjS(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO(ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjK(ubj)}(hhh](j)}(h/``struct rpc_xprt *xprt`` pointer to transport h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjp(h]hstruct rpc_xprt *xprt}(hjr(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn(ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjj(ubj)}(hhh]jX)}(hpointer to transporth]hpointer to transport}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhjj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjg(ubj)}(h0``struct rpc_rqst *req`` pointer to RPC request h](j)}(h``struct rpc_rqst *req``h]j)}(hj(h]hstruct rpc_rqst *req}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj(ubj)}(hhh]jX)}(hpointer to RPC requesth]hpointer to RPC request}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjg(ubeh}(h]h ]h"]h$]h&]uh1jhjK(ubjX)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjK(ubjX)}(h6Useful for transports that require congestion control.h]h6Useful for transports that require congestion control.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjK(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#xprt_release_rqst_cong (C function)c.xprt_release_rqst_conghNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void xprt_release_rqst_cong (struct rpc_task *task)h]h)}(h2void xprt_release_rqst_cong(struct rpc_task *task)h](j)}(hvoidh]hvoid}(hj))hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%)hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj8)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%)hhhj7)hMubj)}(hxprt_release_rqst_congh]j%)}(hxprt_release_rqst_congh]hxprt_release_rqst_cong}(hjJ)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF)ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj%)hhhj7)hMubj)}(h(struct rpc_task *task)h]j)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hjf)hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjb)ubj)}(h h]h }(hjs)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjb)ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj)modnameN classnameNjj!)}j$]j')}jjL)sbc.xprt_release_rqst_congasbuh1hhjb)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjb)ubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjb)ubj%)}(htaskh]htask}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjb)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^)ubah}(h]h ]h"]h$]h&]j<j=uh1jhj%)hhhj7)hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj!)hhhj7)hMubah}(h]j)ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj7)hMhj)hhubjS)}(hhh]jX)}(h%housekeeping when request is completeh]h%housekeeping when request is complete}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jRhj)hhhj7)hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj*jxj*jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_task *task`` RPC request that recently completed **Description** Useful for transports that require congestion control.h](jX)}(h**Parameters**h]j)}(hj *h]h Parameters}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj*ubj)}(hhh]j)}(h>``struct rpc_task *task`` RPC request that recently completed h](j)}(h``struct rpc_task *task``h]j)}(hj**h]hstruct rpc_task *task}(hj,*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(*ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj$*ubj)}(hhh]jX)}(h#RPC request that recently completedh]h#RPC request that recently completed}(hjC*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?*hMhj@*ubah}(h]h ]h"]h$]h&]uh1jhj$*ubeh}(h]h ]h"]h$]h&]uh1jhj?*hMhj!*ubah}(h]h ]h"]h$]h&]uh1jhj*ubjX)}(h**Description**h]j)}(hje*h]h Description}(hjg*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc*ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj*ubjX)}(h6Useful for transports that require congestion control.h]h6Useful for transports that require congestion control.}(hj{*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_adjust_cwnd (C function)c.xprt_adjust_cwndhNtauh1hhjhhhNhNubh)}(hhh](h)}(hPvoid xprt_adjust_cwnd (struct rpc_xprt *xprt, struct rpc_task *task, int result)h]h)}(hOvoid xprt_adjust_cwnd(struct rpc_xprt *xprt, struct rpc_task *task, int result)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM#ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj*hM#ubj)}(hxprt_adjust_cwndh]j%)}(hxprt_adjust_cwndh]hxprt_adjust_cwnd}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj*hM#ubj)}(h:(struct rpc_xprt *xprt, struct rpc_task *task, int result)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]j')}jj*sbc.xprt_adjust_cwndasbuh1hhj*ubj)}(h h]h }(hj%+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hj3+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hxprth]hxprt}(hj@+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubj)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hjY+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjU+ubj)}(h h]h }(hjf+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjU+ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hjw+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjt+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjy+modnameN classnameNjj!)}j$]j!+c.xprt_adjust_cwndasbuh1hhjU+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjU+ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU+ubj%)}(htaskh]htask}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjU+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubj)}(h int resulth](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj%)}(hresulth]hresult}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj*hM#ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*hhhj*hM#ubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hM#hj*hhubjS)}(hhh]jX)}(h"adjust transport congestion windowh]h"adjust transport congestion window}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM#hj ,hhubah}(h]h ]h"]h$]h&]uh1jRhj*hhhj*hM#ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj',jxj',jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_xprt *xprt`` pointer to xprt ``struct rpc_task *task`` recently completed RPC request used to adjust window ``int result`` result code of completed RPC request **Description** The transport code maintains an estimate on the maximum number of out- standing RPC requests, using a smoothed version of the congestion avoidance implemented in 44BSD. This is basically the Van Jacobson congestion algorithm: If a retransmit occurs, the congestion window is halved; otherwise, it is incremented by 1/cwnd when - a reply is received and - a full number of requests are outstanding and - the congestion window hasn't been updated recently.h](jX)}(h**Parameters**h]j)}(hj1,h]h Parameters}(hj3,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/,ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM'hj+,ubj)}(hhh](j)}(h*``struct rpc_xprt *xprt`` pointer to xprt h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjP,h]hstruct rpc_xprt *xprt}(hjR,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN,ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM$hjJ,ubj)}(hhh]jX)}(hpointer to xprth]hpointer to xprt}(hji,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhje,hM$hjf,ubah}(h]h ]h"]h$]h&]uh1jhjJ,ubeh}(h]h ]h"]h$]h&]uh1jhje,hM$hjG,ubj)}(hO``struct rpc_task *task`` recently completed RPC request used to adjust window h](j)}(h``struct rpc_task *task``h]j)}(hj,h]hstruct rpc_task *task}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM%hj,ubj)}(hhh]jX)}(h4recently completed RPC request used to adjust windowh]h4recently completed RPC request used to adjust window}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hM%hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM%hjG,ubj)}(h4``int result`` result code of completed RPC request h](j)}(h``int result``h]j)}(hj,h]h int result}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM&hj,ubj)}(hhh]jX)}(h$result code of completed RPC requesth]h$result code of completed RPC request}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hM&hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM&hjG,ubeh}(h]h ]h"]h$]h&]uh1jhj+,ubjX)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM(hj+,ubjX)}(hXFThe transport code maintains an estimate on the maximum number of out- standing RPC requests, using a smoothed version of the congestion avoidance implemented in 44BSD. This is basically the Van Jacobson congestion algorithm: If a retransmit occurs, the congestion window is halved; otherwise, it is incremented by 1/cwnd whenh]hXFThe transport code maintains an estimate on the maximum number of out- standing RPC requests, using a smoothed version of the congestion avoidance implemented in 44BSD. This is basically the Van Jacobson congestion algorithm: If a retransmit occurs, the congestion window is halved; otherwise, it is incremented by 1/cwnd when}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM'hj+,ubj )}(h- a reply is received and - a full number of requests are outstanding and - the congestion window hasn't been updated recently.h]j4H)}(hhh](j9H)}(ha reply is received andh]jX)}(hj+-h]ha reply is received and}(hj--hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM-hj)-ubah}(h]h ]h"]h$]h&]uh1j8Hhj&-ubj9H)}(h-a full number of requests are outstanding andh]jX)}(hjC-h]h-a full number of requests are outstanding and}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM.hjA-ubah}(h]h ]h"]h$]h&]uh1j8Hhj&-ubj9H)}(h3the congestion window hasn't been updated recently.h]jX)}(hj[-h]h5the congestion window hasn’t been updated recently.}(hj]-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM/hjY-ubah}(h]h ]h"]h$]h&]uh1j8Hhj&-ubeh}(h]h ]h"]h$]h&]jI-uh1j3Hhj:-hM-hj"-ubah}(h]h ]h"]h$]h&]uh1j hj:-hM-hj+,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$xprt_wake_pending_tasks (C function)c.xprt_wake_pending_taskshNtauh1hhjhhhNhNubh)}(hhh](h)}(h@void xprt_wake_pending_tasks (struct rpc_xprt *xprt, int status)h]h)}(h?void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMKubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj-hMKubj)}(hxprt_wake_pending_tasksh]j%)}(hxprt_wake_pending_tasksh]hxprt_wake_pending_tasks}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-hhhj-hMKubj)}(h#(struct rpc_xprt *xprt, int status)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jj-sbc.xprt_wake_pending_tasksasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj'.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hxprth]hxprt}(hj4.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubj)}(h int statush](j)}(hinth]hint}(hjM.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI.ubj)}(h h]h }(hj[.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI.ubj%)}(hstatush]hstatus}(hji.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj-hhhj-hMKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj-hhhj-hMKubah}(h]j-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj-hMKhj-hhubjS)}(hhh]jX)}(h-wake all tasks on a transport's pending queueh]h/wake all tasks on a transport’s pending queue}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMKhj.hhubah}(h]h ]h"]h$]h&]uh1jRhj-hhhj-hMKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` transport with waiting tasks ``int status`` result code to plant in each task before waking ith](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMOhj.ubj)}(hhh](j)}(h7``struct rpc_xprt *xprt`` transport with waiting tasks h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj.h]hstruct rpc_xprt *xprt}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMLhj.ubj)}(hhh]jX)}(htransport with waiting tasksh]htransport with waiting tasks}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMLhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMLhj.ubj)}(hA``int status`` result code to plant in each task before waking ith](j)}(h``int status``h]j)}(hj /h]h int status}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj /ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMNhj/ubj)}(hhh]jX)}(h2result code to plant in each task before waking ith]h2result code to plant in each task before waking it}(hj&/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMMhj#/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj"/hMNhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'xprt_wait_for_buffer_space (C function)c.xprt_wait_for_buffer_spacehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7void xprt_wait_for_buffer_space (struct rpc_xprt *xprt)h]h)}(h6void xprt_wait_for_buffer_space(struct rpc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjg/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc/hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMZubj)}(h h]h }(hjv/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjc/hhhju/hMZubj)}(hxprt_wait_for_buffer_spaceh]j%)}(hxprt_wait_for_buffer_spaceh]hxprt_wait_for_buffer_space}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjc/hhhju/hMZubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jj/sbc.xprt_wait_for_buffer_spaceasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hxprth]hxprt}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubah}(h]h ]h"]h$]h&]j<j=uh1jhjc/hhhju/hMZubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj_/hhhju/hMZubah}(h]jZ/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhju/hMZhj\/hhubjS)}(hhh]jX)}(h)wait for transport output buffer to clearh]h)wait for transport output buffer to clear}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMZhj$0hhubah}(h]h ]h"]h$]h&]uh1jRhj\/hhhju/hMZubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?0jxj?0jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` transport **Description** Note that we only set the timer for the case of RPC_IS_SOFT(), since we don't in general want to force a socket disconnection due to an incomplete RPC call transmission.h](jX)}(h**Parameters**h]j)}(hjI0h]h Parameters}(hjK0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG0ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM^hjC0ubj)}(hhh]j)}(h$``struct rpc_xprt *xprt`` transport h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjh0h]hstruct rpc_xprt *xprt}(hjj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf0ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM[hjb0ubj)}(hhh]jX)}(h transporth]h transport}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}0hM[hj~0ubah}(h]h ]h"]h$]h&]uh1jhjb0ubeh}(h]h ]h"]h$]h&]uh1jhj}0hM[hj_0ubah}(h]h ]h"]h$]h&]uh1jhjC0ubjX)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM]hjC0ubjX)}(hNote that we only set the timer for the case of RPC_IS_SOFT(), since we don't in general want to force a socket disconnection due to an incomplete RPC call transmission.h]hNote that we only set the timer for the case of RPC_IS_SOFT(), since we don’t in general want to force a socket disconnection due to an incomplete RPC call transmission.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM\hjC0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_write_space (C function)c.xprt_write_spacehNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool xprt_write_space (struct rpc_xprt *xprt)h]h)}(h,bool xprt_write_space(struct rpc_xprt *xprt)h](j)}(hjTh]hbool}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMtubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMtubj)}(hxprt_write_spaceh]j%)}(hxprt_write_spaceh]hxprt_write_space}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hMtubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj$1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj 1ubj)}(h h]h }(hj11hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 1ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjB1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjD1modnameN classnameNjj!)}j$]j')}jj 1sbc.xprt_write_spaceasbuh1hhj 1ubj)}(h h]h }(hjb1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 1ubj;)}(hj>h]h*}(hjp1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj 1ubj%)}(hxprth]hxprt}(hj}1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubah}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hMtubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hMtubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMthj0hhubjS)}(hhh]jX)}(h7wake the task waiting for transport output buffer spaceh]h7wake the task waiting for transport output buffer space}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMthj1hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hMtubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` transport with waiting tasks **Description** Can be called in a soft IRQ context, so xprt_write_space never sleeps.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMxhj1ubj)}(hhh]j)}(h7``struct rpc_xprt *xprt`` transport with waiting tasks h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj1h]hstruct rpc_xprt *xprt}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMuhj1ubj)}(hhh]jX)}(htransport with waiting tasksh]htransport with waiting tasks}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hMuhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMuhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubjX)}(h**Description**h]j)}(hj#2h]h Description}(hj%2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!2ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMwhj1ubjX)}(hFCan be called in a soft IRQ context, so xprt_write_space never sleeps.h]hFCan be called in a soft IRQ context, so xprt_write_space never sleeps.}(hj92hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMvhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!xprt_disconnect_done (C function)c.xprt_disconnect_donehNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void xprt_disconnect_done (struct rpc_xprt *xprt)h]h)}(h0void xprt_disconnect_done(struct rpc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjh2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd2hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hjw2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjd2hhhjv2hMubj)}(hxprt_disconnect_doneh]j%)}(hxprt_disconnect_doneh]hxprt_disconnect_done}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjd2hhhjv2hMubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j')}jj2sbc.xprt_disconnect_doneasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hxprth]hxprt}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubah}(h]h ]h"]h$]h&]j<j=uh1jhjd2hhhjv2hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj`2hhhjv2hMubah}(h]j[2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjv2hMhj]2hhubjS)}(hhh]jX)}(h mark a transport as disconnectedh]h mark a transport as disconnected}(hj(3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj%3hhubah}(h]h ]h"]h$]h&]uh1jRhj]2hhhjv2hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@3jxj@3jyjzj{uh1hhhhjhNhNubj})}(hL**Parameters** ``struct rpc_xprt *xprt`` transport to flag for disconnecth](jX)}(h**Parameters**h]j)}(hjJ3h]h Parameters}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH3ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjD3ubj)}(hhh]j)}(h:``struct rpc_xprt *xprt`` transport to flag for disconnecth](j)}(h``struct rpc_xprt *xprt``h]j)}(hji3h]hstruct rpc_xprt *xprt}(hjk3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg3ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjc3ubj)}(hhh]jX)}(h transport to flag for disconnecth]h transport to flag for disconnect}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhjc3ubeh}(h]h ]h"]h$]h&]uh1jhj~3hMhj`3ubah}(h]h ]h"]h$]h&]uh1jhjD3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"xprt_force_disconnect (C function)c.xprt_force_disconnecthNtauh1hhjhhhNhNubh)}(hhh](h)}(h2void xprt_force_disconnect (struct rpc_xprt *xprt)h]h)}(h1void xprt_force_disconnect(struct rpc_xprt *xprt)h](j)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhj3hMubj)}(hxprt_force_disconnecth]j%)}(hxprt_force_disconnecth]hxprt_force_disconnect}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhj3hMubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj 4modnameN classnameNjj!)}j$]j')}jj3sbc.xprt_force_disconnectasbuh1hhj3ubj)}(h h]h }(hj>4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hjL4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hxprth]hxprt}(hjY4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubah}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhj3hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3hhhj3hMubah}(h]j3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj3hMhj3hhubjS)}(hhh]jX)}(hforce a transport to disconnecth]hforce a transport to disconnect}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jRhj3hhhj3hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhjhNhNubj})}(hC**Parameters** ``struct rpc_xprt *xprt`` transport to disconnecth](jX)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj4ubj)}(hhh]j)}(h1``struct rpc_xprt *xprt`` transport to disconnecth](j)}(h``struct rpc_xprt *xprt``h]j)}(hj4h]hstruct rpc_xprt *xprt}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj4ubj)}(hhh]jX)}(htransport to disconnecth]htransport to disconnect}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!xprt_reconnect_delay (C function)c.xprt_reconnect_delayhNtauh1hhjhhhNhNubh)}(hhh](h)}(h@unsigned long xprt_reconnect_delay (const struct rpc_xprt *xprt)h]h)}(h?unsigned long xprt_reconnect_delay(const struct rpc_xprt *xprt)h](j)}(hunsignedh]hunsigned}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj-5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj,5hMubj)}(hlongh]hlong}(hj;5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj,5hMubj)}(h h]h }(hjI5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj,5hMubj)}(hxprt_reconnect_delayh]j%)}(hxprt_reconnect_delayh]hxprt_reconnect_delay}(hj[5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhj,5hMubj)}(h(const struct rpc_xprt *xprt)h]j)}(hconst struct rpc_xprt *xprth](h)}(hjh]hconst}(hjw5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjs5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs5ubh)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjs5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs5ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jj]5sbc.xprt_reconnect_delayasbuh1hhjs5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs5ubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjs5ubj%)}(hxprth]hxprt}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo5ubah}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhj,5hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhj,5hMubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,5hMhj5hhubjS)}(hhh]jX)}(h,compute the wait before scheduling a connecth]h,compute the wait before scheduling a connect}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhj,5hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj-6jxj-6jyjzj{uh1hhhhjhNhNubj})}(hD**Parameters** ``const struct rpc_xprt *xprt`` transport instanceh](jX)}(h**Parameters**h]j)}(hj76h]h Parameters}(hj96hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj56ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj16ubj)}(hhh]j)}(h2``const struct rpc_xprt *xprt`` transport instanceh](j)}(h``const struct rpc_xprt *xprt``h]j)}(hjV6h]hconst struct rpc_xprt *xprt}(hjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT6ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjP6ubj)}(hhh]jX)}(htransport instanceh]htransport instance}(hjo6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjl6ubah}(h]h ]h"]h$]h&]uh1jhjP6ubeh}(h]h ]h"]h$]h&]uh1jhjk6hMhjM6ubah}(h]h ]h"]h$]h&]uh1jhj16ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#xprt_reconnect_backoff (C function)c.xprt_reconnect_backoffhNtauh1hhjhhhNhNubh)}(hhh](h)}(hJvoid xprt_reconnect_backoff (struct rpc_xprt *xprt, unsigned long init_to)h]h)}(hIvoid xprt_reconnect_backoff(struct rpc_xprt *xprt, unsigned long init_to)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhj6hMubj)}(hxprt_reconnect_backoffh]j%)}(hxprt_reconnect_backoffh]hxprt_reconnect_backoff}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhj6hMubj)}(h.(struct rpc_xprt *xprt, unsigned long init_to)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj 7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj 7modnameN classnameNjj!)}j$]j')}jj6sbc.xprt_reconnect_backoffasbuh1hhj6ubj)}(h h]h }(hj+7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj97hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hxprth]hxprt}(hjF7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubj)}(hunsigned long init_toh](j)}(hunsignedh]hunsigned}(hj_7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[7ubj)}(h h]h }(hjm7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[7ubj)}(hlongh]hlong}(hj{7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[7ubj%)}(hinit_toh]hinit_to}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhj6hMubah}(h]j6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hMhj6hhubjS)}(hhh]jX)}(h$compute the new re-establish timeouth]h$compute the new re-establish timeout}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhj6hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj7jxj7jyjzj{uh1hhhhjhNhNubj})}(hw**Parameters** ``struct rpc_xprt *xprt`` transport instance ``unsigned long init_to`` initial reestablish timeouth](jX)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj7ubj)}(hhh](j)}(h-``struct rpc_xprt *xprt`` transport instance h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj8h]hstruct rpc_xprt *xprt}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj7ubj)}(hhh]jX)}(htransport instanceh]htransport instance}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(h5``unsigned long init_to`` initial reestablish timeouth](j)}(h``unsigned long init_to``h]j)}(hj;8h]hunsigned long init_to}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj98ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj58ubj)}(hhh]jX)}(hinitial reestablish timeouth]hinitial reestablish timeout}(hjT8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjQ8ubah}(h]h ]h"]h$]h&]uh1jhj58ubeh}(h]h ]h"]h$]h&]uh1jhjP8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_lookup_rqst (C function)c.xprt_lookup_rqsthNtauh1hhjhhhNhNubh)}(hhh](h)}(hFstruct rpc_rqst * xprt_lookup_rqst (struct rpc_xprt *xprt, __be32 xid)h]h)}(hDstruct rpc_rqst *xprt_lookup_rqst(struct rpc_xprt *xprt, __be32 xid)h](h)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM$ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hM$ubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj8modnameN classnameNjj!)}j$]j')}jxprt_lookup_rqstsbc.xprt_lookup_rqstasbuh1hhj8hhhj8hM$ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hM$ubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8hhhj8hM$ubj)}(hxprt_lookup_rqsth]j%)}(hj8h]hxprt_lookup_rqst}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj8hhhj8hM$ubj)}(h#(struct rpc_xprt *xprt, __be32 xid)h](j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj 9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 9ubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj-9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/9modnameN classnameNjj!)}j$]j8c.xprt_lookup_rqstasbuh1hhj 9ubj)}(h h]h }(hjK9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 9ubj;)}(hj>h]h*}(hjY9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj 9ubj%)}(hxprth]hxprt}(hjf9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubj)}(h __be32 xidh](h)}(hhh]j%)}(h__be32h]h__be32}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9modnameN classnameNjj!)}j$]j8c.xprt_lookup_rqstasbuh1hhj{9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{9ubj%)}(hxidh]hxid}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj8hhhj8hM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj8hhhj8hM$ubah}(h]j8ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hM$hj8hhubjS)}(hhh]jX)}(h+find an RPC request corresponding to an XIDh]h+find an RPC request corresponding to an XID}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM$hj9hhubah}(h]h ]h"]h$]h&]uh1jRhj8hhhj8hM$ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9jxj9jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_xprt *xprt`` transport on which the original request was transmitted ``__be32 xid`` RPC XID of incoming reply **Description** Caller holds xprt->queue_lock.h](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM(hj9ubj)}(hhh](j)}(hR``struct rpc_xprt *xprt`` transport on which the original request was transmitted h](j)}(h``struct rpc_xprt *xprt``h]j)}(hj:h]hstruct rpc_xprt *xprt}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM%hj:ubj)}(hhh]jX)}(h7transport on which the original request was transmittedh]h7transport on which the original request was transmitted}(hj2:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.:hM%hj/:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj.:hM%hj:ubj)}(h)``__be32 xid`` RPC XID of incoming reply h](j)}(h``__be32 xid``h]j)}(hjR:h]h __be32 xid}(hjT:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP:ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM&hjL:ubj)}(hhh]jX)}(hRPC XID of incoming replyh]hRPC XID of incoming reply}(hjk:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjg:hM&hjh:ubah}(h]h ]h"]h$]h&]uh1jhjL:ubeh}(h]h ]h"]h$]h&]uh1jhjg:hM&hj:ubeh}(h]h ]h"]h$]h&]uh1jhj9ubjX)}(h**Description**h]j)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM(hj9ubjX)}(hCaller holds xprt->queue_lock.h]hCaller holds xprt->queue_lock.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM'hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_pin_rqst (C function)c.xprt_pin_rqsthNtauh1hhjhhhNhNubh)}(hhh](h)}(h)void xprt_pin_rqst (struct rpc_rqst *req)h]h)}(h(void xprt_pin_rqst(struct rpc_rqst *req)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMDubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhj:hMDubj)}(h xprt_pin_rqsth]j%)}(h xprt_pin_rqsth]h xprt_pin_rqst}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhj:hMDubj)}(h(struct rpc_rqst *req)h]j)}(hstruct rpc_rqst *reqh](h)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ;ubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hj-;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*;ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/;modnameN classnameNjj!)}j$]j')}jj:sbc.xprt_pin_rqstasbuh1hhj ;ubj)}(h h]h }(hjM;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ;ubj;)}(hj>h]h*}(hj[;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ;ubj%)}(hreqh]hreq}(hjh;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubah}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhj:hMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj:hhhj:hMDubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hMDhj:hhubjS)}(hhh]jX)}(h+Pin a request on the transport receive listh]h+Pin a request on the transport receive list}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMDhj;hhubah}(h]h ]h"]h$]h&]uh1jRhj:hhhj:hMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;jxj;jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_rqst *req`` Request to pin **Description** Caller must ensure this is atomic with the call to xprt_lookup_rqst() so should be holding xprt->queue_lock.h](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMHhj;ubj)}(hhh]j)}(h(``struct rpc_rqst *req`` Request to pin h](j)}(h``struct rpc_rqst *req``h]j)}(hj;h]hstruct rpc_rqst *req}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMEhj;ubj)}(hhh]jX)}(hRequest to pinh]hRequest to pin}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMEhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMEhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubjX)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj <ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMGhj;ubjX)}(hlCaller must ensure this is atomic with the call to xprt_lookup_rqst() so should be holding xprt->queue_lock.h]hlCaller must ensure this is atomic with the call to xprt_lookup_rqst() so should be holding xprt->queue_lock.}(hj$<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMFhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_unpin_rqst (C function)c.xprt_unpin_rqsthNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void xprt_unpin_rqst (struct rpc_rqst *req)h]h)}(h*void xprt_unpin_rqst(struct rpc_rqst *req)h](j)}(hvoidh]hvoid}(hjS<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO<hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMQubj)}(h h]h }(hjb<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjO<hhhja<hMQubj)}(hxprt_unpin_rqsth]j%)}(hxprt_unpin_rqsth]hxprt_unpin_rqst}(hjt<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjp<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjO<hhhja<hMQubj)}(h(struct rpc_rqst *req)h]j)}(hstruct rpc_rqst *reqh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jjv<sbc.xprt_unpin_rqstasbuh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hreqh]hreq}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj<ubah}(h]h ]h"]h$]h&]j<j=uh1jhjO<hhhja<hMQubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjK<hhhja<hMQubah}(h]jF<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhja<hMQhjH<hhubjS)}(hhh]jX)}(h-Unpin a request on the transport receive listh]h-Unpin a request on the transport receive list}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMQhj=hhubah}(h]h ]h"]h$]h&]uh1jRhjH<hhhja<hMQubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj+=jxj+=jyjzj{uh1hhhhjhNhNubj})}(hv**Parameters** ``struct rpc_rqst *req`` Request to pin **Description** Caller should be holding xprt->queue_lock.h](jX)}(h**Parameters**h]j)}(hj5=h]h Parameters}(hj7=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3=ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMUhj/=ubj)}(hhh]j)}(h(``struct rpc_rqst *req`` Request to pin h](j)}(h``struct rpc_rqst *req``h]j)}(hjT=h]hstruct rpc_rqst *req}(hjV=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR=ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMRhjN=ubj)}(hhh]jX)}(hRequest to pinh]hRequest to pin}(hjm=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhji=hMRhjj=ubah}(h]h ]h"]h$]h&]uh1jhjN=ubeh}(h]h ]h"]h$]h&]uh1jhji=hMRhjK=ubah}(h]h ]h"]h$]h&]uh1jhj/=ubjX)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMThj/=ubjX)}(h*Caller should be holding xprt->queue_lock.h]h*Caller should be holding xprt->queue_lock.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMShj/=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_update_rtt (C function)c.xprt_update_rtthNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void xprt_update_rtt (struct rpc_task *task)h]h)}(h+void xprt_update_rtt(struct rpc_task *task)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=hhhj=hMubj)}(hxprt_update_rtth]j%)}(hxprt_update_rtth]hxprt_update_rtt}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj=hhhj=hMubj)}(h(struct rpc_task *task)h]j)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj >ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj >ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj/>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1>modnameN classnameNjj!)}j$]j')}jj=sbc.xprt_update_rttasbuh1hhj >ubj)}(h h]h }(hjO>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj >ubj;)}(hj>h]h*}(hj]>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj >ubj%)}(htaskh]htask}(hjj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj >ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj >ubah}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhj=hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj=hhhj=hMubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hMhj=hhubjS)}(hhh]jX)}(hUpdate RPC RTT statisticsh]hUpdate RPC RTT statistics}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhj=hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_task *task`` RPC request that recently completed **Description** Caller holds xprt->queue_lock.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj>ubj)}(hhh]j)}(h>``struct rpc_task *task`` RPC request that recently completed h](j)}(h``struct rpc_task *task``h]j)}(hj>h]hstruct rpc_task *task}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj>ubj)}(hhh]jX)}(h#RPC request that recently completedh]h#RPC request that recently completed}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubjX)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj>ubjX)}(hCaller holds xprt->queue_lock.h]hCaller holds xprt->queue_lock.}(hj&?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_complete_rqst (C function)c.xprt_complete_rqsthNtauh1hhjhhhNhNubh)}(hhh](h)}(h;void xprt_complete_rqst (struct rpc_task *task, int copied)h]h)}(h:void xprt_complete_rqst(struct rpc_task *task, int copied)h](j)}(hvoidh]hvoid}(hjU?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ?hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMubj)}(h h]h }(hjd?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQ?hhhjc?hMubj)}(hxprt_complete_rqsth]j%)}(hxprt_complete_rqsth]hxprt_complete_rqst}(hjv?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjr?ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjQ?hhhjc?hMubj)}(h#(struct rpc_task *task, int copied)h](j)}(hstruct rpc_task *taskh](h)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j')}jjx?sbc.xprt_complete_rqstasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(htaskh]htask}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(h int copiedh](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj%)}(hcopiedh]hcopied}(hj @hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjQ?hhhjc?hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjM?hhhjc?hMubah}(h]jH?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjc?hMhjJ?hhubjS)}(hhh]jX)}(h(called when reply processing is completeh]h(called when reply processing is complete}(hjJ@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjG@hhubah}(h]h ]h"]h$]h&]uh1jRhjJ?hhhjc?hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjb@jxjb@jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_task *task`` RPC request that recently completed ``int copied`` actual number of bytes received from the transport **Description** Caller holds xprt->queue_lock.h](jX)}(h**Parameters**h]j)}(hjl@h]h Parameters}(hjn@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj@ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjf@ubj)}(hhh](j)}(h>``struct rpc_task *task`` RPC request that recently completed h](j)}(h``struct rpc_task *task``h]j)}(hj@h]hstruct rpc_task *task}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj@ubj)}(hhh]jX)}(h#RPC request that recently completedh]h#RPC request that recently completed}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj@ubj)}(hB``int copied`` actual number of bytes received from the transport h](j)}(h``int copied``h]j)}(hj@h]h int copied}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhj@ubj)}(hhh]jX)}(h2actual number of bytes received from the transporth]h2actual number of bytes received from the transport}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj@ubeh}(h]h ]h"]h$]h&]uh1jhjf@ubjX)}(h**Description**h]j)}(hj@h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjf@ubjX)}(hCaller holds xprt->queue_lock.h]hCaller holds xprt->queue_lock.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjf@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,xprt_wait_for_reply_request_def (C function)!c.xprt_wait_for_reply_request_defhNtauh1hhjhhhNhNubh)}(hhh](h)}(hh]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}Aubj%)}(htaskh]htask}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}Aubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyAubah}(h]h ]h"]h$]h&]j<j=uh1jhj@AhhhjRAhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjh]h*}(hjNChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(htaskh]htask}(hj[ChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubah}(h]h ]h"]h$]h&]j<j=uh1jhjBhhhjBhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBhhhjBhMubah}(h]jBah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjBhMhjBhhubjS)}(hhh]jX)}(h"wait for reply using RTT estimatorh]h"wait for reply using RTT estimator}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjChhubah}(h]h ]h"]h$]h&]uh1jRhjBhhhjBhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_task *task`` pointer to rpc_task **Description** Set a request's retransmit timeout using the RTT estimator, and put the task to sleep on the pending queue.h](jX)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjCubj)}(hhh]j)}(h.``struct rpc_task *task`` pointer to rpc_task h](j)}(h``struct rpc_task *task``h]j)}(hjCh]hstruct rpc_task *task}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjCubj)}(hhh]jX)}(hpointer to rpc_taskh]hpointer to rpc_task}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubjX)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjCubjX)}(hkSet a request's retransmit timeout using the RTT estimator, and put the task to sleep on the pending queue.h]hmSet a request’s retransmit timeout using the RTT estimator, and put the task to sleep on the pending queue.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_get (C function) c.xprt_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(h2struct rpc_xprt * xprt_get (struct rpc_xprt *xprt)h]h)}(h0struct rpc_xprt *xprt_get(struct rpc_xprt *xprt)h](h)}(hjh]hstruct}(hjFDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBDhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMoubj)}(h h]h }(hjTDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBDhhhjSDhMoubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjeDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgDmodnameN classnameNjj!)}j$]j')}jxprt_getsb c.xprt_getasbuh1hhjBDhhhjSDhMoubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBDhhhjSDhMoubj;)}(hj>h]h*}(hjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBDhhhjSDhMoubj)}(hxprt_geth]j%)}(hjDh]hxprt_get}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjBDhhhjSDhMoubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]jD c.xprt_getasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hj EhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hxprth]hxprt}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubah}(h]h ]h"]h$]h&]j<j=uh1jhjBDhhhjSDhMoubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj>DhhhjSDhMoubah}(h]j9Dah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjSDhMohj;DhhubjS)}(hhh]jX)}(h'return a reference to an RPC transport.h]h'return a reference to an RPC transport.}(hjAEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMohj>Ehhubah}(h]h ]h"]h$]h&]uh1jRhj;DhhhjSDhMoubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjYEjxjYEjyjzj{uh1hhhhjhNhNubj})}(hD**Parameters** ``struct rpc_xprt *xprt`` pointer to the transporth](jX)}(h**Parameters**h]j)}(hjcEh]h Parameters}(hjeEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaEubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMshj]Eubj)}(hhh]j)}(h2``struct rpc_xprt *xprt`` pointer to the transporth](j)}(h``struct rpc_xprt *xprt``h]j)}(hjEh]hstruct rpc_xprt *xprt}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMuhj|Eubj)}(hhh]jX)}(hpointer to the transporth]hpointer to the transport}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMphjEubah}(h]h ]h"]h$]h&]uh1jhj|Eubeh}(h]h ]h"]h$]h&]uh1jhjEhMuhjyEubah}(h]h ]h"]h$]h&]uh1jhj]Eubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hxprt_put (C function) c.xprt_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void xprt_put (struct rpc_xprt *xprt)h]h)}(h$void xprt_put(struct rpc_xprt *xprt)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM|ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEhhhjEhM|ubj)}(hxprt_puth]j%)}(hxprt_puth]hxprt_put}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjEhhhjEhM|ubj)}(h(struct rpc_xprt *xprt)h]j)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFubj)}(h h]h }(hj&FhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hj7FhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4Fubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9FmodnameN classnameNjj!)}j$]j')}jjEsb c.xprt_putasbuh1hhjFubj)}(h h]h }(hjWFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj;)}(hj>h]h*}(hjeFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjFubj%)}(hxprth]hxprt}(hjrFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubah}(h]h ]h"]h$]h&]j<j=uh1jhjEhhhjEhM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjEhhhjEhM|ubah}(h]jEah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjEhM|hjEhhubjS)}(hhh]jX)}(h(release a reference to an RPC transport.h]h(release a reference to an RPC transport.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM|hjFhhubah}(h]h ]h"]h$]h&]uh1jRhjEhhhjEhM|ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjFjxjFjyjzj{uh1hhhhjhNhNubj})}(hD**Parameters** ``struct rpc_xprt *xprt`` pointer to the transporth](jX)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjFubj)}(hhh]j)}(h2``struct rpc_xprt *xprt`` pointer to the transporth](j)}(h``struct rpc_xprt *xprt``h]j)}(hjFh]hstruct rpc_xprt *xprt}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chMhjFubj)}(hhh]jX)}(hpointer to the transporth]hpointer to the transport}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:65: ./net/sunrpc/xprt.chM}hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_wake_up (C function) c.rpc_wake_uphNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void rpc_wake_up (struct rpc_wait_queue *queue)h]h)}(h.void rpc_wake_up(struct rpc_wait_queue *queue)h](j)}(hvoidh]hvoid}(hj7GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3GhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMubj)}(h h]h }(hjFGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3GhhhjEGhMubj)}(h rpc_wake_uph]j%)}(h rpc_wake_uph]h rpc_wake_up}(hjXGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3GhhhjEGhMubj)}(h(struct rpc_wait_queue *queue)h]j)}(hstruct rpc_wait_queue *queueh](h)}(hjh]hstruct}(hjtGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpGubh)}(hhh]j%)}(hrpc_wait_queueh]hrpc_wait_queue}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]j')}jjZGsb c.rpc_wake_upasbuh1hhjpGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpGubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpGubj%)}(hqueueh]hqueue}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlGubah}(h]h ]h"]h$]h&]j<j=uh1jhj3GhhhjEGhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/GhhhjEGhMubah}(h]j*Gah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjEGhMhj,GhhubjS)}(hhh]jX)}(hwake up all rpc_tasksh]hwake up all rpc_tasks}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jRhj,GhhhjEGhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_wait_queue *queue`` rpc_wait_queue on which the tasks are sleeping **Description** Grabs queue->lockh](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjHubj)}(hhh]j)}(hP``struct rpc_wait_queue *queue`` rpc_wait_queue on which the tasks are sleeping h](j)}(h ``struct rpc_wait_queue *queue``h]j)}(hj8Hh]hstruct rpc_wait_queue *queue}(hj:HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Hubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhj2Hubj)}(hhh]jX)}(h.rpc_wait_queue on which the tasks are sleepingh]h.rpc_wait_queue on which the tasks are sleeping}(hjQHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMHhMhjNHubah}(h]h ]h"]h$]h&]uh1jhj2Hubeh}(h]h ]h"]h$]h&]uh1jhjMHhMhj/Hubah}(h]h ]h"]h$]h&]uh1jhjHubjX)}(h**Description**h]j)}(hjsHh]h Description}(hjuHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqHubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjHubjX)}(hGrabs queue->lockh]hGrabs queue->lock}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_wake_up_status (C function)c.rpc_wake_up_statushNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid rpc_wake_up_status (struct rpc_wait_queue *queue, int status)h]h)}(hAvoid rpc_wake_up_status(struct rpc_wait_queue *queue, int status)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjHhMubj)}(hrpc_wake_up_statush]j%)}(hrpc_wake_up_statush]hrpc_wake_up_status}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjHhMubj)}(h*(struct rpc_wait_queue *queue, int status)h](j)}(hstruct rpc_wait_queue *queueh](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubh)}(hhh]j%)}(hrpc_wait_queueh]hrpc_wait_queue}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j')}jjHsbc.rpc_wake_up_statusasbuh1hhjHubj)}(h h]h }(hj3IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj;)}(hj>h]h*}(hjAIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHubj%)}(hqueueh]hqueue}(hjNIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjHubj)}(h int statush](j)}(hinth]hint}(hjgIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcIubj)}(h h]h }(hjuIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcIubj%)}(hstatush]hstatus}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjHubeh}(h]h ]h"]h$]h&]j<j=uh1jhjHhhhjHhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhjHhMubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhMhjHhhubjS)}(hhh]jX)}(h1wake up all rpc_tasks and set their status value.h]h1wake up all rpc_tasks and set their status value.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjHhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjIjxjIjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_wait_queue *queue`` rpc_wait_queue on which the tasks are sleeping ``int status`` status value to set **Description** Grabs queue->lockh](jX)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjIubj)}(hhh](j)}(hP``struct rpc_wait_queue *queue`` rpc_wait_queue on which the tasks are sleeping h](j)}(h ``struct rpc_wait_queue *queue``h]j)}(hjIh]hstruct rpc_wait_queue *queue}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjIubj)}(hhh]jX)}(h.rpc_wait_queue on which the tasks are sleepingh]h.rpc_wait_queue on which the tasks are sleeping}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjIubj)}(h#``int status`` status value to set h](j)}(h``int status``h]j)}(hj'Jh]h int status}(hj)JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Jubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhj!Jubj)}(hhh]jX)}(hstatus value to seth]hstatus value to set}(hj@JhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlockh]hGrabs queue->lock}(hjxJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:68: ./net/sunrpc/sched.chMhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_alloc_iostats (C function)c.rpc_alloc_iostatshNtauh1hhjhhhNhNubh)}(hhh](h)}(h>struct rpc_iostats * rpc_alloc_iostats (struct rpc_clnt *clnt)h]h)}(hh]h*}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJhhhjJhKxubj)}(hrpc_alloc_iostatsh]j%)}(hjJh]hrpc_alloc_iostats}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjJhhhjJhKxubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj!KhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjKubj)}(h h]h }(hj.KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hj?KhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjh]h*}(hjkKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj%)}(hclnth]hclnt}(hjxKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubah}(h]h ]h"]h$]h&]j<j=uh1jhjJhhhjJhKxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjJhhhjJhKxubah}(h]jJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhKxhjJhhubjS)}(hhh]jX)}(h!allocate an rpc_iostats structureh]h!allocate an rpc_iostats structure}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKxhjKhhubah}(h]h ]h"]h$]h&]uh1jRhjJhhhjJhKxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhjhNhNubj})}(hJ**Parameters** ``struct rpc_clnt *clnt`` RPC program, version, and xprth](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chK|hjKubj)}(hhh]j)}(h8``struct rpc_clnt *clnt`` RPC program, version, and xprth](j)}(h``struct rpc_clnt *clnt``h]j)}(hjKh]hstruct rpc_clnt *clnt}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chK~hjKubj)}(hhh]jX)}(hRPC program, version, and xprth]hRPC program, version, and xprt}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKyhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhK~hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_free_iostats (C function)c.rpc_free_iostatshNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void rpc_free_iostats (struct rpc_iostats *stats)h]h)}(h0void rpc_free_iostats(struct rpc_iostats *stats)h](j)}(hvoidh]hvoid}(hj=LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9LhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKubj)}(h h]h }(hjLLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9LhhhjKLhKubj)}(hrpc_free_iostatsh]j%)}(hrpc_free_iostatsh]hrpc_free_iostats}(hj^LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZLubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9LhhhjKLhKubj)}(h(struct rpc_iostats *stats)h]j)}(hstruct rpc_iostats *statsh](h)}(hjh]hstruct}(hjzLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvLubh)}(hhh]j%)}(h rpc_iostatsh]h rpc_iostats}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j')}jj`Lsbc.rpc_free_iostatsasbuh1hhjvLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvLubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvLubj%)}(hstatsh]hstats}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrLubah}(h]h ]h"]h$]h&]j<j=uh1jhj9LhhhjKLhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5LhhhjKLhKubah}(h]j0Lah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKLhKhj2LhhubjS)}(hhh]jX)}(h release an rpc_iostats structureh]h release an rpc_iostats structure}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjLhhubah}(h]h ]h"]h$]h&]uh1jRhj2LhhhjKLhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMjxjMjyjzj{uh1hhhhjhNhNubj})}(hL**Parameters** ``struct rpc_iostats *stats`` doomed rpc_iostats structureh](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hj!MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjMubj)}(hhh]j)}(h:``struct rpc_iostats *stats`` doomed rpc_iostats structureh](j)}(h``struct rpc_iostats *stats``h]j)}(hj>Mh]hstruct rpc_iostats *stats}(hj@MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh]h*}(hjh]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^Nubj%)}(h op_metricsh]h op_metrics}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^Nubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMubeh}(h]h ]h"]h$]h&]j<j=uh1jhjMhhhjMhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjMhKubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhKhjMhhubjS)}(hhh]jX)}(htally up per-task statsh]htally up per-task stats}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjNhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhjMhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNjxjNjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct rpc_task *task`` completed rpc_task ``struct rpc_iostats *op_metrics`` stat structure for OP that will accumulate stats from **task**h](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjNubj)}(hhh](j)}(h3``const struct rpc_task *task`` completed rpc_task h](j)}(h``const struct rpc_task *task``h]j)}(hj$Oh]hconst struct rpc_task *task}(hj&OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Oubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjOubj)}(hhh]jX)}(hcompleted rpc_taskh]hcompleted rpc_task}(hj=OhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9OhKhj:Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj9OhKhjOubj)}(ha``struct rpc_iostats *op_metrics`` stat structure for OP that will accumulate stats from **task**h](j)}(h"``struct rpc_iostats *op_metrics``h]j)}(hj]Oh]hstruct rpc_iostats *op_metrics}(hj_OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Oubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjWOubj)}(hhh]jX)}(h>stat structure for OP that will accumulate stats from **task**h](h6stat structure for OP that will accumulate stats from }(hjvOhhhNhNubj)}(h**task**h]htask}(hj~OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvOubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjsOubah}(h]h ]h"]h$]h&]uh1jhjWOubeh}(h]h ]h"]h$]h&]uh1jhjrOhKhjOubeh}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_count_iostats (C function)c.rpc_count_iostatshNtauh1hhjhhhNhNubh)}(hhh](h)}(hOvoid rpc_count_iostats (const struct rpc_task *task, struct rpc_iostats *stats)h]h)}(hNvoid rpc_count_iostats(const struct rpc_task *task, struct rpc_iostats *stats)h](j)}(hvoidh]hvoid}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjOhKubj)}(hrpc_count_iostatsh]j%)}(hrpc_count_iostatsh]hrpc_count_iostats}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjOhKubj)}(h8(const struct rpc_task *task, struct rpc_iostats *stats)h](j)}(hconst struct rpc_task *taskh](h)}(hjh]hconst}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj*PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj;PhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8Pubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=PmodnameN classnameNjj!)}j$]j')}jjOsbc.rpc_count_iostatsasbuh1hhjOubj)}(h h]h }(hj[PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjiPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(htaskh]htask}(hjvPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(hstruct rpc_iostats *statsh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(h rpc_iostatsh]h rpc_iostats}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jWPc.rpc_count_iostatsasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(hstatsh]hstats}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjOhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjOhKubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhKhjOhhubjS)}(hhh]jX)}(htally up per-task statsh]htally up per-task stats}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhj Qhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjOhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(Qjxj(Qjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct rpc_task *task`` completed rpc_task ``struct rpc_iostats *stats`` array of stat structures **Description** Uses the statidx from **task**h](jX)}(h**Parameters**h]j)}(hj2Qh]h Parameters}(hj4QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Qubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhj,Qubj)}(hhh](j)}(h3``const struct rpc_task *task`` completed rpc_task h](j)}(h``const struct rpc_task *task``h]j)}(hjQQh]hconst struct rpc_task *task}(hjSQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjKQubj)}(hhh]jX)}(hcompleted rpc_taskh]hcompleted rpc_task}(hjjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfQhKhjgQubah}(h]h ]h"]h$]h&]uh1jhjKQubeh}(h]h ]h"]h$]h&]uh1jhjfQhKhjHQubj)}(h7``struct rpc_iostats *stats`` array of stat structures h](j)}(h``struct rpc_iostats *stats``h]j)}(hjQh]hstruct rpc_iostats *stats}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhjQubj)}(hhh]jX)}(harray of stat structuresh]harray of stat structures}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhKhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhKhjHQubeh}(h]h ]h"]h$]h&]uh1jhj,QubjX)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhj,QubjX)}(hUses the statidx from **task**h](hUses the statidx from }(hjQhhhNhNubj)}(h**task**h]htask}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:74: ./net/sunrpc/stats.chKhj,Qubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_queue_upcall (C function)c.rpc_queue_upcallhNtauh1hhjhhhNhNubh)}(hhh](h)}(hFint rpc_queue_upcall (struct rpc_pipe *pipe, struct rpc_pipe_msg *msg)h]h)}(hEint rpc_queue_upcall(struct rpc_pipe *pipe, struct rpc_pipe_msg *msg)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chK}ubj)}(h h]h }(hj'RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhj&RhK}ubj)}(hrpc_queue_upcallh]j%)}(hrpc_queue_upcallh]hrpc_queue_upcall}(hj9RhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5Rubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhj&RhK}ubj)}(h1(struct rpc_pipe *pipe, struct rpc_pipe_msg *msg)h](j)}(hstruct rpc_pipe *pipeh](h)}(hjh]hstruct}(hjURhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjQRubj)}(h h]h }(hjbRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQRubh)}(hhh]j%)}(hrpc_pipeh]hrpc_pipe}(hjsRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjuRmodnameN classnameNjj!)}j$]j')}jj;Rsbc.rpc_queue_upcallasbuh1hhjQRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQRubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjQRubj%)}(hpipeh]hpipe}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMRubj)}(hstruct rpc_pipe_msg *msgh](h)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h rpc_pipe_msgh]h rpc_pipe_msg}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]jRc.rpc_queue_upcallasbuh1hhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hmsgh]hmsg}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMRubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhj&RhK}ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjRhhhj&RhK}ubah}(h]j Rah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj&RhK}hj RhhubjS)}(hhh]jX)}(h$queue an upcall message to userspaceh]h$queue an upcall message to userspace}(hjHShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chK}hjEShhubah}(h]h ]h"]h$]h&]uh1jRhj Rhhhj&RhK}ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`Sjxj`Sjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_pipe *pipe`` upcall pipe on which to queue given message ``struct rpc_pipe_msg *msg`` message to queue **Description** Call with an **inode** created by rpc_mkpipe() to queue an upcall. A userspace process may then later read the upcall by performing a read on an open file for this inode. It is up to the caller to initialize the fields of **msg** (other than **msg->list**) appropriately.h](jX)}(h**Parameters**h]j)}(hjjSh]h Parameters}(hjlShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhSubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chKhjdSubj)}(hhh](j)}(hF``struct rpc_pipe *pipe`` upcall pipe on which to queue given message h](j)}(h``struct rpc_pipe *pipe``h]j)}(hjSh]hstruct rpc_pipe *pipe}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chK~hjSubj)}(hhh]jX)}(h+upcall pipe on which to queue given messageh]h+upcall pipe on which to queue given message}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShK~hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShK~hjSubj)}(h.``struct rpc_pipe_msg *msg`` message to queue h](j)}(h``struct rpc_pipe_msg *msg``h]j)}(hjSh]hstruct rpc_pipe_msg *msg}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chKhjSubj)}(hhh]jX)}(hmessage to queueh]hmessage to queue}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShKhjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShKhjSubeh}(h]h ]h"]h$]h&]uh1jhjdSubjX)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chKhjdSubjX)}(hXCall with an **inode** created by rpc_mkpipe() to queue an upcall. A userspace process may then later read the upcall by performing a read on an open file for this inode. It is up to the caller to initialize the fields of **msg** (other than **msg->list**) appropriately.h](h Call with an }(hjThhhNhNubj)}(h **inode**h]hinode}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh created by rpc_mkpipe() to queue an upcall. A userspace process may then later read the upcall by performing a read on an open file for this inode. It is up to the caller to initialize the fields of }(hjThhhNhNubj)}(h**msg**h]hmsg}(hj-ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh (other than }(hjThhhNhNubj)}(h **msg->list**h]h msg->list}(hj?ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh) appropriately.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chKhjdSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_mkpipe_dentry (C function)c.rpc_mkpipe_dentryhNtauh1hhjhhhNhNubh)}(hhh](h)}(heint rpc_mkpipe_dentry (struct dentry *parent, const char *name, void *private, struct rpc_pipe *pipe)h]h)}(hdint rpc_mkpipe_dentry(struct dentry *parent, const char *name, void *private, struct rpc_pipe *pipe)h](j)}(hinth]hint}(hjxThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtThhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMiubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtThhhjThMiubj)}(hrpc_mkpipe_dentryh]j%)}(hrpc_mkpipe_dentryh]hrpc_mkpipe_dentry}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjtThhhjThMiubj)}(hO(struct dentry *parent, const char *name, void *private, struct rpc_pipe *pipe)h](j)}(hstruct dentry *parenth](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hdentryh]hdentry}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]j')}jjTsbc.rpc_mkpipe_dentryasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hparenth]hparent}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(hconst char *nameh](h)}(hjh]hconst}(hj'UhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#Uubj)}(h h]h }(hj4UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Uubj)}(hcharh]hchar}(hjBUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Uubj)}(h h]h }(hjPUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Uubj;)}(hj>h]h*}(hj^UhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#Uubj%)}(hnameh]hname}(hjkUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#Uubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(h void *privateh](j)}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hprivateh]hprivate}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(hstruct rpc_pipe *pipeh](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hhh]j%)}(hrpc_pipeh]hrpc_pipe}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]jTc.rpc_mkpipe_dentryasbuh1hhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hpipeh]hpipe}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubeh}(h]h ]h"]h$]h&]j<j=uh1jhjtThhhjThMiubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjpThhhjThMiubah}(h]jkTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThMihjmThhubjS)}(hhh]jX)}(huserspace communicationh]huserspace communication}(hjGVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMihjDVhhubah}(h]h ]h"]h$]h&]uh1jRhjmThhhjThMiubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj_Vjxj_Vjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct dentry *parent`` dentry of directory to create new "pipe" in ``const char *name`` name of pipe ``void *private`` private data to associate with the pipe, for the caller's use ``struct rpc_pipe *pipe`` :c:type:`rpc_pipe` containing input parameters **Description** Data is made available for userspace to read by calls to rpc_queue_upcall(). The actual reads will result in calls to **ops->upcall**, which will be called with the file pointer, message, and userspace buffer to copy to. Writes can come at any time, and do not necessarily have to be responses to upcalls. They will result in calls to **msg->downcall**. The **private** argument passed here will be available to all these methods from the file pointer, via RPC_I(file_inode(file))->private.h](jX)}(h**Parameters**h]j)}(hjiVh]h Parameters}(hjkVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgVubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMmhjcVubj)}(hhh](j)}(hF``struct dentry *parent`` dentry of directory to create new "pipe" in h](j)}(h``struct dentry *parent``h]j)}(hjVh]hstruct dentry *parent}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMkhjVubj)}(hhh]jX)}(h+dentry of directory to create new "pipe" inh]h/dentry of directory to create new “pipe” in}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhMkhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMkhjVubj)}(h"``const char *name`` name of pipe h](j)}(h``const char *name``h]j)}(hjVh]hconst char *name}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMlhjVubj)}(hhh]jX)}(h name of pipeh]h name of pipe}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhMlhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMlhjVubj)}(hP``void *private`` private data to associate with the pipe, for the caller's use h](j)}(h``void *private``h]j)}(hjVh]h void *private}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMmhjVubj)}(hhh]jX)}(h=private data to associate with the pipe, for the caller's useh]h?private data to associate with the pipe, for the caller’s use}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhMmhjWubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjWhMmhjVubj)}(hI``struct rpc_pipe *pipe`` :c:type:`rpc_pipe` containing input parameters h](j)}(h``struct rpc_pipe *pipe``h]j)}(hj3Wh]hstruct rpc_pipe *pipe}(hj5WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Wubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMnhj-Wubj)}(hhh]jX)}(h.:c:type:`rpc_pipe` containing input parametersh](h)}(h:c:type:`rpc_pipe`h]j)}(hjRWh]hrpc_pipe}(hjTWhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjPWubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjrpc_pipeuh1hhjHWhMnhjLWubh containing input parameters}(hjLWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjHWhMnhjIWubah}(h]h ]h"]h$]h&]uh1jhj-Wubeh}(h]h ]h"]h$]h&]uh1jhjHWhMnhjVubeh}(h]h ]h"]h$]h&]uh1jhjcVubjX)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMphjcVubjX)}(hData is made available for userspace to read by calls to rpc_queue_upcall(). The actual reads will result in calls to **ops->upcall**, which will be called with the file pointer, message, and userspace buffer to copy to.h](hwData is made available for userspace to read by calls to rpc_queue_upcall(). The actual reads will result in calls to }(hjWhhhNhNubj)}(h**ops->upcall**h]h ops->upcall}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubhW, which will be called with the file pointer, message, and userspace buffer to copy to.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMohjcVubjX)}(hWrites can come at any time, and do not necessarily have to be responses to upcalls. They will result in calls to **msg->downcall**.h](hsWrites can come at any time, and do not necessarily have to be responses to upcalls. They will result in calls to }(hjWhhhNhNubj)}(h**msg->downcall**h]h msg->downcall}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMthjcVubjX)}(hThe **private** argument passed here will be available to all these methods from the file pointer, via RPC_I(file_inode(file))->private.h](hThe }(hjWhhhNhNubj)}(h **private**h]hprivate}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubhy argument passed here will be available to all these methods from the file pointer, via RPC_I(file_inode(file))->private.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMwhjcVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_unlink (C function) c.rpc_unlinkhNtauh1hhjhhhNhNubh)}(hhh](h)}(h'void rpc_unlink (struct rpc_pipe *pipe)h]h)}(h&void rpc_unlink(struct rpc_pipe *pipe)h](j)}(hvoidh]hvoid}(hj&XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"XhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMubj)}(h h]h }(hj5XhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"Xhhhj4XhMubj)}(h rpc_unlinkh]j%)}(h rpc_unlinkh]h rpc_unlink}(hjGXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"Xhhhj4XhMubj)}(h(struct rpc_pipe *pipe)h]j)}(hstruct rpc_pipe *pipeh](h)}(hjh]hstruct}(hjcXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_Xubj)}(h h]h }(hjpXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Xubh)}(hhh]j%)}(hrpc_pipeh]hrpc_pipe}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~Xubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j')}jjIXsb c.rpc_unlinkasbuh1hhj_Xubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Xubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_Xubj%)}(hpipeh]hpipe}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_Xubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[Xubah}(h]h ]h"]h$]h&]j<j=uh1jhj"Xhhhj4XhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXhhhj4XhMubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj4XhMhjXhhubjS)}(hhh]jX)}(h remove a pipeh]h remove a pipe}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhj4XhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_pipe *pipe`` the pipe to be removed **Description** After this call, lookups will no longer find the pipe, and any attempts to read or write using preexisting opens of the pipe will return -EPIPE.h](jX)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjYubj)}(hhh]j)}(h1``struct rpc_pipe *pipe`` the pipe to be removed h](j)}(h``struct rpc_pipe *pipe``h]j)}(hj'Yh]hstruct rpc_pipe *pipe}(hj)YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Yubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj!Yubj)}(hhh]jX)}(hthe pipe to be removedh]hthe pipe to be removed}(hj@YhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjh]h*}(hj0ZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hpdhh]hpdh}(hj=ZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubah}(h]h ]h"]h$]h&]j<j=uh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjYhMubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYhMhjYhhubjS)}(hhh]jX)}(h%initialise a struct rpc_pipe_dir_headh]h%initialise a struct rpc_pipe_dir_head}(hjgZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjdZhhubah}(h]h ]h"]h$]h&]uh1jRhjYhhhjYhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZjxjZjyjzj{uh1hhhhjhNhNubj})}(hW**Parameters** ``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_headh](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjZubj)}(hhh]j)}(hE``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_headh](j)}(h!``struct rpc_pipe_dir_head *pdh``h]j)}(hjZh]hstruct rpc_pipe_dir_head *pdh}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjZubj)}(hhh]jX)}(h#pointer to struct rpc_pipe_dir_headh]h#pointer to struct rpc_pipe_dir_head}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%rpc_init_pipe_dir_object (C function)c.rpc_init_pipe_dir_objecthNtauh1hhjhhhNhNubh)}(hhh](h)}(h~void rpc_init_pipe_dir_object (struct rpc_pipe_dir_object *pdo, const struct rpc_pipe_dir_object_ops *pdo_ops, void *pdo_data)h]h)}(h}void rpc_init_pipe_dir_object(struct rpc_pipe_dir_object *pdo, const struct rpc_pipe_dir_object_ops *pdo_ops, void *pdo_data)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZhhhj[hMubj)}(hrpc_init_pipe_dir_objecth]j%)}(hrpc_init_pipe_dir_objecth]hrpc_init_pipe_dir_object}(hj#[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZhhhj[hMubj)}(h`(struct rpc_pipe_dir_object *pdo, const struct rpc_pipe_dir_object_ops *pdo_ops, void *pdo_data)h](j)}(hstruct rpc_pipe_dir_object *pdoh](h)}(hjh]hstruct}(hj?[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;[ubj)}(h h]h }(hjL[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;[ubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hj][hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZ[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_[modnameN classnameNjj!)}j$]j')}jj%[sbc.rpc_init_pipe_dir_objectasbuh1hhj;[ubj)}(h h]h }(hj}[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;[ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;[ubj%)}(hpdoh]hpdo}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7[ubj)}(h-const struct rpc_pipe_dir_object_ops *pdo_opsh](h)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hhh]j%)}(hrpc_pipe_dir_object_opsh]hrpc_pipe_dir_object_ops}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]jy[c.rpc_init_pipe_dir_objectasbuh1hhj[ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hpdo_opsh]hpdo_ops}(hj#\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7[ubj)}(hvoid *pdo_datah](j)}(hvoidh]hvoid}(hj<\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8\ubj)}(h h]h }(hjJ\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8\ubj;)}(hj>h]h*}(hjX\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8\ubj%)}(hpdo_datah]hpdo_data}(hje\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7[ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjZhhhj[hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhj[hMubah}(h]jZah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[hMhjZhhubjS)}(hhh]jX)}(h'initialise a struct rpc_pipe_dir_objecth]h'initialise a struct rpc_pipe_dir_object}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jRhjZhhhj[hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_object ``const struct rpc_pipe_dir_object_ops *pdo_ops`` pointer to const struct rpc_pipe_dir_object_ops ``void *pdo_data`` pointer to caller-defined datah](jX)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj\ubj)}(hhh](j)}(hJ``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_object h](j)}(h#``struct rpc_pipe_dir_object *pdo``h]j)}(hj\h]hstruct rpc_pipe_dir_object *pdo}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj\ubj)}(hhh]jX)}(h%pointer to struct rpc_pipe_dir_objecth]h%pointer to struct rpc_pipe_dir_object}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj\ubj)}(hb``const struct rpc_pipe_dir_object_ops *pdo_ops`` pointer to const struct rpc_pipe_dir_object_ops h](j)}(h1``const struct rpc_pipe_dir_object_ops *pdo_ops``h]j)}(hj ]h]h-const struct rpc_pipe_dir_object_ops *pdo_ops}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj]ubj)}(hhh]jX)}(h/pointer to const struct rpc_pipe_dir_object_opsh]h/pointer to const struct rpc_pipe_dir_object_ops}(hj"]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj\ubj)}(h1``void *pdo_data`` pointer to caller-defined datah](j)}(h``void *pdo_data``h]j)}(hjB]h]hvoid *pdo_data}(hjD]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@]ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj<]ubj)}(hhh]jX)}(hpointer to caller-defined datah]hpointer to caller-defined data}(hj[]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjX]ubah}(h]h ]h"]h$]h&]uh1jhj<]ubeh}(h]h ]h"]h$]h&]uh1jhjW]hMhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$rpc_add_pipe_dir_object (C function)c.rpc_add_pipe_dir_objecthNtauh1hhjhhhNhNubh)}(hhh](h)}(hmint rpc_add_pipe_dir_object (struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h]h)}(hlint rpc_add_pipe_dir_object(struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhj]hMubj)}(hrpc_add_pipe_dir_objecth]j%)}(hrpc_add_pipe_dir_objecth]hrpc_add_pipe_dir_object}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]hhhj]hMubj)}(hQ(struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubh)}(hhh]j%)}(hneth]hnet}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]modnameN classnameNjj!)}j$]j')}jj]sbc.rpc_add_pipe_dir_objectasbuh1hhj]ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj;)}(hj>h]h*}(hj%^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]ubj%)}(hneth]hnet}(hj2^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hstruct rpc_pipe_dir_head *pdhh](h)}(hjh]hstruct}(hjK^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjG^ubj)}(h h]h }(hjX^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjG^ubh)}(hhh]j%)}(hrpc_pipe_dir_headh]hrpc_pipe_dir_head}(hji^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjf^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjk^modnameN classnameNjj!)}j$]j^c.rpc_add_pipe_dir_objectasbuh1hhjG^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjG^ubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjG^ubj%)}(hpdhh]hpdh}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjG^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hstruct rpc_pipe_dir_object *pdoh](h)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j^c.rpc_add_pipe_dir_objectasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hpdoh]hpdo}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj]hhhj]hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj]hhhj]hMubah}(h]j]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]hMhj]hhubjS)}(hhh]jX)}(h.associate a rpc_pipe_dir_object to a directoryh]h.associate a rpc_pipe_dir_object to a directory}(hj<_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj9_hhubah}(h]h ]h"]h$]h&]uh1jRhj]hhhj]hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjT_jxjT_jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net *net`` pointer to struct net ``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head ``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_objecth](jX)}(h**Parameters**h]j)}(hj^_h]h Parameters}(hj`_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\_ubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjX_ubj)}(hhh](j)}(h*``struct net *net`` pointer to struct net h](j)}(h``struct net *net``h]j)}(hj}_h]hstruct net *net}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{_ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjw_ubj)}(hhh]jX)}(hpointer to struct neth]hpointer to struct net}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjw_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjt_ubj)}(hF``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head h](j)}(h!``struct rpc_pipe_dir_head *pdh``h]j)}(hj_h]hstruct rpc_pipe_dir_head *pdh}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj_ubj)}(hhh]jX)}(h#pointer to struct rpc_pipe_dir_headh]h#pointer to struct rpc_pipe_dir_head}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjt_ubj)}(hI``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_objecth](j)}(h#``struct rpc_pipe_dir_object *pdo``h]j)}(hj_h]hstruct rpc_pipe_dir_object *pdo}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj_ubj)}(hhh]jX)}(h%pointer to struct rpc_pipe_dir_objecth]h%pointer to struct rpc_pipe_dir_object}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjt_ubeh}(h]h ]h"]h$]h&]uh1jhjX_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'rpc_remove_pipe_dir_object (C function)c.rpc_remove_pipe_dir_objecthNtauh1hhjhhhNhNubh)}(hhh](h)}(hqvoid rpc_remove_pipe_dir_object (struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h]h)}(hpvoid rpc_remove_pipe_dir_object(struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h](j)}(hvoidh]hvoid}(hjI`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE`hhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMubj)}(h h]h }(hjX`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjE`hhhjW`hMubj)}(hrpc_remove_pipe_dir_objecth]j%)}(hrpc_remove_pipe_dir_objecth]hrpc_remove_pipe_dir_object}(hjj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjf`ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjE`hhhjW`hMubj)}(hQ(struct net *net, struct rpc_pipe_dir_head *pdh, struct rpc_pipe_dir_object *pdo)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(hhh]j%)}(hneth]hnet}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]j')}jjl`sbc.rpc_remove_pipe_dir_objectasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`ubj%)}(hneth]hnet}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~`ubj)}(hstruct rpc_pipe_dir_head *pdhh](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`ubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(hhh]j%)}(hrpc_pipe_dir_headh]hrpc_pipe_dir_head}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j`c.rpc_remove_pipe_dir_objectasbuh1hhj`ubj)}(h h]h }(hj4ahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj;)}(hj>h]h*}(hjBahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`ubj%)}(hpdhh]hpdh}(hjOahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~`ubj)}(hstruct rpc_pipe_dir_object *pdoh](h)}(hjh]hstruct}(hjhahhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdaubj)}(h h]h }(hjuahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdaubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j`c.rpc_remove_pipe_dir_objectasbuh1hhjdaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdaubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdaubj%)}(hpdoh]hpdo}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~`ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjE`hhhjW`hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjA`hhhjW`hMubah}(h]j<`ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjW`hMhj>`hhubjS)}(hhh]jX)}(h-remove a rpc_pipe_dir_object from a directoryh]h-remove a rpc_pipe_dir_object from a directory}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjahhubah}(h]h ]h"]h$]h&]uh1jRhj>`hhhjW`hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net *net`` pointer to struct net ``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head ``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_objecth](jX)}(h**Parameters**h]j)}(hj bh]h Parameters}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hjbubj)}(hhh](j)}(h*``struct net *net`` pointer to struct net h](j)}(h``struct net *net``h]j)}(hj*bh]hstruct net *net}(hj,bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(bubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hj$bubj)}(hhh]jX)}(hpointer to struct neth]hpointer to struct net}(hjCbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?bhM hj@bubah}(h]h ]h"]h$]h&]uh1jhj$bubeh}(h]h ]h"]h$]h&]uh1jhj?bhM hj!bubj)}(hF``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head h](j)}(h!``struct rpc_pipe_dir_head *pdh``h]j)}(hjcbh]hstruct rpc_pipe_dir_head *pdh}(hjebhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjabubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hj]bubj)}(hhh]jX)}(h#pointer to struct rpc_pipe_dir_headh]h#pointer to struct rpc_pipe_dir_head}(hj|bhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxbhM hjybubah}(h]h ]h"]h$]h&]uh1jhj]bubeh}(h]h ]h"]h$]h&]uh1jhjxbhM hj!bubj)}(hI``struct rpc_pipe_dir_object *pdo`` pointer to struct rpc_pipe_dir_objecth](j)}(h#``struct rpc_pipe_dir_object *pdo``h]j)}(hjbh]hstruct rpc_pipe_dir_object *pdo}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hjbubj)}(hhh]jX)}(h%pointer to struct rpc_pipe_dir_objecth]h%pointer to struct rpc_pipe_dir_object}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM hj!bubeh}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.rpc_find_or_alloc_pipe_dir_object (C function)#c.rpc_find_or_alloc_pipe_dir_objecthNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct rpc_pipe_dir_object * rpc_find_or_alloc_pipe_dir_object (struct net *net, struct rpc_pipe_dir_head *pdh, int (*match)(struct rpc_pipe_dir_object *, void *), struct rpc_pipe_dir_object *(*alloc)(void *), void *data)h]h)}(hstruct rpc_pipe_dir_object *rpc_find_or_alloc_pipe_dir_object(struct net *net, struct rpc_pipe_dir_head *pdh, int (*match)(struct rpc_pipe_dir_object*, void*), struct rpc_pipe_dir_object *(*alloc)(void*), void *data)h](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbhhhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjchMubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j')}j!rpc_find_or_alloc_pipe_dir_objectsb#c.rpc_find_or_alloc_pipe_dir_objectasbuh1hhjbhhhjchMubj)}(h h]h }(hj6chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjchMubj;)}(hj>h]h*}(hjDchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbhhhjchMubj)}(h!rpc_find_or_alloc_pipe_dir_objecth]j%)}(hj3ch]h!rpc_find_or_alloc_pipe_dir_object}(hjUchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjbhhhjchMubj)}(h(struct net *net, struct rpc_pipe_dir_head *pdh, int (*match)(struct rpc_pipe_dir_object*, void*), struct rpc_pipe_dir_object *(*alloc)(void*), void *data)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjpchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlcubj)}(h h]h }(hj}chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlcubh)}(hhh]j%)}(hneth]hnet}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j1c#c.rpc_find_or_alloc_pipe_dir_objectasbuh1hhjlcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlcubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlcubj%)}(hneth]hnet}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhcubj)}(hstruct rpc_pipe_dir_head *pdhh](h)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(hrpc_pipe_dir_headh]hrpc_pipe_dir_head}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]j1c#c.rpc_find_or_alloc_pipe_dir_objectasbuh1hhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hj*dhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hpdhh]hpdh}(hj7dhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhcubj)}(h0int (*match)(struct rpc_pipe_dir_object*, void*)h](j)}(hinth]hint}(hjPdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLdubj)}(h h]h }(hj^dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLdubj;)}(hjmh]h(}(hjldhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj;)}(hj>h]h*}(hjydhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj%)}(hmatchh]hmatch}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLdubj;)}(hjh]h)}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj;)}(hjmh]h(}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubh)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLdubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]j1c#c.rpc_find_or_alloc_pipe_dir_objectasbuh1hhjLdubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj;)}(h,h]h,}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLdubj)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLdubj;)}(hj>h]h*}(hj!ehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubj;)}(hjh]h)}(hj.ehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhcubj)}(h+struct rpc_pipe_dir_object *(*alloc)(void*)h](h)}(hjh]hstruct}(hjFehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBeubj)}(h h]h }(hjSehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBeubh)}(hhh]j%)}(hrpc_pipe_dir_objecth]hrpc_pipe_dir_object}(hjdehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaeubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfemodnameN classnameNjj!)}j$]j1c#c.rpc_find_or_alloc_pipe_dir_objectasbuh1hhjBeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBeubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj;)}(hjmh]h(}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj%)}(halloch]halloc}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBeubj;)}(hjh]h)}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj;)}(hjmh]h(}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBeubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubj;)}(hjh]h)}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhcubj)}(h void *datah](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hj fhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hj>h]h*}(hj.fhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hdatah]hdata}(hj;fhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhcubeh}(h]h ]h"]h$]h&]j<j=uh1jhjbhhhjchMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbhhhjchMubah}(h]jbah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjchMhjbhhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjbhhhjchMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjnfjxjnfjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` pointer to struct net ``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head ``int (*match)(struct rpc_pipe_dir_object *, void *)`` match struct rpc_pipe_dir_object to data ``struct rpc_pipe_dir_object *(*alloc)(void *)`` allocate a new struct rpc_pipe_dir_object ``void *data`` user defined data for match() and alloc()h](jX)}(h**Parameters**h]j)}(hjxfh]h Parameters}(hjzfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvfubah}(h]h ]h"]h$]h&]uh1jWhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM"hjrfubj)}(hhh](j)}(h*``struct net *net`` pointer to struct net h](j)}(h``struct net *net``h]j)}(hjfh]hstruct net *net}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chMhjfubj)}(hhh]jX)}(hpointer to struct neth]hpointer to struct net}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjfubj)}(hF``struct rpc_pipe_dir_head *pdh`` pointer to struct rpc_pipe_dir_head h](j)}(h!``struct rpc_pipe_dir_head *pdh``h]j)}(hjfh]hstruct rpc_pipe_dir_head *pdh}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM hjfubj)}(hhh]jX)}(h#pointer to struct rpc_pipe_dir_headh]h#pointer to struct rpc_pipe_dir_head}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhM hjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhM hjfubj)}(h```int (*match)(struct rpc_pipe_dir_object *, void *)`` match struct rpc_pipe_dir_object to data h](j)}(h6``int (*match)(struct rpc_pipe_dir_object *, void *)``h]j)}(hj gh]h2int (*match)(struct rpc_pipe_dir_object *, void *)}(hj ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM!hjgubj)}(hhh]jX)}(h(match struct rpc_pipe_dir_object to datah]h(match struct rpc_pipe_dir_object to data}(hj"ghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghM!hjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghM!hjfubj)}(h[``struct rpc_pipe_dir_object *(*alloc)(void *)`` allocate a new struct rpc_pipe_dir_object h](j)}(h0``struct rpc_pipe_dir_object *(*alloc)(void *)``h]j)}(hjBgh]h,struct rpc_pipe_dir_object *(*alloc)(void *)}(hjDghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@gubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/networking/kapi:77: ./net/sunrpc/rpc_pipe.chM"hjh]h*}(hj^hhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhubj%)}(htaskh]htask}(hjkhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj hubah}(h]h ]h"]h$]h&]j<j=uh1jhjghhhjghMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjghhhjghMubah}(h]jgah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjghMhjghhubjS)}(hhh]jX)}(h7obtain the port for a given RPC service on a given hosth]h7obtain the port for a given RPC service on a given host}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:80: ./net/sunrpc/rpcb_clnt.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jRhjghhhjghMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_task *task`` task that is waiting for portmapper request **Description** This one can be called for an ongoing RPC request, and can be used in an async (rpciod) context.h](jX)}(h**Parameters**h]j)}(hjhh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:80: ./net/sunrpc/rpcb_clnt.chMhjhubj)}(hhh]j)}(hF``struct rpc_task *task`` task that is waiting for portmapper request h](j)}(h``struct rpc_task *task``h]j)}(hjhh]hstruct rpc_task *task}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:80: ./net/sunrpc/rpcb_clnt.chMhjhubj)}(hhh]jX)}(h+task that is waiting for portmapper requesth]h+task that is waiting for portmapper request}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubjX)}(h**Description**h]j)}(hjih]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:80: ./net/sunrpc/rpcb_clnt.chMhjhubjX)}(h`This one can be called for an ongoing RPC request, and can be used in an async (rpciod) context.h]h`This one can be called for an ongoing RPC request, and can be used in an async (rpciod) context.}(hj'ihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:80: ./net/sunrpc/rpcb_clnt.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_create (C function) c.rpc_createhNtauh1hhjhhhNhNubh)}(hhh](h)}(h;struct rpc_clnt * rpc_create (struct rpc_create_args *args)h]h)}(h9struct rpc_clnt *rpc_create(struct rpc_create_args *args)h](h)}(hjh]hstruct}(hjVihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRihhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hjdihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRihhhjcihMubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjuihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjriubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwimodnameN classnameNjj!)}j$]j')}j rpc_createsb c.rpc_createasbuh1hhjRihhhjcihMubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRihhhjcihMubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRihhhjcihMubj)}(h rpc_createh]j%)}(hjih]h rpc_create}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRihhhjcihMubj)}(h(struct rpc_create_args *args)h]j)}(hstruct rpc_create_args *argsh](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hrpc_create_argsh]hrpc_create_args}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]ji c.rpc_createasbuh1hhjiubj)}(h h]h }(hj jhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hargsh]hargs}(hj'jhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubah}(h]h ]h"]h$]h&]j<j=uh1jhjRihhhjcihMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjNihhhjcihMubah}(h]jIiah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjcihMhjKihhubjS)}(hhh]jX)}(h0create an RPC client and transport with one callh]h0create an RPC client and transport with one call}(hjQjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjNjhhubah}(h]h ]h"]h$]h&]uh1jRhjKihhhjcihMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjijjxjijjyjzj{uh1hhhhjhNhNubj})}(hXp**Parameters** ``struct rpc_create_args *args`` rpc_clnt create argument structure **Description** Creates and initializes an RPC transport and an RPC client. It can ping the server in order to determine if it is up, and to see if it supports this program and version. RPC_CLNT_CREATE_NOPING disables this behavior so asynchronous tasks can also use rpc_create.h](jX)}(h**Parameters**h]j)}(hjsjh]h Parameters}(hjujhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjmjubj)}(hhh]j)}(hD``struct rpc_create_args *args`` rpc_clnt create argument structure h](j)}(h ``struct rpc_create_args *args``h]j)}(hjjh]hstruct rpc_create_args *args}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjjubj)}(hhh]jX)}(h"rpc_clnt create argument structureh]h"rpc_clnt create argument structure}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jhjmjubjX)}(h**Description**h]j)}(hjjh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjmjubjX)}(h;Creates and initializes an RPC transport and an RPC client.h]h;Creates and initializes an RPC transport and an RPC client.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjmjubjX)}(hIt can ping the server in order to determine if it is up, and to see if it supports this program and version. RPC_CLNT_CREATE_NOPING disables this behavior so asynchronous tasks can also use rpc_create.h]hIt can ping the server in order to determine if it is up, and to see if it supports this program and version. RPC_CLNT_CREATE_NOPING disables this behavior so asynchronous tasks can also use rpc_create.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjmjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_clone_client (C function)c.rpc_clone_clienthNtauh1hhjhhhNhNubh)}(hhh](h)}(h:struct rpc_clnt * rpc_clone_client (struct rpc_clnt *clnt)h]h)}(h8struct rpc_clnt *rpc_clone_client(struct rpc_clnt *clnt)h](h)}(hjh]hstruct}(hj!khhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hj/khhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhj.khMubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hj@khhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=kubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBkmodnameN classnameNjj!)}j$]j')}jrpc_clone_clientsbc.rpc_clone_clientasbuh1hhjkhhhj.khMubj)}(h h]h }(hjakhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhj.khMubj;)}(hj>h]h*}(hjokhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkhhhj.khMubj)}(hrpc_clone_clienth]j%)}(hj^kh]hrpc_clone_client}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|kubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkhhhj.khMubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjkmodnameN classnameNjj!)}j$]j\kc.rpc_clone_clientasbuh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hj>h]h*}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(hclnth]hclnt}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubah}(h]h ]h"]h$]h&]j<j=uh1jhjkhhhj.khMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjkhhhj.khMubah}(h]jkah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.khMhjkhhubjS)}(hhh]jX)}(hClone an RPC client structureh]hClone an RPC client structure}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjlhhubah}(h]h ]h"]h$]h&]uh1jRhjkhhhj.khMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4ljxj4ljyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_clnt *clnt`` RPC client whose parameters are copied **Description** Returns a fresh RPC client or an ERR_PTR.h](jX)}(h**Parameters**h]j)}(hj>lh]h Parameters}(hj@lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh]h*}(hj+mhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlhhhjlhMubj)}(hrpc_clone_client_set_authh]j%)}(hjmh]hrpc_clone_client_set_auth}(hjh]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSmubj%)}(hclnth]hclnt}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOmubj)}(hrpc_authflavor_t flavorh](h)}(hhh]j%)}(hrpc_authflavor_th]hrpc_authflavor_t}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]jmc.rpc_clone_client_set_authasbuh1hhjmubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj%)}(hflavorh]hflavor}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOmubeh}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhjlhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjlhMubah}(h]jlah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlhMhjlhhubjS)}(hhh]jX)}(h.Clone an RPC client structure and set its authh]h.Clone an RPC client structure and set its auth}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjlhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8njxj8njyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_clnt *clnt`` RPC client whose parameters are copied ``rpc_authflavor_t flavor`` security flavor for new client **Description** Returns a fresh RPC client or an ERR_PTR.h](jX)}(h**Parameters**h]j)}(hjBnh]h Parameters}(hjDnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@nubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjh]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSoubj%)}(hclnth]hclnt}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOoubj)}(hstruct xprt_create *argsh](h)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubh)}(hhh]j%)}(h xprt_createh]h xprt_create}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]joc.rpc_switch_client_transportasbuh1hhjoubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hargsh]hargs}(hj phhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOoubj)}(h!const struct rpc_timeout *timeouth](<h)}(hjh]hconst}(hj9phhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5pubj)}(h h]h }(hjFphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5pubh)}(hjh]hstruct}(hjTphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5pubj)}(h h]h }(hjaphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5pubh)}(hhh]j%)}(h rpc_timeouth]h rpc_timeout}(hjrphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjopubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtpmodnameN classnameNjj!)}j$]joc.rpc_switch_client_transportasbuh1hhj5pubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5pubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj5pubj%)}(htimeouth]htimeout}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5pubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOoubeh}(h]h ]h"]h$]h&]j<j=uh1jhjohhhj(ohMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjohhhj(ohMubah}(h]j oah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(ohMhjohhubjS)}(hhh]jX)}(h#switch the RPC transport on the flyh]h#switch the RPC transport on the fly}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjphhubah}(h]h ]h"]h$]h&]uh1jRhjohhhj(ohMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjpjxjpjyjzj{uh1hhhhjhNhNubj})}(hX}**Parameters** ``struct rpc_clnt *clnt`` pointer to a struct rpc_clnt ``struct xprt_create *args`` pointer to the new transport arguments ``const struct rpc_timeout *timeout`` pointer to the new timeout parameters **Description** This function allows the caller to switch the RPC transport for the rpc_clnt structure 'clnt' to allow it to connect to a mirrored NFS server, for instance. It assumes that the caller has ensured that there are no active RPC tasks by using some form of locking. Returns zero if "clnt" is now using the new xprt. Otherwise a negative errno is returned, and "clnt" continues to use the old xprt.h](jX)}(h**Parameters**h]j)}(hjph]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjpubj)}(hhh](j)}(h7``struct rpc_clnt *clnt`` pointer to a struct rpc_clnt h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjqh]hstruct rpc_clnt *clnt}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjqubj)}(hhh]jX)}(hpointer to a struct rpc_clnth]hpointer to a struct rpc_clnt}(hj/qhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+qhMhj,qubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhj+qhMhj qubj)}(hD``struct xprt_create *args`` pointer to the new transport arguments h](j)}(h``struct xprt_create *args``h]j)}(hjOqh]hstruct xprt_create *args}(hjQqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjIqubj)}(hhh]jX)}(h&pointer to the new transport argumentsh]h&pointer to the new transport arguments}(hjhqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdqhMhjequbah}(h]h ]h"]h$]h&]uh1jhjIqubeh}(h]h ]h"]h$]h&]uh1jhjdqhMhj qubj)}(hL``const struct rpc_timeout *timeout`` pointer to the new timeout parameters h](j)}(h%``const struct rpc_timeout *timeout``h]j)}(hjqh]h!const struct rpc_timeout *timeout}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjqubj)}(hhh]jX)}(h%pointer to the new timeout parametersh]h%pointer to the new timeout parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhj qubeh}(h]h ]h"]h$]h&]uh1jhjpubjX)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjpubjX)}(hXThis function allows the caller to switch the RPC transport for the rpc_clnt structure 'clnt' to allow it to connect to a mirrored NFS server, for instance. It assumes that the caller has ensured that there are no active RPC tasks by using some form of locking.h]hX This function allows the caller to switch the RPC transport for the rpc_clnt structure ‘clnt’ to allow it to connect to a mirrored NFS server, for instance. It assumes that the caller has ensured that there are no active RPC tasks by using some form of locking.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjpubjX)}(hReturns zero if "clnt" is now using the new xprt. Otherwise a negative errno is returned, and "clnt" continues to use the old xprt.h]hReturns zero if “clnt” is now using the new xprt. Otherwise a negative errno is returned, and “clnt” continues to use the old xprt.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+rpc_clnt_iterate_for_each_xprt (C function) c.rpc_clnt_iterate_for_each_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hint rpc_clnt_iterate_for_each_xprt (struct rpc_clnt *clnt, int (*fn)(struct rpc_clnt *, struct rpc_xprt *, void *), void *data)h]h)}(h{int rpc_clnt_iterate_for_each_xprt(struct rpc_clnt *clnt, int (*fn)(struct rpc_clnt*, struct rpc_xprt*, void*), void *data)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMBubj)}(h h]h }(hj&rhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhj%rhMBubj)}(hrpc_clnt_iterate_for_each_xprth]j%)}(hrpc_clnt_iterate_for_each_xprth]hrpc_clnt_iterate_for_each_xprt}(hj8rhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4rubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrhhhj%rhMBubj)}(hY(struct rpc_clnt *clnt, int (*fn)(struct rpc_clnt*, struct rpc_xprt*, void*), void *data)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjTrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPrubj)}(h h]h }(hjarhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPrubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjrrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjorubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtrmodnameN classnameNjj!)}j$]j')}jj:rsb c.rpc_clnt_iterate_for_each_xprtasbuh1hhjPrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPrubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPrubj%)}(hclnth]hclnt}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLrubj)}(h4int (*fn)(struct rpc_clnt*, struct rpc_xprt*, void*)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hjmh]h(}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hfnh]hfn}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubj;)}(hjh]h)}(hj shhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hjmh]h(}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubh)}(hjh]hstruct}(hj$shhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hj1shhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjBshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?subah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDsmodnameN classnameNjj!)}j$]jr c.rpc_clnt_iterate_for_each_xprtasbuh1hhjrubj;)}(hj>h]h*}(hj`shhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hjdh]h,}(hjmshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj)}(h h]h }(hjzshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsmodnameN classnameNjj!)}j$]jr c.rpc_clnt_iterate_for_each_xprtasbuh1hhjrubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hjdh]h,}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj;)}(hjh]h)}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLrubj)}(h void *datah](j)}(hvoidh]hvoid}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(h h]h }(hj-thhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hj;thhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(hdatah]hdata}(hjHthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLrubeh}(h]h ]h"]h$]h&]j<j=uh1jhjrhhhj%rhMBubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrhhhj%rhMBubah}(h]j rah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj%rhMBhj rhhubjS)}(hhh]jX)}(h"Apply a function to all transportsh]h"Apply a function to all transports}(hjrthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMBhjothhubah}(h]h ]h"]h$]h&]uh1jRhj rhhhj%rhMBubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_clnt *clnt`` pointer to client ``int (*fn)(struct rpc_clnt *, struct rpc_xprt *, void *)`` function to apply ``void *data`` void pointer to function data **Description** Iterates through the list of RPC transports currently attached to the client and applies the function fn(clnt, xprt, data). On error, the iteration stops, and the function returns the error value.h](jX)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMFhjtubj)}(hhh](j)}(h,``struct rpc_clnt *clnt`` pointer to client h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjth]hstruct rpc_clnt *clnt}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMChjtubj)}(hhh]jX)}(hpointer to clienth]hpointer to client}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjthMChjtubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjthMChjtubj)}(hN``int (*fn)(struct rpc_clnt *, struct rpc_xprt *, void *)`` function to apply h](j)}(h;``int (*fn)(struct rpc_clnt *, struct rpc_xprt *, void *)``h]j)}(hjth]h7int (*fn)(struct rpc_clnt *, struct rpc_xprt *, void *)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMDhjtubj)}(hhh]jX)}(hfunction to applyh]hfunction to apply}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjuhMDhjuubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjuhMDhjtubj)}(h-``void *data`` void pointer to function data h](j)}(h``void *data``h]j)}(hj%uh]h void *data}(hj'uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#uubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMEhjuubj)}(hhh]jX)}(hvoid pointer to function datah]hvoid pointer to function data}(hj>uhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:uhMEhj;uubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhj:uhMEhjtubeh}(h]h ]h"]h$]h&]uh1jhjtubjX)}(h**Description**h]j)}(hj`uh]h Description}(hjbuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^uubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMGhjtubjX)}(h{Iterates through the list of RPC transports currently attached to the client and applies the function fn(clnt, xprt, data).h]h{Iterates through the list of RPC transports currently attached to the client and applies the function fn(clnt, xprt, data).}(hjvuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMFhjtubjX)}(hHOn error, the iteration stops, and the function returns the error value.h]hHOn error, the iteration stops, and the function returns the error value.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMIhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_cancel_tasks (C function)c.rpc_cancel_taskshNtauh1hhjhhhNhNubh)}(hhh](h)}(hunsigned long rpc_cancel_tasks (struct rpc_clnt *clnt, int error, bool (*fnmatch)(const struct rpc_task *, const void *), const void *data)h]h)}(hunsigned long rpc_cancel_tasks(struct rpc_clnt *clnt, int error, bool (*fnmatch)(const struct rpc_task*, const void*), const void *data)h](j)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM}ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuhhhjuhM}ubj)}(hlongh]hlong}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjuhM}ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuhhhjuhM}ubj)}(hrpc_cancel_tasksh]j%)}(hrpc_cancel_tasksh]hrpc_cancel_tasks}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjuhhhjuhM}ubj)}(hj(struct rpc_clnt *clnt, int error, bool (*fnmatch)(const struct rpc_task*, const void*), const void *data)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj vubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj vubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hj+vhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(vubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-vmodnameN classnameNjj!)}j$]j')}jjusbc.rpc_cancel_tasksasbuh1hhj vubj)}(h h]h }(hjKvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj vubj;)}(hj>h]h*}(hjYvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj vubj%)}(hclnth]hclnt}(hjfvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj vubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubj)}(h int errorh](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{vubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{vubj%)}(herrorh]herror}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{vubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubj)}(h4bool (*fnmatch)(const struct rpc_task*, const void*)h](j)}(hjTh]hbool}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj;)}(hjmh]h(}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj;)}(hj>h]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hfnmatchh]hfnmatch}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubj;)}(hjh]h)}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj;)}(hjmh]h(}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubh)}(hjh]hconst}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hjh]hstruct}(hj,whhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hj9whhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hjJwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGwubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLwmodnameN classnameNjj!)}j$]jGvc.rpc_cancel_tasksasbuh1hhjvubj;)}(hj>h]h*}(hjhwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj;)}(hjdh]h,}(hjuwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hjh]hconst}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj;)}(hjh]h)}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubj)}(hconst void *datah](h)}(hjh]hconst}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hdatah]hdata}(hj"xhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubeh}(h]h ]h"]h$]h&]j<j=uh1jhjuhhhjuhM}ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjuhM}ubah}(h]juah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjuhM}hjuhhubjS)}(hhh]jX)}(h try to cancel a set of RPC tasksh]h try to cancel a set of RPC tasks}(hjLxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM}hjIxhhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjuhM}ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdxjxjdxjyjzj{uh1hhhhjhNhNubj})}(hX|**Parameters** ``struct rpc_clnt *clnt`` Pointer to RPC client ``int error`` RPC task error value to set ``bool (*fnmatch)(const struct rpc_task *, const void *)`` Pointer to selector function ``const void *data`` User data **Description** Uses **fnmatch** to define a set of RPC tasks that are to be cancelled. The argument **error** must be a negative error value.h](jX)}(h**Parameters**h]j)}(hjnxh]h Parameters}(hjpxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlxubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjhxubj)}(hhh](j)}(h0``struct rpc_clnt *clnt`` Pointer to RPC client h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjxh]hstruct rpc_clnt *clnt}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM~hjxubj)}(hhh]jX)}(hPointer to RPC clienth]hPointer to RPC client}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM~hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM~hjxubj)}(h*``int error`` RPC task error value to set h](j)}(h ``int error``h]j)}(hjxh]h int error}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjxubj)}(hhh]jX)}(hRPC task error value to seth]hRPC task error value to set}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhMhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjxubj)}(hX``bool (*fnmatch)(const struct rpc_task *, const void *)`` Pointer to selector function h](j)}(h:``bool (*fnmatch)(const struct rpc_task *, const void *)``h]j)}(hjxh]h6bool (*fnmatch)(const struct rpc_task *, const void *)}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjxubj)}(hhh]jX)}(hPointer to selector functionh]hPointer to selector function}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhMhjxubj)}(h``const void *data`` User data h](j)}(h``const void *data``h]j)}(hj8yh]hconst void *data}(hj:yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6yubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj2yubj)}(hhh]jX)}(h User datah]h User data}(hjQyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMyhMhjNyubah}(h]h ]h"]h$]h&]uh1jhj2yubeh}(h]h ]h"]h$]h&]uh1jhjMyhMhjxubeh}(h]h ]h"]h$]h&]uh1jhjhxubjX)}(h**Description**h]j)}(hjsyh]h Description}(hjuyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqyubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjhxubjX)}(h~Uses **fnmatch** to define a set of RPC tasks that are to be cancelled. The argument **error** must be a negative error value.h](hUses }(hjyhhhNhNubj)}(h **fnmatch**h]hfnmatch}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubhE to define a set of RPC tasks that are to be cancelled. The argument }(hjyhhhNhNubj)}(h **error**h]herror}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh must be a negative error value.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjhxubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!rpc_bind_new_program (C function)c.rpc_bind_new_programhNtauh1hhjhhhNhNubh)}(hhh](h)}(hjstruct rpc_clnt * rpc_bind_new_program (struct rpc_clnt *old, const struct rpc_program *program, u32 vers)h]h)}(hhstruct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *old, const struct rpc_program *program, u32 vers)h](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjyhMubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjymodnameN classnameNjj!)}j$]j')}jrpc_bind_new_programsbc.rpc_bind_new_programasbuh1hhjyhhhjyhMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjyhMubj;)}(hj>h]h*}(hj*zhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyhhhjyhMubj)}(hrpc_bind_new_programh]j%)}(hjzh]hrpc_bind_new_program}(hj;zhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7zubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjyhMubj)}(hC(struct rpc_clnt *old, const struct rpc_program *program, u32 vers)h](j)}(hstruct rpc_clnt *oldh](h)}(hjh]hstruct}(hjVzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRzubj)}(h h]h }(hjczhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRzubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjtzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjvzmodnameN classnameNjj!)}j$]jzc.rpc_bind_new_programasbuh1hhjRzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRzubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRzubj%)}(holdh]hold}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNzubj)}(h!const struct rpc_program *programh](h)}(hjh]hconst}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubh)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubh)}(hhh]j%)}(h rpc_programh]h rpc_program}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]jzc.rpc_bind_new_programasbuh1hhjzubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj;)}(hj>h]h*}(hj+{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubj%)}(hprogramh]hprogram}(hj8{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNzubj)}(hu32 versh](h)}(hhh]j%)}(hu32h]hu32}(hjT{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQ{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjV{modnameN classnameNjj!)}j$]jzc.rpc_bind_new_programasbuh1hhjM{ubj)}(h h]h }(hjr{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM{ubj%)}(hversh]hvers}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNzubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjyhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjyhhhjyhMubah}(h]jyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMhjyhhubjS)}(hhh]jX)}(h,bind a new RPC program to an existing clienth]h,bind a new RPC program to an existing client}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjyhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj{jxj{jyjzj{uh1hhhhjhNhNubj})}(hXb**Parameters** ``struct rpc_clnt *old`` old rpc_client ``const struct rpc_program *program`` rpc program to set ``u32 vers`` rpc program version **Description** Clones the rpc client and sets up a new RPC program. This is mainly of use for enabling different RPC programs to share the same transport. The Sun NFSv2/v3 ACL protocol can do this.h](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj{ubj)}(hhh](j)}(h(``struct rpc_clnt *old`` old rpc_client h](j)}(h``struct rpc_clnt *old``h]j)}(hj{h]hstruct rpc_clnt *old}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj{ubj)}(hhh]jX)}(hold rpc_clienth]hold rpc_client}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj{ubj)}(h9``const struct rpc_program *program`` rpc program to set h](j)}(h%``const struct rpc_program *program``h]j)}(hj$|h]h!const struct rpc_program *program}(hj&|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"|ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj|ubj)}(hhh]jX)}(hrpc program to seth]hrpc program to set}(hj=|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9|hMhj:|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj9|hMhj{ubj)}(h!``u32 vers`` rpc program version h](j)}(h ``u32 vers``h]j)}(hj]|h]hu32 vers}(hj_|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[|ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjW|ubj)}(hhh]jX)}(hrpc program versionh]hrpc program version}(hjv|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjr|hMhjs|ubah}(h]h ]h"]h$]h&]uh1jhjW|ubeh}(h]h ]h"]h$]h&]uh1jhjr|hMhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj{ubjX)}(hClones the rpc client and sets up a new RPC program. This is mainly of use for enabling different RPC programs to share the same transport. The Sun NFSv2/v3 ACL protocol can do this.h]hClones the rpc client and sets up a new RPC program. This is mainly of use for enabling different RPC programs to share the same transport. The Sun NFSv2/v3 ACL protocol can do this.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_run_task (C function)c.rpc_run_taskhNtauh1hhjhhhNhNubh)}(hhh](h)}(hMstruct rpc_task * rpc_run_task (const struct rpc_task_setup *task_setup_data)h]h)}(hKstruct rpc_task *rpc_run_task(const struct rpc_task_setup *task_setup_data)h](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhj|hMubh)}(hhh]j%)}(hrpc_taskh]hrpc_task}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]j')}j rpc_run_tasksbc.rpc_run_taskasbuh1hhj|hhhj|hMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhj|hMubj;)}(hj>h]h*}(hj+}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|hhhj|hMubj)}(h rpc_run_taskh]j%)}(hj}h]h rpc_run_task}(hj<}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8}ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj|hhhj|hMubj)}(h.(const struct rpc_task_setup *task_setup_data)h]j)}(h,const struct rpc_task_setup *task_setup_datah](h)}(hjh]hconst}(hjW}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjS}ubj)}(h h]h }(hjd}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjS}ubh)}(hjh]hstruct}(hjr}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjS}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjS}ubh)}(hhh]j%)}(hrpc_task_setuph]hrpc_task_setup}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j}c.rpc_run_taskasbuh1hhjS}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjS}ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjS}ubj%)}(htask_setup_datah]htask_setup_data}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjS}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjO}ubah}(h]h ]h"]h$]h&]j<j=uh1jhj|hhhj|hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhj|hMubah}(h]j|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMhj|hhubjS)}(hhh]jX)}(h8Allocate a new RPC task, then run rpc_execute against ith]h8Allocate a new RPC task, then run rpc_execute against it}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jRhj|hhhj|hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj ~jxj ~jyjzj{uh1hhhhjhNhNubj})}(hf**Parameters** ``const struct rpc_task_setup *task_setup_data`` pointer to task initialisation datah](jX)}(h**Parameters**h]j)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj~ubj)}(hhh]j)}(hT``const struct rpc_task_setup *task_setup_data`` pointer to task initialisation datah](j)}(h0``const struct rpc_task_setup *task_setup_data``h]j)}(hj4~h]h,const struct rpc_task_setup *task_setup_data}(hj6~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2~ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj.~ubj)}(hhh]jX)}(h#pointer to task initialisation datah]h#pointer to task initialisation data}(hjM~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjJ~ubah}(h]h ]h"]h$]h&]uh1jhj.~ubeh}(h]h ]h"]h$]h&]uh1jhjI~hMhj+~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_call_sync (C function)c.rpc_call_synchNtauh1hhjhhhNhNubh)}(hhh](h)}(hSint rpc_call_sync (struct rpc_clnt *clnt, const struct rpc_message *msg, int flags)h]h)}(hRint rpc_call_sync(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~hhhj~hMubj)}(h rpc_call_synch]j%)}(h rpc_call_synch]h rpc_call_sync}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj~hhhj~hMubj)}(hA(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j')}jj~sbc.rpc_call_syncasbuh1hhj~ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(hclnth]hclnt}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~ubj)}(hconst struct rpc_message *msgh](h)}(hjh]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubh)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubh)}(hhh]j%)}(h rpc_messageh]h rpc_message}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]jc.rpc_call_syncasbuh1hhj9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9ubj%)}(hmsgh]hmsg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~ubj)}(h int flagsh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~hhhj~hMubah}(h]j~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hMhj~hhubjS)}(hhh]jX)}(hPerform a synchronous RPC callh]hPerform a synchronous RPC call}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhj~hhhj~hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_clnt *clnt`` pointer to RPC client ``const struct rpc_message *msg`` RPC call parameters ``int flags`` RPC call flagsh](jX)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj*ubj)}(hhh](j)}(h0``struct rpc_clnt *clnt`` pointer to RPC client h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjOh]hstruct rpc_clnt *clnt}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjIubj)}(hhh]jX)}(hpointer to RPC clienth]hpointer to RPC client}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h6``const struct rpc_message *msg`` RPC call parameters h](j)}(h!``const struct rpc_message *msg``h]j)}(hjh]hconst struct rpc_message *msg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(hRPC call parametersh]hRPC call parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h``int flags`` RPC call flagsh](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjÀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(hRPC call flagsh]hRPC call flags}(hjڀhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj׀ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjրhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_call_async (C function)c.rpc_call_asynchNtauh1hhjhhhNhNubh)}(hhh](h)}(hint rpc_call_async (struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, const struct rpc_call_ops *tk_ops, void *data)h]h)}(hint rpc_call_async(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, const struct rpc_call_ops *tk_ops, void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj)hMubj)}(hrpc_call_asynch]j%)}(hrpc_call_asynch]hrpc_call_async}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj)hMubj)}(hp(struct rpc_clnt *clnt, const struct rpc_message *msg, int flags, const struct rpc_call_ops *tk_ops, void *data)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]j')}jj>sbc.rpc_call_asyncasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hconst struct rpc_message *msgh](h)}(hjh]hconst}(hjʁhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjƁubj)}(h h]h }(hjׁhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƁubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjƁubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƁubh)}(hhh]j%)}(h rpc_messageh]h rpc_message}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.rpc_call_asyncasbuh1hhjƁubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƁubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjƁubj%)}(hmsgh]hmsg}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjƁubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h int flagsh](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj%)}(hflagsh]hflags}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h!const struct rpc_call_ops *tk_opsh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h rpc_call_opsh]h rpc_call_ops}(hjÂhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjłmodnameN classnameNjj!)}j$]jc.rpc_call_asyncasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(htk_opsh]htk_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdatah]hdata}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj)hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMhjhhubjS)}(hhh]jX)}(h Perform an asynchronous RPC callh]h Perform an asynchronous RPC call}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjehhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj)hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_clnt *clnt`` pointer to RPC client ``const struct rpc_message *msg`` RPC call parameters ``int flags`` RPC call flags ``const struct rpc_call_ops *tk_ops`` RPC call ops ``void *data`` user call datah](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh](j)}(h0``struct rpc_clnt *clnt`` pointer to RPC client h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(hpointer to RPC clienth]hpointer to RPC client}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h6``const struct rpc_message *msg`` RPC call parameters h](j)}(h!``const struct rpc_message *msg``h]j)}(hjh]hconst struct rpc_message *msg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj܃ubj)}(hhh]jX)}(hRPC call parametersh]hRPC call parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj܃ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int flags`` RPC call flags h](j)}(h ``int flags``h]j)}(hjh]h int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(hRPC call flagsh]hRPC call flags}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(h3``const struct rpc_call_ops *tk_ops`` RPC call ops h](j)}(h%``const struct rpc_call_ops *tk_ops``h]j)}(hjTh]h!const struct rpc_call_ops *tk_ops}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjNubj)}(hhh]jX)}(h RPC call opsh]h RPC call ops}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubj)}(h``void *data`` user call datah](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(huser call datah]huser call data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$rpc_prepare_reply_pages (C function)c.rpc_prepare_reply_pageshNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid rpc_prepare_reply_pages (struct rpc_rqst *req, struct page **pages, unsigned int base, unsigned int len, unsigned int hdrsize)h]h)}(hvoid rpc_prepare_reply_pages(struct rpc_rqst *req, struct page **pages, unsigned int base, unsigned int len, unsigned int hdrsize)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMGubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMGubj)}(hrpc_prepare_reply_pagesh]j%)}(hrpc_prepare_reply_pagesh]hrpc_prepare_reply_pages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMGubj)}(hf(struct rpc_rqst *req, struct page **pages, unsigned int base, unsigned int len, unsigned int hdrsize)h](j)}(hstruct rpc_rqst *reqh](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hrpc_rqsth]hrpc_rqst}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]j')}jj sbc.rpc_prepare_reply_pagesasbuh1hhj ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hreqh]hreq}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct page **pagesh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j^c.rpc_prepare_reply_pagesasbuh1hhjubj)}(h h]h }(hj҅hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpagesh]hpages}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int baseh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbaseh]hbase}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj%)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int hdrsizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjÆhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjцhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj߆hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hhdrsizeh]hhdrsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMGubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj߄hhhjhMGubah}(h]jڄah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMGhj܄hhubjS)}(hhh]jX)}(h2Prepare to receive a reply data payload into pagesh]h2Prepare to receive a reply data payload into pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMGhjhhubah}(h]h ]h"]h$]h&]uh1jRhj܄hhhjhMGubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhjhNhNubj})}(hXr**Parameters** ``struct rpc_rqst *req`` RPC request to prepare ``struct page **pages`` vector of struct page pointers ``unsigned int base`` offset in first page where receive should start, in bytes ``unsigned int len`` expected size of the upper layer data payload, in bytes ``unsigned int hdrsize`` expected size of upper layer reply header, in XDR wordsh](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMKhj3ubj)}(hhh](j)}(h0``struct rpc_rqst *req`` RPC request to prepare h](j)}(h``struct rpc_rqst *req``h]j)}(hjXh]hstruct rpc_rqst *req}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMHhjRubj)}(hhh]jX)}(hRPC request to prepareh]hRPC request to prepare}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMHhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMHhjOubj)}(h7``struct page **pages`` vector of struct page pointers h](j)}(h``struct page **pages``h]j)}(hjh]hstruct page **pages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMIhjubj)}(hhh]jX)}(hvector of struct page pointersh]hvector of struct page pointers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjOubj)}(hP``unsigned int base`` offset in first page where receive should start, in bytes h](j)}(h``unsigned int base``h]j)}(hjʇh]hunsigned int base}(hj̇hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȇubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMJhjćubj)}(hhh]jX)}(h9offset in first page where receive should start, in bytesh]h9offset in first page where receive should start, in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj߇hMJhjubah}(h]h ]h"]h$]h&]uh1jhjćubeh}(h]h ]h"]h$]h&]uh1jhj߇hMJhjOubj)}(hM``unsigned int len`` expected size of the upper layer data payload, in bytes h](j)}(h``unsigned int len``h]j)}(hjh]hunsigned int len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMKhjubj)}(hhh]jX)}(h7expected size of the upper layer data payload, in bytesh]h7expected size of the upper layer data payload, in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjOubj)}(hP``unsigned int hdrsize`` expected size of upper layer reply header, in XDR wordsh](j)}(h``unsigned int hdrsize``h]j)}(hj<h]hunsigned int hdrsize}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMMhj6ubj)}(hhh]jX)}(h7expected size of upper layer reply header, in XDR wordsh]h7expected size of upper layer reply header, in XDR words}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMLhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_peeraddr (C function)c.rpc_peeraddrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hQsize_t rpc_peeraddr (struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize)h]h)}(hPsize_t rpc_peeraddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize)h](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j rpc_peeraddrsbc.rpc_peeraddrasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMbubj)}(h rpc_peeraddrh]j%)}(hjh]h rpc_peeraddr}(hj͈hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjɈubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMbubj)}(h=(struct rpc_clnt *clnt, struct sockaddr *buf, size_t bufsize)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.rpc_peeraddrasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hclnth]hclnt}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sockaddr *bufh](h)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]jc.rpc_peeraddrasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hsize_t bufsizeh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjˉhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjȉubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj͉modnameN classnameNjj!)}j$]jc.rpc_peeraddrasbuh1hhjĉubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjĉubj%)}(hbufsizeh]hbufsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjĉubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMbubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMbubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMbhjhhubjS)}(hhh]jX)}(h,extract remote peer address from clnt's xprth]h.extract remote peer address from clnt’s xprt}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMbhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMbubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9jxj9jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct rpc_clnt *clnt`` RPC client structure ``struct sockaddr *buf`` target buffer ``size_t bufsize`` length of target buffer **Description** Returns the number of bytes that are actually in the stored address.h](jX)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMfhj=ubj)}(hhh](j)}(h/``struct rpc_clnt *clnt`` RPC client structure h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjbh]hstruct rpc_clnt *clnt}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMchj\ubj)}(hhh]jX)}(hRPC client structureh]hRPC client structure}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhMchjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMchjYubj)}(h'``struct sockaddr *buf`` target buffer h](j)}(h``struct sockaddr *buf``h]j)}(hjh]hstruct sockaddr *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMdhjubj)}(hhh]jX)}(h target bufferh]h target buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjYubj)}(h+``size_t bufsize`` length of target buffer h](j)}(h``size_t bufsize``h]j)}(hjԊh]hsize_t bufsize}(hj֊hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҊubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMehjΊubj)}(hhh]jX)}(hlength of target bufferh]hlength of target buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjΊubeh}(h]h ]h"]h$]h&]uh1jhjhMehjYubeh}(h]h ]h"]h$]h&]uh1jhj=ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMghj=ubjX)}(hDReturns the number of bytes that are actually in the stored address.h]hDReturns the number of bytes that are actually in the stored address.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMfhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_peeraddr2str (C function)c.rpc_peeraddr2strhNtauh1hhjhhhNhNubh)}(hhh](h)}(hWconst char * rpc_peeraddr2str (struct rpc_clnt *clnt, enum rpc_display_format_t format)h]h)}(hUconst char *rpc_peeraddr2str(struct rpc_clnt *clnt, enum rpc_display_format_t format)h](h)}(hjh]hconst}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM|ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjahM|ubj)}(hcharh]hchar}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjahM|ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjahM|ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPhhhjahM|ubj)}(hrpc_peeraddr2strh]j%)}(hrpc_peeraddr2strh]hrpc_peeraddr2str}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjahM|ubj)}(h9(struct rpc_clnt *clnt, enum rpc_display_format_t format)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjƋhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hj׋hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjԋubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjًmodnameN classnameNjj!)}j$]j')}jjsbc.rpc_peeraddr2strasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h enum rpc_display_format_t formath](h)}(hhh]henum}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(hrpc_display_format_th]hrpc_display_format_t}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKmodnameN classnameNjj!)}j$]jc.rpc_peeraddr2strasbuh1hhj'ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj%)}(hformath]hformat}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjPhhhjahM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjahM|ubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahM|hjIhhubjS)}(hhh]jX)}(h.return remote peer address in printable formath]h.return remote peer address in printable format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM|hjhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjahM|ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX9**Parameters** ``struct rpc_clnt *clnt`` RPC client structure ``enum rpc_display_format_t format`` address format **Description** NB: the lifetime of the memory referenced by the returned pointer is the same as the rpc_xprt itself. As long as the caller uses this pointer, it must hold the RCU read lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjÌhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh](j)}(h/``struct rpc_clnt *clnt`` RPC client structure h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjތubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM}hjڌubj)}(hhh]jX)}(hRPC client structureh]hRPC client structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjڌubeh}(h]h ]h"]h$]h&]uh1jhjhM}hj׌ubj)}(h4``enum rpc_display_format_t format`` address format h](j)}(h$``enum rpc_display_format_t format``h]j)}(hjh]h enum rpc_display_format_t format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM~hjubj)}(hhh]jX)}(haddress formath]haddress format}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hM~hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hM~hj׌ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubjX)}(hNB: the lifetime of the memory referenced by the returned pointer is the same as the rpc_xprt itself. As long as the caller uses this pointer, it must hold the RCU read lock.h]hNB: the lifetime of the memory referenced by the returned pointer is the same as the rpc_xprt itself. As long as the caller uses this pointer, it must hold the RCU read lock.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_localaddr (C function)c.rpc_localaddrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hNint rpc_localaddr (struct rpc_clnt *clnt, struct sockaddr *buf, size_t buflen)h]h)}(hMint rpc_localaddr(struct rpc_clnt *clnt, struct sockaddr *buf, size_t buflen)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h rpc_localaddrh]j%)}(h rpc_localaddrh]h rpc_localaddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h<(struct rpc_clnt *clnt, struct sockaddr *buf, size_t buflen)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj֍hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjҍubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҍubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.rpc_localaddrasbuh1hhjҍubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҍubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjҍubj%)}(hclnth]hclnt}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjҍubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj΍ubj)}(hstruct sockaddr *bufh](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hsockaddrh]hsockaddr}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhmodnameN classnameNjj!)}j$]jc.rpc_localaddrasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj΍ubj)}(h size_t buflenh](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.rpc_localaddrasbuh1hhjubj)}(h h]h }(hjَhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbuflenh]hbuflen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj΍ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h1discover local endpoint address for an RPC clienth]h1discover local endpoint address for an RPC client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhjhNhNubj})}(hXM**Parameters** ``struct rpc_clnt *clnt`` RPC client structure ``struct sockaddr *buf`` target buffer ``size_t buflen`` size of target buffer, in bytes **Description** Returns zero and fills in "buf" and "buflen" if successful; otherwise, a negative errno is returned. This works even if the underlying transport is not currently connected, or if the upper layer never previously provided a source address. The result of this function call is transient: multiple calls in succession may give different results, depending on how local networking configuration changes over time.h](jX)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj-ubj)}(hhh](j)}(h/``struct rpc_clnt *clnt`` RPC client structure h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjRh]hstruct rpc_clnt *clnt}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjLubj)}(hhh]jX)}(hRPC client structureh]hRPC client structure}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubj)}(h'``struct sockaddr *buf`` target buffer h](j)}(h``struct sockaddr *buf``h]j)}(hjh]hstruct sockaddr *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(h target bufferh]h target buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjIubj)}(h2``size_t buflen`` size of target buffer, in bytes h](j)}(h``size_t buflen``h]j)}(hjďh]h size_t buflen}(hjƏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhjubj)}(hhh]jX)}(hsize of target buffer, in bytesh]hsize of target buffer, in bytes}(hjݏhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjُhMhjڏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjُhMhjIubeh}(h]h ]h"]h$]h&]uh1jhj-ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj-ubjX)}(hdReturns zero and fills in "buf" and "buflen" if successful; otherwise, a negative errno is returned.h]hlReturns zero and fills in “buf” and “buflen” if successful; otherwise, a negative errno is returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj-ubjX)}(hThis works even if the underlying transport is not currently connected, or if the upper layer never previously provided a source address.h]hThis works even if the underlying transport is not currently connected, or if the upper layer never previously provided a source address.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMhj-ubjX)}(hThe result of this function call is transient: multiple calls in succession may give different results, depending on how local networking configuration changes over time.h]hThe result of this function call is transient: multiple calls in succession may give different results, depending on how local networking configuration changes over time.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_net_ns (C function) c.rpc_net_nshNtauh1hhjhhhNhNubh)}(hhh](h)}(h/struct net * rpc_net_ns (struct rpc_clnt *clnt)h]h)}(h-struct net *rpc_net_ns(struct rpc_clnt *clnt)h](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^hhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM6ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhjohM6ubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j rpc_net_nssb c.rpc_net_nsasbuh1hhj^hhhjohM6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhjohM6ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^hhhjohM6ubj)}(h rpc_net_nsh]j%)}(hjh]h rpc_net_ns}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhjohM6ubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjܐhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjؐubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjؐubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.rpc_net_nsasbuh1hhjؐubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjؐubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjؐubj%)}(hclnth]hclnt}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjؐubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjԐubah}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhjohM6ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhjohM6ubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjohM6hjWhhubjS)}(hhh]jX)}(h-Get the network namespace for this RPC clienth]h-Get the network namespace for this RPC client}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM6hjZhhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjohM6ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjujxjujyjzj{uh1hhhhjhNhNubj})}(h?**Parameters** ``struct rpc_clnt *clnt`` RPC client to queryh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM:hjyubj)}(hhh]j)}(h-``struct rpc_clnt *clnt`` RPC client to queryh](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM<hjubj)}(hhh]jX)}(hRPC client to queryh]hRPC client to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_max_payload (C function)c.rpc_max_payloadhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.size_t rpc_max_payload (struct rpc_clnt *clnt)h]h)}(h-size_t rpc_max_payload(struct rpc_clnt *clnt)h](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jrpc_max_payloadsbc.rpc_max_payloadasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMFubj)}(hrpc_max_payloadh]j%)}(hjh]hrpc_max_payload}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMFubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjjmodnameN classnameNjj!)}j$]jc.rpc_max_payloadasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjFubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMFubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMFubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMFhjhhubjS)}(hhh]jX)}(h2Get maximum payload size for a transport, in bytesh]h2Get maximum payload size for a transport, in bytes}(hj˒hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMFhjȒhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMFubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX+**Parameters** ``struct rpc_clnt *clnt`` RPC client to query **Description** For stream transports, this is one RPC record fragment (see RFC 1831), as we don't support multi-record requests yet. For datagram transports, this is the size of an IP packet minus the IP, UDP, and RPC header sizes.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMJhjubj)}(hhh]j)}(h.``struct rpc_clnt *clnt`` RPC client to query h](j)}(h``struct rpc_clnt *clnt``h]j)}(hj h]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMGhjubj)}(hhh]jX)}(hRPC client to queryh]hRPC client to query}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMGhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMGhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMIhjubjX)}(hFor stream transports, this is one RPC record fragment (see RFC 1831), as we don't support multi-record requests yet. For datagram transports, this is the size of an IP packet minus the IP, UDP, and RPC header sizes.h]hFor stream transports, this is one RPC record fragment (see RFC 1831), as we don’t support multi-record requests yet. For datagram transports, this is the size of an IP packet minus the IP, UDP, and RPC header sizes.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_max_bc_payload (C function)c.rpc_max_bc_payloadhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1size_t rpc_max_bc_payload (struct rpc_clnt *clnt)h]h)}(h0size_t rpc_max_bc_payload(struct rpc_clnt *clnt)h](h)}(hhh]j%)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jrpc_max_bc_payloadsbc.rpc_max_bc_payloadasbuh1hhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMZubj)}(hrpc_max_bc_payloadh]j%)}(hjh]hrpc_max_bc_payload}(hjÓhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMZubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjޓhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjړubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjړubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.rpc_max_bc_payloadasbuh1hhjړubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjړubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjړubj%)}(hclnth]hclnt}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjړubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj֓ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMZubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMZubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMZhjhhubjS)}(hhh]jX)}(h.Get maximum backchannel payload size, in bytesh]h.Get maximum backchannel payload size, in bytes}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMZhj\hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMZubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1hhhhjhNhNubj})}(h?**Parameters** ``struct rpc_clnt *clnt`` RPC client to queryh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM^hj{ubj)}(hhh]j)}(h-``struct rpc_clnt *clnt`` RPC client to queryh](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM`hjubj)}(hhh]jX)}(hRPC client to queryh]hRPC client to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_force_rebind (C function)c.rpc_force_rebindhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void rpc_force_rebind (struct rpc_clnt *clnt)h]h)}(h,void rpc_force_rebind(struct rpc_clnt *clnt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMxubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMxubj)}(hrpc_force_rebindh]j%)}(hrpc_force_rebindh]hrpc_force_rebind}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMxubj)}(h(struct rpc_clnt *clnt)h]j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjWmodnameN classnameNjj!)}j$]j')}jjsbc.rpc_force_rebindasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMxubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMxhjhhubjS)}(hhh]jX)}(h6force transport to check that remote port is unchangedh]h6force transport to check that remote port is unchanged}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMxhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjҕjxjҕjyjzj{uh1hhhhjhNhNubj})}(h<**Parameters** ``struct rpc_clnt *clnt`` client to rebindh](jX)}(h**Parameters**h]j)}(hjܕh]h Parameters}(hjޕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڕubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM|hj֕ubj)}(hhh]j)}(h*``struct rpc_clnt *clnt`` client to rebindh](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM~hjubj)}(hhh]jX)}(hclient to rebindh]hclient to rebind}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhj֕ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'rpc_clnt_test_and_add_xprt (C function)c.rpc_clnt_test_and_add_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hint rpc_clnt_test_and_add_xprt (struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *in_max_connect)h]h)}(hint rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *in_max_connect)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQhhhjchM ubj)}(hrpc_clnt_test_and_add_xprth]j%)}(hrpc_clnt_test_and_add_xprth]hrpc_clnt_test_and_add_xprt}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjQhhhjchM ubj)}(ha(struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *in_max_connect)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjxsbc.rpc_clnt_test_and_add_xprtasbuh1hhjubj)}(h h]h }(hjЖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjޖhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct rpc_xprt_switch *xpsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_xprt_switchh]hrpc_xprt_switch}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j̖c.rpc_clnt_test_and_add_xprtasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxpsh]hxps}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j̖c.rpc_clnt_test_and_add_xprtasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hxprth]hxprt}(hj˗hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *in_max_connecth](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hin_max_connecth]hin_max_connect}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjQhhhjchM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjchM ubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjchM hjJhhubjS)}(hhh]jX)}(h*Test and add a new transport to a rpc_clnth]h*Test and add a new transport to a rpc_clnt}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj4hhubah}(h]h ]h"]h$]h&]uh1jRhjJhhhjchM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjOjxjOjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_clnt *clnt`` pointer to struct rpc_clnt ``struct rpc_xprt_switch *xps`` pointer to struct rpc_xprt_switch, ``struct rpc_xprt *xprt`` pointer struct rpc_xprt ``void *in_max_connect`` pointer to the max_connect value for the passed in xprt transporth](jX)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjSubj)}(hhh](j)}(h5``struct rpc_clnt *clnt`` pointer to struct rpc_clnt h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjxh]hstruct rpc_clnt *clnt}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjrubj)}(hhh]jX)}(hpointer to struct rpc_clnth]hpointer to struct rpc_clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(hC``struct rpc_xprt_switch *xps`` pointer to struct rpc_xprt_switch, h](j)}(h``struct rpc_xprt_switch *xps``h]j)}(hjh]hstruct rpc_xprt_switch *xps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(h"pointer to struct rpc_xprt_switch,h]h"pointer to struct rpc_xprt_switch,}(hjʘhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƘhM hjǘubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƘhM hjoubj)}(h2``struct rpc_xprt *xprt`` pointer struct rpc_xprt h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjh]hstruct rpc_xprt *xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(hpointer struct rpc_xprth]hpointer struct rpc_xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjoubj)}(hZ``void *in_max_connect`` pointer to the max_connect value for the passed in xprt transporth](j)}(h``void *in_max_connect``h]j)}(hj#h]hvoid *in_max_connect}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(hApointer to the max_connect value for the passed in xprt transporth]hApointer to the max_connect value for the passed in xprt transport}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM hjoubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-rpc_clnt_setup_test_and_add_xprt (C function)"c.rpc_clnt_setup_test_and_add_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(h|int rpc_clnt_setup_test_and_add_xprt (struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *data)h]h)}(h{int rpc_clnt_setup_test_and_add_xprt(struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *data)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjhM ubj)}(h rpc_clnt_setup_test_and_add_xprth]j%)}(h rpc_clnt_setup_test_and_add_xprth]h rpc_clnt_setup_test_and_add_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjhM ubj)}(hW(struct rpc_clnt *clnt, struct rpc_xprt_switch *xps, struct rpc_xprt *xprt, void *data)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjǙhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjؙhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjՙubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjڙmodnameN classnameNjj!)}j$]j')}jjsb"c.rpc_clnt_setup_test_and_add_xprtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct rpc_xprt_switch *xpsh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(hrpc_xprt_switchh]hrpc_xprt_switch}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j"c.rpc_clnt_setup_test_and_add_xprtasbuh1hhj(ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hxpsh]hxps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct rpc_xprt *xprth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j"c.rpc_clnt_setup_test_and_add_xprtasbuh1hhjubj)}(h h]h }(hjؚhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxprth]hxprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdatah]hdata}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjhM ubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjrhhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjrhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_clnt *clnt`` struct rpc_clnt to get the new transport ``struct rpc_xprt_switch *xps`` the rpc_xprt_switch to hold the new transport ``struct rpc_xprt *xprt`` the rpc_xprt to test ``void *data`` a struct rpc_add_xprt_test pointer that holds the test function and test function call data **Description** This is an rpc_clnt_add_xprt setup() function which returns 1 so: 1) caller of the test function must dereference the rpc_xprt_switch and the rpc_xprt. 2) test function must call rpc_xprt_switch_add_xprt, usually in the rpc_call_done routine. Upon success (return of 1), the test function adds the new transport to the rpc_clnt xprt switchh](jX)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjlubj)}(hhh](j)}(hC``struct rpc_clnt *clnt`` struct rpc_clnt to get the new transport h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjh]hstruct rpc_clnt *clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(h(struct rpc_clnt to get the new transporth]h(struct rpc_clnt to get the new transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hN``struct rpc_xprt_switch *xps`` the rpc_xprt_switch to hold the new transport h](j)}(h``struct rpc_xprt_switch *xps``h]j)}(hjʛh]hstruct rpc_xprt_switch *xps}(hj̛hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjțubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjěubj)}(hhh]jX)}(h-the rpc_xprt_switch to hold the new transporth]h-the rpc_xprt_switch to hold the new transport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjߛhM hjubah}(h]h ]h"]h$]h&]uh1jhjěubeh}(h]h ]h"]h$]h&]uh1jhjߛhM hjubj)}(h/``struct rpc_xprt *xprt`` the rpc_xprt to test h](j)}(h``struct rpc_xprt *xprt``h]j)}(hjh]hstruct rpc_xprt *xprt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(hthe rpc_xprt to testh]hthe rpc_xprt to test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hk``void *data`` a struct rpc_add_xprt_test pointer that holds the test function and test function call data h](j)}(h``void *data``h]j)}(hj<h]h void *data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj6ubj)}(hhh]jX)}(h[a struct rpc_add_xprt_test pointer that holds the test function and test function call datah]h[a struct rpc_add_xprt_test pointer that holds the test function and test function call data}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM hjubeh}(h]h ]h"]h$]h&]uh1jhjlubjX)}(h**Description**h]j)}(hjxh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjlubj)}(hhh]j)}(hThis is an rpc_clnt_add_xprt setup() function which returns 1 so: 1) caller of the test function must dereference the rpc_xprt_switch and the rpc_xprt. 2) test function must call rpc_xprt_switch_add_xprt, usually in the rpc_call_done routine. h](j)}(hAThis is an rpc_clnt_add_xprt setup() function which returns 1 so:h]hAThis is an rpc_clnt_add_xprt setup() function which returns 1 so:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(h1) caller of the test function must dereference the rpc_xprt_switch and the rpc_xprt. 2) test function must call rpc_xprt_switch_add_xprt, usually in the rpc_call_done routine.h]h1) caller of the test function must dereference the rpc_xprt_switch and the rpc_xprt. 2) test function must call rpc_xprt_switch_add_xprt, usually in the rpc_call_done routine.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjlubjX)}(h`Upon success (return of 1), the test function adds the new transport to the rpc_clnt xprt switchh]h`Upon success (return of 1), the test function adds the new transport to the rpc_clnt xprt switch}(hjȜhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrpc_clnt_add_xprt (C function)c.rpc_clnt_add_xprthNtauh1hhjhhhNhNubh)}(hhh](h)}(hint rpc_clnt_add_xprt (struct rpc_clnt *clnt, struct xprt_create *xprtargs, int (*setup)(struct rpc_clnt *, struct rpc_xprt_switch *, struct rpc_xprt *, void *), void *data)h]h)}(hint rpc_clnt_add_xprt(struct rpc_clnt *clnt, struct xprt_create *xprtargs, int (*setup)(struct rpc_clnt*, struct rpc_xprt_switch*, struct rpc_xprt*, void*), void *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hrpc_clnt_add_xprth]j%)}(hrpc_clnt_add_xprth]hrpc_clnt_add_xprt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct rpc_clnt *clnt, struct xprt_create *xprtargs, int (*setup)(struct rpc_clnt*, struct rpc_xprt_switch*, struct rpc_xprt*, void*), void *data)h](j)}(hstruct rpc_clnt *clnth](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]j')}jjsbc.rpc_clnt_add_xprtasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hclnth]hclnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubj)}(hstruct xprt_create *xprtargsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h xprt_createh]h xprt_create}(hjĝhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjƝmodnameN classnameNjj!)}j$]jnc.rpc_clnt_add_xprtasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hxprtargsh]hxprtargs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubj)}(hPint (*setup)(struct rpc_clnt*, struct rpc_xprt_switch*, struct rpc_xprt*, void*)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hjmh]h(}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsetuph]hsetup}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubj;)}(hjh]h)}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjmh]h(}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubh)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_clnth]hrpc_clnt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jnc.rpc_clnt_add_xprtasbuh1hhjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjdh]h,}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj)}(h h]h }(hjʞhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj؞hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_xprt_switchh]hrpc_xprt_switch}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jnc.rpc_clnt_add_xprtasbuh1hhjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjdh]h,}(hj!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hrpc_xprth]hrpc_xprt}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]jnc.rpc_clnt_add_xprtasbuh1hhjubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjdh]h,}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubj)}(h void *datah](j)}(hvoidh]hvoid}(hjӟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjϟubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjϟubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjϟubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjϟubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h!Add a new transport to a rpc_clnth]h!Add a new transport to a rpc_clnt}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj#hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rpc_clnt *clnt`` pointer to struct rpc_clnt ``struct xprt_create *xprtargs`` pointer to struct xprt_create ``int (*setup)(struct rpc_clnt *, struct rpc_xprt_switch *, struct rpc_xprt *, void *)`` callback to test and/or set up the connection ``void *data`` pointer to setup function data **Description** Creates a new transport using the parameters set in args and adds it to clnt. If ping is set, then test that connectivity succeeds before adding the new transport.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjBubj)}(hhh](j)}(h5``struct rpc_clnt *clnt`` pointer to struct rpc_clnt h](j)}(h``struct rpc_clnt *clnt``h]j)}(hjgh]hstruct rpc_clnt *clnt}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjaubj)}(hhh]jX)}(hpointer to struct rpc_clnth]hpointer to struct rpc_clnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj^ubj)}(h?``struct xprt_create *xprtargs`` pointer to struct xprt_create h](j)}(h ``struct xprt_create *xprtargs``h]j)}(hjh]hstruct xprt_create *xprtargs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjubj)}(hhh]jX)}(hpointer to struct xprt_createh]hpointer to struct xprt_create}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj^ubj)}(h``int (*setup)(struct rpc_clnt *, struct rpc_xprt_switch *, struct rpc_xprt *, void *)`` callback to test and/or set up the connection h](j)}(hX``int (*setup)(struct rpc_clnt *, struct rpc_xprt_switch *, struct rpc_xprt *, void *)``h]j)}(hj٠h]hTint (*setup)(struct rpc_clnt *, struct rpc_xprt_switch *, struct rpc_xprt *, void *)}(hj۠hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjנubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjӠubj)}(hhh]jX)}(h-callback to test and/or set up the connectionh]h-callback to test and/or set up the connection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjӠubeh}(h]h ]h"]h$]h&]uh1jhjhM hj^ubj)}(h.``void *data`` pointer to setup function data h](j)}(h``void *data``h]j)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hj ubj)}(hhh]jX)}(hpointer to setup function datah]hpointer to setup function data}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hM hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hM hj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubjX)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjBubjX)}(hCreates a new transport using the parameters set in args and adds it to clnt. If ping is set, then test that connectivity succeeds before adding the new transport.h]hCreates a new transport using the parameters set in args and adds it to clnt. If ping is set, then test that connectivity succeeds before adding the new transport.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhQ/var/lib/git/docbuild/linux/Documentation/networking/kapi:83: ./net/sunrpc/clnt.chM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubeh}(h]sun-rpc-subsystemah ]h"]sun rpc subsystemah$]h&]uh1hhhhhhhhK9ubeh}(h]linux-networkingah ]h"]linux networkingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hNetwork device supporth]hNetwork device support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKWubh)}(hhh](h)}(hDriver Supporth]hDriver Support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKZubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_add_pack (C function)c.dev_add_packhNtauh1hhjhhhNhNubh)}(hhh](h)}(h*void dev_add_pack (struct packet_type *pt)h]h)}(h)void dev_add_pack(struct packet_type *pt)h](j)}(hvoidh]hvoid}(hjġhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMdubj)}(h h]h }(hjӡhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjҡhMdubj)}(h dev_add_packh]j%)}(h dev_add_packh]h dev_add_pack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjҡhMdubj)}(h(struct packet_type *pt)h]j)}(hstruct packet_type *pth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h packet_typeh]h packet_type}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j')}jjsbc.dev_add_packasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpth]hpt}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjҡhMdubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjҡhMdubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjҡhMdhjhhubjS)}(hhh]jX)}(hadd packet handlerh]hadd packet handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjҡhMdubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct packet_type *pt`` packet type declaration **Description** Add a protocol handler to the networking stack. The passed :c:type:`packet_type` is linked into kernel lists and may not be freed until it has been removed from the kernel lists. This call does not sleep therefore it can not guarantee all CPU's that are in middle of receiving packets will see the new packet type (until the next received packet).h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhhjubj)}(hhh]j)}(h3``struct packet_type *pt`` packet type declaration h](j)}(h``struct packet_type *pt``h]j)}(hjŢh]hstruct packet_type *pt}(hjǢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjâubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMehjubj)}(hhh]jX)}(hpacket type declarationh]hpacket type declaration}(hjޢhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjڢhMehjۢubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڢhMehjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMghjubj )}(hX\Add a protocol handler to the networking stack. The passed :c:type:`packet_type` is linked into kernel lists and may not be freed until it has been removed from the kernel lists. This call does not sleep therefore it can not guarantee all CPU's that are in middle of receiving packets will see the new packet type (until the next received packet).h](jX)}(hAdd a protocol handler to the networking stack. The passed :c:type:`packet_type` is linked into kernel lists and may not be freed until it has been removed from the kernel lists.h](h;Add a protocol handler to the networking stack. The passed }(hjhhhNhNubh)}(h:c:type:`packet_type`h]j)}(hj$h]h packet_type}(hj&hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj packet_typeuh1hhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMfhjubhb is linked into kernel lists and may not be freed until it has been removed from the kernel lists.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjAhMfhjubjX)}(hThis call does not sleep therefore it can not guarantee all CPU's that are in middle of receiving packets will see the new packet type (until the next received packet).h]hThis call does not sleep therefore it can not guarantee all CPU’s that are in middle of receiving packets will see the new packet type (until the next received packet).}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMjhjubeh}(h]h ]h"]h$]h&]uh1j hjAhMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_remove_pack (C function)c.__dev_remove_packhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void __dev_remove_pack (struct packet_type *pt)h]h)}(h.void __dev_remove_pack(struct packet_type *pt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}hhhjhM~ubj)}(h__dev_remove_packh]j%)}(h__dev_remove_packh]h__dev_remove_pack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj}hhhjhM~ubj)}(h(struct packet_type *pt)h]j)}(hstruct packet_type *pth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjˣhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h packet_typeh]h packet_type}(hjܣhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj٣ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjޣmodnameN classnameNjj!)}j$]j')}jjsbc.__dev_remove_packasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpth]hpt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj}hhhjhM~ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjyhhhjhM~ubah}(h]jtah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM~hjvhhubjS)}(hhh]jX)}(hremove packet handlerh]hremove packet handler}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM~hj>hhubah}(h]h ]h"]h$]h&]uh1jRhjvhhhjhM~ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjYjxjYjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct packet_type *pt`` packet type declaration **Description** Remove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns. The packet type might still be in use by receivers and must not be freed until after all the CPU's have gone through a quiescent state.h](jX)}(h**Parameters**h]j)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj]ubj)}(hhh]j)}(h3``struct packet_type *pt`` packet type declaration h](j)}(h``struct packet_type *pt``h]j)}(hjh]hstruct packet_type *pt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj|ubj)}(hhh]jX)}(hpacket type declarationh]hpacket type declaration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj]ubj )}(hXhRemove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns. The packet type might still be in use by receivers and must not be freed until after all the CPU's have gone through a quiescent state.h](jX)}(hRemove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns.h](hrRemove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed }(hjפhhhNhNubh)}(h:c:type:`packet_type`h]j)}(hjh]h packet_type}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjߤubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj packet_typeuh1hhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjפubhX is removed from the kernel lists and can be freed or reused once this function returns.}(hjפhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjӤubjX)}(hThe packet type might still be in use by receivers and must not be freed until after all the CPU's have gone through a quiescent state.h]hThe packet type might still be in use by receivers and must not be freed until after all the CPU’s have gone through a quiescent state.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjӤubeh}(h]h ]h"]h$]h&]uh1j hjhMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_remove_pack (C function)c.dev_remove_packhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void dev_remove_pack (struct packet_type *pt)h]h)}(h,void dev_remove_pack(struct packet_type *pt)h](j)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhjLhMubj)}(hdev_remove_packh]j%)}(hdev_remove_packh]hdev_remove_pack}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhjLhMubj)}(h(struct packet_type *pt)h]j)}(hstruct packet_type *pth](h)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubh)}(hhh]j%)}(h packet_typeh]h packet_type}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjasbc.dev_remove_packasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjǥhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hpth]hpt}(hjԥhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubah}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhjLhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhjLhMubah}(h]j1ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjLhMhj3hhubjS)}(hhh]jX)}(hremove packet handlerh]hremove packet handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj3hhhjLhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct packet_type *pt`` packet type declaration **Description** Remove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns. This call sleeps to guarantee that no CPU is looking at the packet type after return.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h3``struct packet_type *pt`` packet type declaration h](j)}(h``struct packet_type *pt``h]j)}(hj?h]hstruct packet_type *pt}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj9ubj)}(hhh]jX)}(hpacket type declarationh]hpacket type declaration}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hX6Remove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns. This call sleeps to guarantee that no CPU is looking at the packet type after return.h](jX)}(hRemove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed :c:type:`packet_type` is removed from the kernel lists and can be freed or reused once this function returns.h](hrRemove a protocol handler that was previously added to the kernel protocol handlers by dev_add_pack(). The passed }(hjhhhNhNubh)}(h:c:type:`packet_type`h]j)}(hjh]h packet_type}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj packet_typeuh1hhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubhX is removed from the kernel lists and can be freed or reused once this function returns.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubjX)}(hUThis call sleeps to guarantee that no CPU is looking at the packet type after return.h]hUThis call sleeps to guarantee that no CPU is looking at the packet type after return.}(hjƦhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_get_iflink (C function)c.dev_get_iflinkhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1int dev_get_iflink (const struct net_device *dev)h]h)}(h0int dev_get_iflink(const struct net_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hdev_get_iflinkh]j%)}(hdev_get_iflinkh]hdev_get_iflink}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsmodnameN classnameNjj!)}j$]j')}jjsbc.dev_get_iflinkasbuh1hhj4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h!get 'iflink' value of a interfaceh]h%get ‘iflink’ value of a interface}(hj֧hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjӧhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` targeted interface **Description** Indicates the ifindex the interface is linked to. Physical interfaces have the same 'ifindex' and 'iflink' values.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h4``const struct net_device *dev`` targeted interface h](j)}(h ``const struct net_device *dev``h]j)}(hjh]hconst struct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(htargeted interfaceh]htargeted interface}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hrIndicates the ifindex the interface is linked to. Physical interfaces have the same 'ifindex' and 'iflink' values.h]jX)}(hrIndicates the ifindex the interface is linked to. Physical interfaces have the same 'ifindex' and 'iflink' values.h]hzIndicates the ifindex the interface is linked to. Physical interfaces have the same ‘ifindex’ and ‘iflink’ values.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhubah}(h]h ]h"]h$]h&]uh1j hjzhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"dev_fill_metadata_dst (C function)c.dev_fill_metadata_dsthNtauh1hhjhhhNhNubh)}(hhh](h)}(hGint dev_fill_metadata_dst (struct net_device *dev, struct sk_buff *skb)h]h)}(hFint dev_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hdev_fill_metadata_dsth]j%)}(hdev_fill_metadata_dsth]hdev_fill_metadata_dst}(hj¨hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h-(struct net_device *dev, struct sk_buff *skb)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjިhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjڨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڨubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjĨsbc.dev_fill_metadata_dstasbuh1hhjڨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڨubj;)}(hj>h]h*}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjڨubj%)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjڨubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj֨ubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]jc.dev_fill_metadata_dstasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj֨ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h#Retrieve tunnel egress information.h]h#Retrieve tunnel egress information.}(hjѩhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjΩhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` targeted interface ``struct sk_buff *skb`` The packet. **Description** For better visibility of tunnel traffic OVS needs to retrieve egress tunnel information for a packet. Following API allows user to get this info.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h.``struct net_device *dev`` targeted interface h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj ubj)}(hhh]jX)}(htargeted interfaceh]htargeted interface}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubj)}(h$``struct sk_buff *skb`` The packet. h](j)}(h``struct sk_buff *skb``h]j)}(hjKh]hstruct sk_buff *skb}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjEubj)}(hhh]jX)}(h The packet.h]h The packet.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hFor better visibility of tunnel traffic OVS needs to retrieve egress tunnel information for a packet. Following API allows user to get this info.h]jX)}(hFor better visibility of tunnel traffic OVS needs to retrieve egress tunnel information for a packet. Following API allows user to get this info.h]hFor better visibility of tunnel traffic OVS needs to retrieve egress tunnel information for a packet. Following API allows user to get this info.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_get_by_name (C function)c.__dev_get_by_namehNtauh1hhjhhhNhNubh)}(hhh](h)}(hIstruct net_device * __dev_get_by_name (struct net *net, const char *name)h]h)}(hGstruct net_device *__dev_get_by_name(struct net *net, const char *name)h](h)}(hjh]hstruct}(hjժhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjѪhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjѪhhhjhMdubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j__dev_get_by_namesbc.__dev_get_by_nameasbuh1hhjѪhhhjhMdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjѪhhhjhMdubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjѪhhhjhMdubj)}(h__dev_get_by_nameh]j%)}(hjh]h__dev_get_by_name}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjѪhhhjhMdubj)}(h#(struct net *net, const char *name)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubh)}(hhh]j%)}(hneth]hnet}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]jc.__dev_get_by_nameasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubj)}(hconst char *nameh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj̫hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hjګhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubeh}(h]h ]h"]h$]h&]j<j=uh1jhjѪhhhjhMdubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjͪhhhjhMdubah}(h]jȪah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMdhjʪhhubjS)}(hhh]jX)}(hfind a device by its nameh]hfind a device by its name}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMdhj*hhubah}(h]h ]h"]h$]h&]uh1jRhjʪhhhjhMdubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjEjxjEjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` the applicable net namespace ``const char *name`` name to find **Description** Find an interface by name. Must be called under RTNL semaphore. If the name is found a pointer to the device is returned. If the name is not found then ``NULL`` is returned. The reference counters are not incremented so the caller must be careful with locks.h](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhhjIubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjnh]hstruct net *net}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMehjhubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMehjeubj)}(h"``const char *name`` name to find h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMfhjubj)}(hhh]jX)}(h name to findh]h name to find}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhhjIubj )}(hXFind an interface by name. Must be called under RTNL semaphore. If the name is found a pointer to the device is returned. If the name is not found then ``NULL`` is returned. The reference counters are not incremented so the caller must be careful with locks.h]jX)}(hXFind an interface by name. Must be called under RTNL semaphore. If the name is found a pointer to the device is returned. If the name is not found then ``NULL`` is returned. The reference counters are not incremented so the caller must be careful with locks.h](hFind an interface by name. Must be called under RTNL semaphore. If the name is found a pointer to the device is returned. If the name is not found then }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhb is returned. The reference counters are not incremented so the caller must be careful with locks.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMghjubah}(h]h ]h"]h$]h&]uh1j hjhMghjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h dev_get_by_name_rcu (C function)c.dev_get_by_name_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hKstruct net_device * dev_get_by_name_rcu (struct net *net, const char *name)h]h)}(hIstruct net_device *dev_get_by_name_rcu(struct net *net, const char *name)h](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMyubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?hhhjPhMyubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]j')}jdev_get_by_name_rcusbc.dev_get_by_name_rcuasbuh1hhj?hhhjPhMyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?hhhjPhMyubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?hhhjPhMyubj)}(hdev_get_by_name_rcuh]j%)}(hjh]hdev_get_by_name_rcu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj?hhhjPhMyubj)}(h#(struct net *net, const char *name)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjʭhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjۭhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjحubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjݭmodnameN classnameNjj!)}j$]j~c.dev_get_by_name_rcuasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *nameh](h)}(hjh]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj)}(hcharh]hchar}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)ubj%)}(hnameh]hname}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj?hhhjPhMyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;hhhjPhMyubah}(h]j6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjPhMyhj8hhubjS)}(hhh]jX)}(hfind a device by its nameh]hfind a device by its name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jRhj8hhhjPhMyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXv**Parameters** ``struct net *net`` the applicable net namespace ``const char *name`` name to find **Description** Find an interface by name. If the name is found a pointer to the device is returned. If the name is not found then ``NULL`` is returned. The reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM}hjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjܮh]hstruct net *net}(hjޮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڮubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMzhj֮ubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhj֮ubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjӮubj)}(h"``const char *name`` name to find h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM{hjubj)}(hhh]jX)}(h name to findh]h name to find}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM{hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM{hjӮubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM}hjubjX)}(hFind an interface by name. If the name is found a pointer to the device is returned. If the name is not found then ``NULL`` is returned. The reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock.h](hsFind an interface by name. If the name is found a pointer to the device is returned. If the name is not found then }(hjfhhhNhNubj)}(h``NULL``h]hNULL}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh is returned. The reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_get_by_name (C function)c.netdev_get_by_namehNtauh1hhjhhhNhNubh)}(hhh](h)}(hqstruct net_device * netdev_get_by_name (struct net *net, const char *name, netdevice_tracker *tracker, gfp_t gfp)h]h)}(hostruct net_device *netdev_get_by_name(struct net *net, const char *name, netdevice_tracker *tracker, gfp_t gfp)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjƯhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjïubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjȯmodnameN classnameNjj!)}j$]j')}jnetdev_get_by_namesbc.netdev_get_by_nameasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hnetdev_get_by_nameh]j%)}(hjh]hnetdev_get_by_name}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hJ(struct net *net, const char *name, netdevice_tracker *tracker, gfp_t gfp)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]jc.netdev_get_by_nameasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *nameh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjȰhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnameh]hname}(hjհhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hnetdevice_tracker *trackerh](h)}(hhh]j%)}(hnetdevice_trackerh]hnetdevice_tracker}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netdev_get_by_nameasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(htrackerh]htracker}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h gfp_t gfph](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]jc.netdev_get_by_nameasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hgfph]hgfp}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hfind a device by its nameh]hfind a device by its name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX#**Parameters** ``struct net *net`` the applicable net namespace ``const char *name`` name to find ``netdevice_tracker *tracker`` tracking object for the acquired reference ``gfp_t gfp`` allocation flags for the tracker **Description** Find an interface by name. This can be called from any context and does its own locking. The returned handle has the usage count incremented and the caller must use netdev_put() to release it when it is no longer needed. ``NULL`` is returned if no matching device is found.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjݱh]hstruct net *net}(hj߱hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۱ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjױubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjױubeh}(h]h ]h"]h$]h&]uh1jhjhMhjԱubj)}(h"``const char *name`` name to find h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h name to findh]h name to find}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjԱubj)}(hJ``netdevice_tracker *tracker`` tracking object for the acquired reference h](j)}(h``netdevice_tracker *tracker``h]j)}(hjOh]hnetdevice_tracker *tracker}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjIubj)}(hhh]jX)}(h*tracking object for the acquired referenceh]h*tracking object for the acquired reference}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjԱubj)}(h/``gfp_t gfp`` allocation flags for the tracker h](j)}(h ``gfp_t gfp``h]j)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h allocation flags for the trackerh]h allocation flags for the tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjԱubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjòh]h Description}(hjŲhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hXFind an interface by name. This can be called from any context and does its own locking. The returned handle has the usage count incremented and the caller must use netdev_put() to release it when it is no longer needed. ``NULL`` is returned if no matching device is found.h]jX)}(hXFind an interface by name. This can be called from any context and does its own locking. The returned handle has the usage count incremented and the caller must use netdev_put() to release it when it is no longer needed. ``NULL`` is returned if no matching device is found.h](hFind an interface by name. This can be called from any context and does its own locking. The returned handle has the usage count incremented and the caller must use netdev_put() to release it when it is no longer needed. }(hjݲhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݲubh, is returned if no matching device is found.}(hjݲhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjٲubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_get_by_index (C function)c.__dev_get_by_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(hEstruct net_device * __dev_get_by_index (struct net *net, int ifindex)h]h)}(hCstruct net_device *__dev_get_by_index(struct net *net, int ifindex)h](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj1hMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]j')}j__dev_get_by_indexsbc.__dev_get_by_indexasbuh1hhj hhhj1hMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj1hMubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhhj1hMubj)}(h__dev_get_by_indexh]j%)}(hjah]h__dev_get_by_index}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj1hMubj)}(h(struct net *net, int ifindex)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j_c.__dev_get_by_indexasbuh1hhjubj)}(h h]h }(hjڳhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int ifindexh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hifindexh]hifindex}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj1hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMhjhhubjS)}(hhh]jX)}(hfind a device by its ifindexh]hfind a device by its ifindex}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjljxjljyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` the applicable net namespace ``int ifindex`` index of device **Description** Search for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold the RTNL semaphore.h](jX)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjpubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjh]hstruct net *net}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``int ifindex`` index of device h](j)}(h``int ifindex``h]j)}(hjδh]h int ifindex}(hjдhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̴ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjȴubj)}(hhh]jX)}(hindex of deviceh]hindex of device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȴubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjpubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjpubj )}(hSearch for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold the RTNL semaphore.h]jX)}(hSearch for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold the RTNL semaphore.h](h*Search for an interface by index. Returns }(hj#hhhNhNubj)}(h``NULL``h]hNULL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold the RTNL semaphore.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j hjChMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!dev_get_by_index_rcu (C function)c.dev_get_by_index_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hGstruct net_device * dev_get_by_index_rcu (struct net *net, int ifindex)h]h)}(hEstruct net_device *dev_get_by_index_rcu(struct net *net, int ifindex)h](h)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjwhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jdev_get_by_index_rcusbc.dev_get_by_index_rcuasbuh1hhjfhhhjwhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjwhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfhhhjwhMubj)}(hdev_get_by_index_rcuh]j%)}(hjh]hdev_get_by_index_rcu}(hjɵhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjŵubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfhhhjwhMubj)}(h(struct net *net, int ifindex)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.dev_get_by_index_rcuasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjܵubj)}(h int ifindexh](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj%)}(hifindexh]hifindex}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjܵubeh}(h]h ]h"]h$]h&]j<j=uh1jhjfhhhjwhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbhhhjwhMubah}(h]j]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwhMhj_hhubjS)}(hhh]jX)}(hfind a device by its ifindexh]hfind a device by its ifindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhjwhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXx**Parameters** ``struct net *net`` the applicable net namespace ``int ifindex`` index of device **Description** Search for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold RCU lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hj۶h]hstruct net *net}(hjݶhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٶubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjնubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjնubeh}(h]h ]h"]h$]h&]uh1jhjhMhjҶubj)}(h ``int ifindex`` index of device h](j)}(h``int ifindex``h]j)}(hjh]h int ifindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hindex of deviceh]hindex of device}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjҶubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hSearch for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold RCU lock.h]jX)}(hSearch for an interface by index. Returns ``NULL`` if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold RCU lock.h](h*Search for an interface by index. Returns }(hjihhhNhNubj)}(h``NULL``h]hNULL}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh if the device is not found or a pointer to the device. The device has not had its reference counter increased so the caller must be careful about locking. The caller must hold RCU lock.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjeubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netdev_get_by_index (C function)c.netdev_get_by_indexhNtauh1hhjhhhNhNubh)}(hhh](h)}(hmstruct net_device * netdev_get_by_index (struct net *net, int ifindex, netdevice_tracker *tracker, gfp_t gfp)h]h)}(hkstruct net_device *netdev_get_by_index(struct net *net, int ifindex, netdevice_tracker *tracker, gfp_t gfp)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjϷhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj̷ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjѷmodnameN classnameNjj!)}j$]j')}jnetdev_get_by_indexsbc.netdev_get_by_indexasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hnetdev_get_by_indexh]j%)}(hjh]hnetdev_get_by_index}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hE(struct net *net, int ifindex, netdevice_tracker *tracker, gfp_t gfp)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubh)}(hhh]j%)}(hneth]hnet}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]jc.netdev_get_by_indexasbuh1hhj&ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(h int ifindexh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hifindexh]hifindex}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(hnetdevice_tracker *trackerh](h)}(hhh]j%)}(hnetdevice_trackerh]hnetdevice_tracker}(hjҸhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjϸubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjԸmodnameN classnameNjj!)}j$]jc.netdev_get_by_indexasbuh1hhj˸ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj˸ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj˸ubj%)}(htrackerh]htracker}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj˸ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(h gfp_t gfph](h)}(hhh]j%)}(hgfp_th]hgfp_t}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj)modnameN classnameNjj!)}j$]jc.netdev_get_by_indexasbuh1hhj ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hgfph]hgfp}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hfind a device by its ifindexh]hfind a device by its ifindex}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjzhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` the applicable net namespace ``int ifindex`` index of device ``netdevice_tracker *tracker`` tracking object for the acquired reference ``gfp_t gfp`` allocation flags for the tracker **Description** Search for an interface by index. Returns NULL if the device is not found or a pointer to the device. The device returned has had a reference added and the pointer is safe until the user calls netdev_put() to indicate they have finished with it.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjh]hstruct net *net}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hj׹hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjӹhMhjԹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjӹhMhjubj)}(h ``int ifindex`` index of device h](j)}(h``int ifindex``h]j)}(hjh]h int ifindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hindex of deviceh]hindex of device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hJ``netdevice_tracker *tracker`` tracking object for the acquired reference h](j)}(h``netdevice_tracker *tracker``h]j)}(hj0h]hnetdevice_tracker *tracker}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj*ubj)}(hhh]jX)}(h*tracking object for the acquired referenceh]h*tracking object for the acquired reference}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h/``gfp_t gfp`` allocation flags for the tracker h](j)}(h ``gfp_t gfp``h]j)}(hjih]h gfp_t gfp}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjcubj)}(hhh]jX)}(h allocation flags for the trackerh]h allocation flags for the tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hSearch for an interface by index. Returns NULL if the device is not found or a pointer to the device. The device returned has had a reference added and the pointer is safe until the user calls netdev_put() to indicate they have finished with it.h]jX)}(hSearch for an interface by index. Returns NULL if the device is not found or a pointer to the device. The device returned has had a reference added and the pointer is safe until the user calls netdev_put() to indicate they have finished with it.h]hSearch for an interface by index. Returns NULL if the device is not found or a pointer to the device. The device returned has had a reference added and the pointer is safe until the user calls netdev_put() to indicate they have finished with it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j hj̺hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h dev_getbyhwaddr_rcu (C function)c.dev_getbyhwaddr_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(h^struct net_device * dev_getbyhwaddr_rcu (struct net *net, unsigned short type, const char *ha)h]h)}(h\struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type, const char *ha)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jdev_getbyhwaddr_rcusbc.dev_getbyhwaddr_rcuasbuh1hhjhhhjhMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hdev_getbyhwaddr_rcuh]j%)}(hj0h]hdev_getbyhwaddr_rcu}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h6(struct net *net, unsigned short type, const char *ha)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j.c.dev_getbyhwaddr_rcuasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hneth]hnet}(hjĻhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubj)}(hunsigned short typeh](j)}(hunsignedh]hunsigned}(hjݻhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٻubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjٻubj)}(hshorth]hshort}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjٻubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjٻubj%)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjٻubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubj)}(hconst char *hah](h)}(hjh]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj)}(hcharh]hchar}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hhah]hha}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h%find a device by its hardware addressh]h%find a device by its hardware address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` the applicable net namespace ``unsigned short type`` media type of device ``const char *ha`` hardware address **Description** Search for an interface by MAC address. Returns NULL if the device is not found or a pointer to the device. The caller must hold RCU. The returned device has not had its ref count increased and the caller must therefore be careful about lockingh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjݼh]hstruct net *net}(hj߼hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۼubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj׼ubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj׼ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjԼubj)}(h-``unsigned short type`` media type of device h](j)}(h``unsigned short type``h]j)}(hjh]hunsigned short type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hmedia type of deviceh]hmedia type of device}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjԼubj)}(h$``const char *ha`` hardware address h](j)}(h``const char *ha``h]j)}(hjOh]hconst char *ha}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjIubj)}(hhh]jX)}(hhardware addressh]hhardware address}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjԼubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hSearch for an interface by MAC address. Returns NULL if the device is not found or a pointer to the device. The caller must hold RCU. The returned device has not had its ref count increased and the caller must therefore be careful about lockingh]jX)}(hSearch for an interface by MAC address. Returns NULL if the device is not found or a pointer to the device. The caller must hold RCU. The returned device has not had its ref count increased and the caller must therefore be careful about lockingh]hSearch for an interface by MAC address. Returns NULL if the device is not found or a pointer to the device. The caller must hold RCU. The returned device has not had its ref count increased and the caller must therefore be careful about locking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_getbyhwaddr (C function)c.dev_getbyhwaddrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hZstruct net_device * dev_getbyhwaddr (struct net *net, unsigned short type, const char *ha)h]h)}(hXstruct net_device *dev_getbyhwaddr(struct net *net, unsigned short type, const char *ha)h](h)}(hjh]hstruct}(hjٽhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjսhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjսhhhjhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jdev_getbyhwaddrsbc.dev_getbyhwaddrasbuh1hhjսhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjսhhhjhMubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjսhhhjhMubj)}(hdev_getbyhwaddrh]j%)}(hjh]hdev_getbyhwaddr}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjսhhhjhMubj)}(h6(struct net *net, unsigned short type, const char *ha)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(hneth]hnet}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsmodnameN classnameNjj!)}j$]jc.dev_getbyhwaddrasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hunsigned short typeh](j)}(hunsignedh]hunsigned}(hjþhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjѾhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hshorth]hshort}(hj߾hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hconst char *hah](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hhah]hha}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubeh}(h]h ]h"]h$]h&]j<j=uh1jhjսhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjѽhhhjhMubah}(h]j̽ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjνhhubjS)}(hhh]jX)}(h%find a device by its hardware addressh]h%find a device by its hardware address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjνhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXY**Parameters** ``struct net *net`` the applicable net namespace ``unsigned short type`` media type of device ``const char *ha`` hardware address **Description** Similar to dev_getbyhwaddr_rcu(), but the owner needs to hold rtnl_lock. **Context** rtnl_lock() must be held. **Return** pointer to the net_device, or NULL if not foundh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h1``struct net *net`` the applicable net namespace h](j)}(h``struct net *net``h]j)}(hjÿh]hstruct net *net}(hjſhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hthe applicable net namespaceh]hthe applicable net namespace}(hjܿhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjؿhMhjٿubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؿhMhjubj)}(h-``unsigned short type`` media type of device h](j)}(h``unsigned short type``h]j)}(hjh]hunsigned short type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hmedia type of deviceh]hmedia type of device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``const char *ha`` hardware address h](j)}(h``const char *ha``h]j)}(hj5h]hconst char *ha}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj/ubj)}(hhh]jX)}(hhardware addressh]hhardware address}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hHSimilar to dev_getbyhwaddr_rcu(), but the owner needs to hold rtnl_lock.h]hHSimilar to dev_getbyhwaddr_rcu(), but the owner needs to hold rtnl_lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hrtnl_lock() must be held.h]hrtnl_lock() must be held.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h/pointer to the net_device, or NULL if not foundh]h/pointer to the net_device, or NULL if not found}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_valid_name (C function)c.dev_valid_namehNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool dev_valid_name (const char *name)h]h)}(h%bool dev_valid_name(const char *name)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM&ubj)}(hdev_valid_nameh]j%)}(hdev_valid_nameh]hdev_valid_name}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM&ubj)}(h(const char *name)h]j)}(hconst char *nameh](h)}(hjh]hconst}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj;ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj)}(hcharh]hchar}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj;)}(hj>h]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;ubj%)}(hnameh]hname}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM&ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM&ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM&hjhhubjS)}(hhh]jX)}(h(check if name is okay for network deviceh]h(check if name is okay for network device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM&ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const char *name`` name string **Description** Network device names need to be valid file names to allow sysfs to work. We also disallow any kind of whitespace.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM*hjubj)}(hhh]j)}(h!``const char *name`` name string h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hjubj)}(hhh]jX)}(h name stringh]h name string}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM)hjubj )}(hrNetwork device names need to be valid file names to allow sysfs to work. We also disallow any kind of whitespace.h]jX)}(hrNetwork device names need to be valid file names to allow sysfs to work. We also disallow any kind of whitespace.h]hrNetwork device names need to be valid file names to allow sysfs to work. We also disallow any kind of whitespace.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM(hj?ubah}(h]h ]h"]h$]h&]uh1j hjQhM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_alloc_name (C function)c.dev_alloc_namehNtauh1hhjhhhNhNubh)}(hhh](h)}(h=int dev_alloc_name (struct net_device *dev, const char *name)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst char *nameh](h)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(hcharh]hchar}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hnameh]hname}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjthhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjphhhjhMubah}(h]jkah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjmhhubjS)}(hhh]jX)}(hallocate a name for a deviceh]hallocate a name for a device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjmhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX9**Parameters** ``struct net_device *dev`` device ``const char *name`` name format string **Description** Passed a format string - eg "lt``d``" it will try and find a suitable id. It scans list of devices to build up a free map, then chooses the first empty slot. The caller must hold the dev_base or rtnl lock while allocating the name and adding the device in order to avoid duplicates. Limited to bits_per_byte * page size devices (ie 32K on most platforms). Returns the number of the unit assigned or a negative errno code.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``const char *name`` name format string h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj ubj)}(hhh]jX)}(hname format stringh]hname format string}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hXPassed a format string - eg "lt``d``" it will try and find a suitable id. It scans list of devices to build up a free map, then chooses the first empty slot. The caller must hold the dev_base or rtnl lock while allocating the name and adding the device in order to avoid duplicates. Limited to bits_per_byte * page size devices (ie 32K on most platforms). Returns the number of the unit assigned or a negative errno code.h]jX)}(hXPassed a format string - eg "lt``d``" it will try and find a suitable id. It scans list of devices to build up a free map, then chooses the first empty slot. The caller must hold the dev_base or rtnl lock while allocating the name and adding the device in order to avoid duplicates. Limited to bits_per_byte * page size devices (ie 32K on most platforms). Returns the number of the unit assigned or a negative errno code.h]hXPassed a format string - eg “lt``d``” it will try and find a suitable id. It scans list of devices to build up a free map, then chooses the first empty slot. The caller must hold the dev_base or rtnl lock while allocating the name and adding the device in order to avoid duplicates. Limited to bits_per_byte * page size devices (ie 32K on most platforms). Returns the number of the unit assigned or a negative errno code.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj`ubah}(h]h ]h"]h$]h&]uh1j hjrhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netdev_features_change (C function)c.netdev_features_changehNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void netdev_features_change (struct net_device *dev)h]h)}(h3void netdev_features_change(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM/ubj)}(hnetdev_features_changeh]j%)}(hnetdev_features_changeh]hnetdev_features_change}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM/ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_features_changeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM/ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM/ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM/hjhhubjS)}(hhh]jX)}(hdevice changes featuresh]hdevice changes features}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjVhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM/ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjqjxjqjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device to cause notification **Description** Called to indicate a device has changed features.h](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM3hjuubj)}(hhh]j)}(h8``struct net_device *dev`` device to cause notification h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjubj)}(hhh]jX)}(hdevice to cause notificationh]hdevice to cause notification}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjuubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM2hjuubj )}(h1Called to indicate a device has changed features.h]jX)}(hjh]h1Called to indicate a device has changed features.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjubah}(h]h ]h"]h$]h&]uh1j hjhM1hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"__netdev_notify_peers (C function)c.__netdev_notify_peershNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void __netdev_notify_peers (struct net_device *dev)h]h)}(h2void __netdev_notify_peers(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMJubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj1hMJubj)}(h__netdev_notify_peersh]j%)}(h__netdev_notify_peersh]h__netdev_notify_peers}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj1hMJubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjFsbc.__netdev_notify_peersasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj1hMJubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMJubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMJhjhhubjS)}(hhh]jX)}(h]notify network peers about existence of **dev**, to be called when rtnl lock is already held.h](h(notify network peers about existence of }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh., to be called when rtnl lock is already held.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMJhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMJubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX`**Parameters** ``struct net_device *dev`` network device **Description** Generate traffic such that interested network peers are aware of **dev**, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMNhjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj6h]hstruct net_device *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMLhj0ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMLhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMLhj-ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMNhjubjX)}(hXGenerate traffic such that interested network peers are aware of **dev**, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.h](hAGenerate traffic such that interested network peers are aware of }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netdev_notify_peers (C function)c.netdev_notify_peershNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void netdev_notify_peers (struct net_device *dev)h]h)}(h0void netdev_notify_peers(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM]ubj)}(hnetdev_notify_peersh]j%)}(hnetdev_notify_peersh]hnetdev_notify_peers}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM]ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]j')}jjsbc.netdev_notify_peersasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM]ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM]ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM]hjhhubjS)}(hhh]jX)}(h/notify network peers about existence of **dev**h](h(notify network peers about existence of }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM]hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM]ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX`**Parameters** ``struct net_device *dev`` network device **Description** Generate traffic such that interested network peers are aware of **dev**, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMahjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM^hjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM`hjubjX)}(hXGenerate traffic such that interested network peers are aware of **dev**, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.h](hAGenerate traffic such that interested network peers are aware of }(hj(hhhNhNubj)}(h**dev**h]hdev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh, such as by generating a gratuitous ARP. This may be used when a device wants to inform the rest of the network about some sort of reconfiguration such as a failover event or virtual machine migration.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(register_netdevice_notifier (C function)c.register_netdevice_notifierhNtauh1hhjhhhNhNubh)}(hhh](h)}(h;int register_netdevice_notifier (struct notifier_block *nb)h]h)}(h:int register_netdevice_notifier(struct notifier_block *nb)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjehhhjwhMubj)}(hregister_netdevice_notifierh]j%)}(hregister_netdevice_notifierh]hregister_netdevice_notifier}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjehhhjwhMubj)}(h(struct notifier_block *nb)h]j)}(hstruct notifier_block *nbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnotifier_blockh]hnotifier_block}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.register_netdevice_notifierasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjehhhjwhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjwhMubah}(h]j\ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjwhMhj^hhubjS)}(hhh]jX)}(h!register a network notifier blockh]h!register a network notifier block}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jRhj^hhhjwhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjAjxjAjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct notifier_block *nb`` notifier **Description** Register a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure. When registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.h](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjEubj)}(hhh]j)}(h'``struct notifier_block *nb`` notifier h](j)}(h``struct notifier_block *nb``h]j)}(hjjh]hstruct notifier_block *nb}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjdubj)}(hhh]jX)}(hnotifierh]hnotifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjEubjX)}(hRegister a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure.h]hRegister a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjEubjX)}(hWhen registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.h]hWhen registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*unregister_netdevice_notifier (C function)c.unregister_netdevice_notifierhNtauh1hhjhhhNhNubh)}(hhh](h)}(h=int unregister_netdevice_notifier (struct notifier_block *nb)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h#unregister a network notifier blockh]h#unregister a network notifier block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct notifier_block *nb`` notifier **Description** Unregister a notifier previously registered by register_netdevice_notifier(). The notifier is unlinked into the kernel structures and may then be reused. A negative errno code is returned on a failure. After unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h'``struct notifier_block *nb`` notifier h](j)}(h``struct notifier_block *nb``h]j)}(hjh]hstruct notifier_block *nb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hnotifierh]hnotifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hUnregister a notifier previously registered by register_netdevice_notifier(). The notifier is unlinked into the kernel structures and may then be reused. A negative errno code is returned on a failure.h]hUnregister a notifier previously registered by register_netdevice_notifier(). The notifier is unlinked into the kernel structures and may then be reused. A negative errno code is returned on a failure.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hAfter unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.h]hAfter unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,register_netdevice_notifier_net (C function)!c.register_netdevice_notifier_nethNtauh1hhjhhhNhNubh)}(hhh](h)}(hPint register_netdevice_notifier_net (struct net *net, struct notifier_block *nb)h]h)}(hOint register_netdevice_notifier_net(struct net *net, struct notifier_block *nb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM$ubj)}(hregister_netdevice_notifier_neth]j%)}(hregister_netdevice_notifier_neth]hregister_netdevice_notifier_net}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM$ubj)}(h,(struct net *net, struct notifier_block *nb)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb!c.register_netdevice_notifier_netasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct notifier_block *nbh](h)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hnotifier_blockh]hnotifier_block}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j!c.register_netdevice_notifier_netasbuh1hhj4ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM$ubah}(h]j|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM$hj~hhubjS)}(hhh]jX)}(h+register a per-netns network notifier blockh]h+register a per-netns network notifier block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jRhj~hhhjhM$ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` network namespace ``struct notifier_block *nb`` notifier **Description** Register a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure. When registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM(hjubj)}(hhh](j)}(h&``struct net *net`` network namespace h](j)}(h``struct net *net``h]j)}(hjh]hstruct net *net}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hjubj)}(hhh]jX)}(hnetwork namespaceh]hnetwork namespace}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(h'``struct notifier_block *nb`` notifier h](j)}(h``struct notifier_block *nb``h]j)}(hj3h]hstruct notifier_block *nb}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj-ubj)}(hhh]jX)}(hnotifierh]hnotifier}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhM&hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhM&hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM(hjubjX)}(hRegister a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure.h]hRegister a notifier to be called when network device events occur. The notifier passed is linked into the kernel structures and must not be reused until it has been unregistered. A negative errno code is returned on a failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hjubjX)}(hWhen registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.h]hWhen registered all registration and up events are replayed to the new notifier to allow device to have a race free view of the network device list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM,hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.unregister_netdevice_notifier_net (C function)#c.unregister_netdevice_notifier_nethNtauh1hhjhhhNhNubh)}(hhh](h)}(hRint unregister_netdevice_notifier_net (struct net *net, struct notifier_block *nb)h]h)}(hQint unregister_netdevice_notifier_net(struct net *net, struct notifier_block *nb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM?ubj)}(h!unregister_netdevice_notifier_neth]j%)}(h!unregister_netdevice_notifier_neth]h!unregister_netdevice_notifier_net}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM?ubj)}(h,(struct net *net, struct notifier_block *nb)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb#c.unregister_netdevice_notifier_netasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct notifier_block *nbh](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubh)}(hhh]j%)}(hnotifier_blockh]hnotifier_block}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j9#c.unregister_netdevice_notifier_netasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjmubj%)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM?ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM?ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM?hjhhubjS)}(hhh]jX)}(h-unregister a per-netns network notifier blockh]h-unregister a per-netns network notifier block}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM?ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net *net`` network namespace ``struct notifier_block *nb`` notifier **Description** Unregister a notifier previously registered by register_netdevice_notifier_net(). The notifier is unlinked from the kernel structures and may then be reused. A negative errno code is returned on a failure. After unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMChjubj)}(hhh](j)}(h&``struct net *net`` network namespace h](j)}(h``struct net *net``h]j)}(hj3h]hstruct net *net}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMAhj-ubj)}(hhh]jX)}(hnetwork namespaceh]hnetwork namespace}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMAhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMAhj*ubj)}(h'``struct notifier_block *nb`` notifier h](j)}(h``struct notifier_block *nb``h]j)}(hjlh]hstruct notifier_block *nb}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMBhjfubj)}(hhh]jX)}(hnotifierh]hnotifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMBhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMDhjubjX)}(hUnregister a notifier previously registered by register_netdevice_notifier_net(). The notifier is unlinked from the kernel structures and may then be reused. A negative errno code is returned on a failure.h]hUnregister a notifier previously registered by register_netdevice_notifier_net(). The notifier is unlinked from the kernel structures and may then be reused. A negative errno code is returned on a failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMChjubjX)}(hAfter unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.h]hAfter unregistering unregister and down device events are synthesized for all devices on the device list to the removed notifier to remove the need for special case cleanup code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMHhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%call_netdevice_notifiers (C function)c.call_netdevice_notifiershNtauh1hhjhhhNhNubh)}(hhh](h)}(hHint call_netdevice_notifiers (unsigned long val, struct net_device *dev)h]h)}(hGint call_netdevice_notifiers(unsigned long val, struct net_device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hcall_netdevice_notifiersh]j%)}(hcall_netdevice_notifiersh]hcall_netdevice_notifiers}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h+(unsigned long val, struct net_device *dev)h](j)}(hunsigned long valh](j)}(hunsignedh]hunsigned}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj)}(hlongh]hlong}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj%)}(hvalh]hval}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.call_netdevice_notifiersasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h call all network notifier blocksh]h call all network notifier blocks}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$jxj$jyjzj{uh1hhhhjhNhNubj})}(hX-**Parameters** ``unsigned long val`` value passed unmodified to notifier function ``struct net_device *dev`` net_device pointer passed unmodified to notifier function **Description** Call all network notifier blocks. Parameters and return value are as for raw_notifier_call_chain().h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj(ubj)}(hhh](j)}(hC``unsigned long val`` value passed unmodified to notifier function h](j)}(h``unsigned long val``h]j)}(hjMh]hunsigned long val}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjGubj)}(hhh]jX)}(h,value passed unmodified to notifier functionh]h,value passed unmodified to notifier function}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjDubj)}(hU``struct net_device *dev`` net_device pointer passed unmodified to notifier function h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h9net_device pointer passed unmodified to notifier functionh]h9net_device pointer passed unmodified to notifier function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj(ubj )}(hdCall all network notifier blocks. Parameters and return value are as for raw_notifier_call_chain().h]jX)}(hdCall all network notifier blocks. Parameters and return value are as for raw_notifier_call_chain().h]hdCall all network notifier blocks. Parameters and return value are as for raw_notifier_call_chain().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_forward_skb (C function)c.dev_forward_skbhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAint dev_forward_skb (struct net_device *dev, struct sk_buff *skb)h]h)}(h@int dev_forward_skb(struct net_device *dev, struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhM ubj)}(hdev_forward_skbh]j%)}(hdev_forward_skbh]hdev_forward_skb}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhM ubj)}(h-(struct net_device *dev, struct sk_buff *skb)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j')}jj3sbc.dev_forward_skbasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.dev_forward_skbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h loopback an skb to another netifh]h loopback an skb to another netif}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj=hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` destination network device ``struct sk_buff *skb`` buffer to forward **Description** return values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped, but freed) dev_forward_skb can be used for injecting an skb from the start_xmit function of one device into the receive queue of another device. The receiving device may be in another namespace, so we have to clear all information in the skb that could impact namespace isolation.h](jX)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj\ubj)}(hhh](j)}(h6``struct net_device *dev`` destination network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj{ubj)}(hhh]jX)}(hdestination network deviceh]hdestination network device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubj)}(h*``struct sk_buff *skb`` buffer to forward h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hbuffer to forwardh]hbuffer to forward}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj\ubj)}(hhh]j)}(h_return values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped, but freed) h](j)}(hreturn values:h]hreturn values:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hONET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped, but freed)h]hONET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped, but freed)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj\ubjX)}(hdev_forward_skb can be used for injecting an skb from the start_xmit function of one device into the receive queue of another device.h]hdev_forward_skb can be used for injecting an skb from the start_xmit function of one device into the receive queue of another device.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj\ubjX)}(hThe receiving device may be in another namespace, so we have to clear all information in the skb that could impact namespace isolation.h]hThe receiving device may be in another namespace, so we have to clear all information in the skb that could impact namespace isolation.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_nit_active_rcu (C function)c.dev_nit_active_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6bool dev_nit_active_rcu (const struct net_device *dev)h]h)}(h5bool dev_nit_active_rcu(const struct net_device *dev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hdev_nit_active_rcuh]j%)}(hdev_nit_active_rcuh]hdev_nit_active_rcu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.dev_nit_active_rcuasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{hhhjhM ubah}(h]jvah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjxhhubjS)}(hhh]jX)}(h4return true if any network interface taps are in useh]h4return true if any network interface taps are in use}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjZhhubah}(h]h ]h"]h$]h&]uh1jRhjxhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjujxjujyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device to check for the presence of taps **Description** The caller must hold the RCU lockh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjyubj)}(hhh]j)}(hR``const struct net_device *dev`` network device to check for the presence of taps h](j)}(h ``const struct net_device *dev``h]j)}(hjh]hconst struct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(h0network device to check for the presence of tapsh]h0network device to check for the presence of taps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjyubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjyubjX)}(h!The caller must hold the RCU lockh]h!The caller must hold the RCU lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)netif_set_real_num_rx_queues (C function)c.netif_set_real_num_rx_queueshNtauh1hhjhhhNhNubh)}(hhh](h)}(hKint netif_set_real_num_rx_queues (struct net_device *dev, unsigned int rxq)h]h)}(hJint netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj,hM ubj)}(hnetif_set_real_num_rx_queuesh]j%)}(hnetif_set_real_num_rx_queuesh]hnetif_set_real_num_rx_queues}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj,hM ubj)}(h*(struct net_device *dev, unsigned int rxq)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]j')}jjAsbc.netif_set_real_num_rx_queuesasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(hunsigned int rxqh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hrxqh]hrxq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj,hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj,hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,hM hjhhubjS)}(hhh]jX)}(h#set actual number of RX queues usedh]h#set actual number of RX queues used}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj,hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj,hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjGjxjGjyjzj{uh1hhhhjhNhNubj})}(hXV**Parameters** ``struct net_device *dev`` Network device ``unsigned int rxq`` Actual number of RX queues **Description** This must be called either with the rtnl_lock held or before registration of the net device. Returns 0 on success, or a negative error code. If called before registration, it always succeeds.h](jX)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjKubj)}(hhh](j)}(h*``struct net_device *dev`` Network device h](j)}(h``struct net_device *dev``h]j)}(hjph]hstruct net_device *dev}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjjubj)}(hhh]jX)}(hNetwork deviceh]hNetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjgubj)}(h0``unsigned int rxq`` Actual number of RX queues h](j)}(h``unsigned int rxq``h]j)}(hjh]hunsigned int rxq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hActual number of RX queuesh]hActual number of RX queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjgubeh}(h]h ]h"]h$]h&]uh1jhjKubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjKubj )}(hThis must be called either with the rtnl_lock held or before registration of the net device. Returns 0 on success, or a negative error code. If called before registration, it always succeeds.h]jX)}(hThis must be called either with the rtnl_lock held or before registration of the net device. Returns 0 on success, or a negative error code. If called before registration, it always succeeds.h]hThis must be called either with the rtnl_lock held or before registration of the net device. Returns 0 on success, or a negative error code. If called before registration, it always succeeds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubah}(h]h ]h"]h$]h&]uh1j hj hM hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&netif_set_real_num_queues (C function)c.netif_set_real_num_queueshNtauh1hhjhhhNhNubh)}(hhh](h)}(hZint netif_set_real_num_queues (struct net_device *dev, unsigned int txq, unsigned int rxq)h]h)}(hYint netif_set_real_num_queues(struct net_device *dev, unsigned int txq, unsigned int rxq)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhjAhM ubj)}(hnetif_set_real_num_queuesh]j%)}(hnetif_set_real_num_queuesh]hnetif_set_real_num_queues}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/hhhjAhM ubj)}(h<(struct net_device *dev, unsigned int txq, unsigned int rxq)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjVsbc.netif_set_real_num_queuesasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhubj)}(hunsigned int txqh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(htxqh]htxq}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhubj)}(hunsigned int rxqh](j)}(hunsignedh]hunsigned}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj%)}(hrxqh]hrxq}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjhubeh}(h]h ]h"]h$]h&]j<j=uh1jhj/hhhjAhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+hhhjAhM ubah}(h]j&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhM hj(hhubjS)}(hhh]jX)}(h*set actual number of RX and TX queues usedh]h*set actual number of RX and TX queues used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhj(hhhjAhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX$**Parameters** ``struct net_device *dev`` Network device ``unsigned int txq`` Actual number of TX queues ``unsigned int rxq`` Actual number of RX queues **Description** Set the real number of both TX and RX queues. Does nothing if the number of queues is already correct.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh](j)}(h*``struct net_device *dev`` Network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hNetwork deviceh]hNetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h0``unsigned int txq`` Actual number of TX queues h](j)}(h``unsigned int txq``h]j)}(hjh]hunsigned int txq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj ubj)}(hhh]jX)}(hActual number of TX queuesh]hActual number of TX queues}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hM hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hjubj)}(h0``unsigned int rxq`` Actual number of RX queues h](j)}(h``unsigned int rxq``h]j)}(hjHh]hunsigned int rxq}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjBubj)}(hhh]jX)}(hActual number of RX queuesh]hActual number of RX queues}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj )}(hfSet the real number of both TX and RX queues. Does nothing if the number of queues is already correct.h]jX)}(hfSet the real number of both TX and RX queues. Does nothing if the number of queues is already correct.h]hfSet the real number of both TX and RX queues. Does nothing if the number of queues is already correct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_set_tso_max_size (C function)c.netif_set_tso_max_sizehNtauh1hhjhhhNhNubh)}(hhh](h)}(hGvoid netif_set_tso_max_size (struct net_device *dev, unsigned int size)h]h)}(hFvoid netif_set_tso_max_size(struct net_device *dev, unsigned int size)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hnetif_set_tso_max_sizeh]j%)}(hnetif_set_tso_max_sizeh]hnetif_set_tso_max_size}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h+(struct net_device *dev, unsigned int size)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jjsbc.netif_set_tso_max_sizeasbuh1hhj ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h(set the max size of TSO frames supportedh]h(set the max size of TSO frames supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` netdev to update ``unsigned int size`` max skb->len of a TSO frame **Description** Set the limit on the size of TSO super-frames the device can handle. Unless explicitly set the stack will assume the value of ``GSO_LEGACY_MAX_SIZE``.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh](j)}(h,``struct net_device *dev`` netdev to update h](j)}(h``struct net_device *dev``h]j)}(hj$h]hstruct net_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hnetdev to updateh]hnetdev to update}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hM hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjubj)}(h2``unsigned int size`` max skb->len of a TSO frame h](j)}(h``unsigned int size``h]j)}(hj]h]hunsigned int size}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjWubj)}(hhh]jX)}(hmax skb->len of a TSO frameh]hmax skb->len of a TSO frame}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhM hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubjX)}(hSet the limit on the size of TSO super-frames the device can handle. Unless explicitly set the stack will assume the value of ``GSO_LEGACY_MAX_SIZE``.h](h~Set the limit on the size of TSO super-frames the device can handle. Unless explicitly set the stack will assume the value of }(hjhhhNhNubj)}(h``GSO_LEGACY_MAX_SIZE``h]hGSO_LEGACY_MAX_SIZE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_set_tso_max_segs (C function)c.netif_set_tso_max_segshNtauh1hhjhhhNhNubh)}(hhh](h)}(hGvoid netif_set_tso_max_segs (struct net_device *dev, unsigned int segs)h]h)}(hFvoid netif_set_tso_max_segs(struct net_device *dev, unsigned int segs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hnetif_set_tso_max_segsh]j%)}(hnetif_set_tso_max_segsh]hnetif_set_tso_max_segs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h+(struct net_device *dev, unsigned int segs)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j')}jjsbc.netif_set_tso_max_segsasbuh1hhj(ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubj)}(hunsigned int segsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsegsh]hsegs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h,set the max number of segs supported for TSOh]h,set the max number of segs supported for TSO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX1**Parameters** ``struct net_device *dev`` netdev to update ``unsigned int segs`` max number of TCP segments **Description** Set the limit on the number of TCP segments the device can generate from a single TSO super-frame. Unless explicitly set the stack will assume the value of ``GSO_MAX_SEGS``.h](jX)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh](j)}(h,``struct net_device *dev`` netdev to update h](j)}(h``struct net_device *dev``h]j)}(hjAh]hstruct net_device *dev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj;ubj)}(hhh]jX)}(hnetdev to updateh]hnetdev to update}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhM hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM hj8ubj)}(h1``unsigned int segs`` max number of TCP segments h](j)}(h``unsigned int segs``h]j)}(hjzh]hunsigned int segs}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjtubj)}(hhh]jX)}(hmax number of TCP segmentsh]hmax number of TCP segments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM hj8ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubjX)}(hSet the limit on the number of TCP segments the device can generate from a single TSO super-frame. Unless explicitly set the stack will assume the value of ``GSO_MAX_SEGS``.h](hSet the limit on the number of TCP segments the device can generate from a single TSO super-frame. Unless explicitly set the stack will assume the value of }(hjhhhNhNubj)}(h``GSO_MAX_SEGS``h]h GSO_MAX_SEGS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netif_inherit_tso_max (C function)c.netif_inherit_tso_maxhNtauh1hhjhhhNhNubh)}(hhh](h)}(hQvoid netif_inherit_tso_max (struct net_device *to, const struct net_device *from)h]h)}(hPvoid netif_inherit_tso_max(struct net_device *to, const struct net_device *from)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hnetif_inherit_tso_maxh]j%)}(hnetif_inherit_tso_maxh]hnetif_inherit_tso_max}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h6(struct net_device *to, const struct net_device *from)h](j)}(hstruct net_device *toh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]j')}jj/sbc.netif_inherit_tso_maxasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(htoh]hto}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hconst struct net_device *fromh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netif_inherit_tso_maxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfromh]hfrom}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h3copy all TSO limits from a lower device to an upperh]h3copy all TSO limits from a lower device to an upper}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjThhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *to`` netdev to update ``const struct net_device *from`` netdev from which to copy the limitsh](jX)}(h**Parameters**h]j)}(hjyh]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjsubj)}(hhh](j)}(h+``struct net_device *to`` netdev to update h](j)}(h``struct net_device *to``h]j)}(hjh]hstruct net_device *to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hnetdev to updateh]hnetdev to update}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hF``const struct net_device *from`` netdev from which to copy the limitsh](j)}(h!``const struct net_device *from``h]j)}(hjh]hconst struct net_device *from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(h$netdev from which to copy the limitsh]h$netdev from which to copy the limits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-netif_get_num_default_rss_queues (C function)"c.netif_get_num_default_rss_queueshNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int netif_get_num_default_rss_queues (void)h]h)}(h*int netif_get_num_default_rss_queues(void)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj9hM ubj)}(h netif_get_num_default_rss_queuesh]j%)}(h netif_get_num_default_rss_queuesh]h netif_get_num_default_rss_queues}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj9hM ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`ubah}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj9hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj#hhhj9hM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9hM hj hhubjS)}(hhh]jX)}(hdefault number of RSS queuesh]hdefault number of RSS queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj9hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``void`` no arguments **Description** Default value is the number of physical cores if there are only 1 or 2, or divided by 2 if there are more.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chKhjubj)}(hhh]jX)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chKhjubjX)}(hjDefault value is the number of physical cores if there are only 1 or 2, or divided by 2 if there are more.h]hjDefault value is the number of physical cores if there are only 1 or 2, or divided by 2 if there are more.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_device_detach (C function)c.netif_device_detachhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void netif_device_detach (struct net_device *dev)h]h)}(h0void netif_device_detach(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjahM ubj)}(hnetif_device_detachh]j%)}(hnetif_device_detachh]hnetif_device_detach}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjahM ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjvsbc.netif_device_detachasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjahM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjKhhhjahM ubah}(h]jFah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahM hjHhhubjS)}(hhh]jX)}(hmark device as removedh]hmark device as removed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjahM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj+jxj+jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Mark device as removed from system and therefore no longer available.h](jX)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj/ubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjTh]hstruct net_device *dev}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjNubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihM hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj/ubjX)}(hEMark device as removed from system and therefore no longer available.h]hEMark device as removed from system and therefore no longer available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_device_attach (C function)c.netif_device_attachhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void netif_device_attach (struct net_device *dev)h]h)}(h0void netif_device_attach(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hnetif_device_attachh]j%)}(hnetif_device_attachh]hnetif_device_attach}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jjsbc.netif_device_attachasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(hmark device as attachedh]hmark device as attached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Mark device as attached from system and restart if needed.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubjX)}(h:Mark device as attached from system and restart if needed.h]h:Mark device as attached from system and restart if needed.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_loopback_xmit (C function)c.dev_loopback_xmithNtauh1hhjhhhNhNubh)}(hhh](h)}(hMint dev_loopback_xmit (struct net *net, struct sock *sk, struct sk_buff *skb)h]h)}(hLint dev_loopback_xmit(struct net *net, struct sock *sk, struct sk_buff *skb)h](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQhhhjchMubj)}(hdev_loopback_xmith]j%)}(hdev_loopback_xmith]hdev_loopback_xmit}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjQhhhjchMubj)}(h7(struct net *net, struct sock *sk, struct sk_buff *skb)h](j)}(hstruct net *neth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjxsbc.dev_loopback_xmitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hneth]hnet}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sock *skh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsockh]hsock}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]jc.dev_loopback_xmitasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskh]hsk}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.dev_loopback_xmitasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjQhhhjchMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjchMubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjchMhjJhhubjS)}(hhh]jX)}(hloop back **skb**h](h loop back }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjJhhhjchMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net *net`` network namespace this loopback is happening in ``struct sock *sk`` sk needed to be a netfilter okfn ``struct sk_buff *skb`` buffer to transmith](jX)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(hD``struct net *net`` network namespace this loopback is happening in h](j)}(h``struct net *net``h]j)}(hjDh]hstruct net *net}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj>ubj)}(hhh]jX)}(h/network namespace this loopback is happening inh]h/network namespace this loopback is happening in}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhj;ubj)}(h5``struct sock *sk`` sk needed to be a netfilter okfn h](j)}(h``struct sock *sk``h]j)}(hj}h]hstruct sock *sk}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjwubj)}(hhh]jX)}(h sk needed to be a netfilter okfnh]h sk needed to be a netfilter okfn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubj)}(h*``struct sk_buff *skb`` buffer to transmith](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hbuffer to transmith]hbuffer to transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj;ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_queue_xmit (C function)c.__dev_queue_xmithNtauh1hhjhhhNhNubh)}(hhh](h)}(hEint __dev_queue_xmit (struct sk_buff *skb, struct net_device *sb_dev)h]h)}(hDint __dev_queue_xmit(struct sk_buff *skb, struct net_device *sb_dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMsubj)}(h__dev_queue_xmith]j%)}(h__dev_queue_xmith]h__dev_queue_xmit}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMsubj)}(h0(struct sk_buff *skb, struct net_device *sb_dev)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j')}jj3sbc.__dev_queue_xmitasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubj)}(hstruct net_device *sb_devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__dev_queue_xmitasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsb_devh]hsb_dev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMsubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMsubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMshjhhubjS)}(hhh]jX)}(htransmit a bufferh]htransmit a buffer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMshj=hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMsubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1hhhhjhNhNubj})}(hXs**Parameters** ``struct sk_buff *skb`` buffer to transmit ``struct net_device *sb_dev`` suboordinate device used for L2 forwarding offload **Description** Queue a buffer for transmission to a network device. The caller must have set the device and priority and built the buffer before calling this function. The function can be called from an interrupt. When calling this method, interrupts MUST be enabled. This is because the BH enable code must have IRQs enabled so that it will not deadlock. Regardless of the return value, the skb is consumed, so it is currently difficult to retry a send to this method. (You can bump the ref count before sending to hold a reference for retry if you are careful.) **Return** * 0 - buffer successfully transmitted * positive qdisc return code - NET_XMIT_DROP etc. * negative errno - other errorsh](jX)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMwhj\ubj)}(hhh](j)}(h+``struct sk_buff *skb`` buffer to transmit h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMthj{ubj)}(hhh]jX)}(hbuffer to transmith]hbuffer to transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMthjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMthjxubj)}(hQ``struct net_device *sb_dev`` suboordinate device used for L2 forwarding offload h](j)}(h``struct net_device *sb_dev``h]j)}(hjh]hstruct net_device *sb_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMuhjubj)}(hhh]jX)}(h2suboordinate device used for L2 forwarding offloadh]h2suboordinate device used for L2 forwarding offload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjxubeh}(h]h ]h"]h$]h&]uh1jhj\ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMwhj\ubjX)}(hQueue a buffer for transmission to a network device. The caller must have set the device and priority and built the buffer before calling this function. The function can be called from an interrupt.h]hQueue a buffer for transmission to a network device. The caller must have set the device and priority and built the buffer before calling this function. The function can be called from an interrupt.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMvhj\ubjX)}(hWhen calling this method, interrupts MUST be enabled. This is because the BH enable code must have IRQs enabled so that it will not deadlock.h]hWhen calling this method, interrupts MUST be enabled. This is because the BH enable code must have IRQs enabled so that it will not deadlock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMzhj\ubjX)}(hRegardless of the return value, the skb is consumed, so it is currently difficult to retry a send to this method. (You can bump the ref count before sending to hold a reference for retry if you are careful.)h]hRegardless of the return value, the skb is consumed, so it is currently difficult to retry a send to this method. (You can bump the ref count before sending to hold a reference for retry if you are careful.)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM}hj\ubjX)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj\ubj4H)}(hhh](j9H)}(h<0 - buffer successfully transmittedh]jX)}(hjUh]h<0 - buffer successfully transmitted}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjSubah}(h]h ]h"]h$]h&]uh1j8HhjPubj9H)}(h/positive qdisc return code - NET_XMIT_DROP etc.h]jX)}(hjmh]h/positive qdisc return code - NET_XMIT_DROP etc.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjkubah}(h]h ]h"]h$]h&]uh1j8HhjPubj9H)}(h)negative errno - other errorsh]jX)}(hjh]h)negative errno - other errors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubah}(h]h ]h"]h$]h&]uh1j8HhjPubeh}(h]h ]h"]h$]h&]jIj>uh1j3HhjdhMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h rps_may_expire_flow (C function)c.rps_may_expire_flowhNtauh1hhjhhhNhNubh)}(hhh](h)}(h\bool rps_may_expire_flow (struct net_device *dev, u16 rxq_index, u32 flow_id, u16 filter_id)h]h)}(h[bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index, u32 flow_id, u16 filter_id)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM4ubj)}(hrps_may_expire_flowh]j%)}(hrps_may_expire_flowh]hrps_may_expire_flow}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM4ubj)}(hC(struct net_device *dev, u16 rxq_index, u32 flow_id, u16 filter_id)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.rps_may_expire_flowasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u16 rxq_indexh](h)}(hhh]j%)}(hu16h]hu16}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j7c.rps_may_expire_flowasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj%)}(h rxq_indexh]h rxq_index}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 flow_idh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j7c.rps_may_expire_flowasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hflow_idh]hflow_id}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u16 filter_idh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j7c.rps_may_expire_flowasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h filter_idh]h filter_id}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM4ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM4ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM4hjhhubjS)}(hhh]jX)}(h3check whether an RFS hardware filter may be removedh]h3check whether an RFS hardware filter may be removed}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM4hjUhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM4ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjpjxjpjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` Device on which the filter was set ``u16 rxq_index`` RX queue index ``u32 flow_id`` Flow ID passed to ndo_rx_flow_steer() ``u16 filter_id`` Filter ID returned by ndo_rx_flow_steer() **Description** Drivers that implement ndo_rx_flow_steer() should periodically call this function for each installed filter and remove the filters for which it returns ``true``.h](jX)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM8hjtubj)}(hhh](j)}(h>``struct net_device *dev`` Device on which the filter was set h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM5hjubj)}(hhh]jX)}(h"Device on which the filter was seth]h"Device on which the filter was set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(h!``u16 rxq_index`` RX queue index h](j)}(h``u16 rxq_index``h]j)}(hjh]h u16 rxq_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM6hjubj)}(hhh]jX)}(hRX queue indexh]hRX queue index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h6``u32 flow_id`` Flow ID passed to ndo_rx_flow_steer() h](j)}(h``u32 flow_id``h]j)}(hj h]h u32 flow_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM7hjubj)}(hhh]jX)}(h%Flow ID passed to ndo_rx_flow_steer()h]h%Flow ID passed to ndo_rx_flow_steer()}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM7hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjubj)}(h<``u16 filter_id`` Filter ID returned by ndo_rx_flow_steer() h](j)}(h``u16 filter_id``h]j)}(hjDh]h u16 filter_id}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM8hj>ubj)}(hhh]jX)}(h)Filter ID returned by ndo_rx_flow_steer()h]h)Filter ID returned by ndo_rx_flow_steer()}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhM8hjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhM8hjubeh}(h]h ]h"]h$]h&]uh1jhjtubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM:hjtubjX)}(hDrivers that implement ndo_rx_flow_steer() should periodically call this function for each installed filter and remove the filters for which it returns ``true``.h](hDrivers that implement ndo_rx_flow_steer() should periodically call this function for each installed filter and remove the filters for which it returns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM9hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__netif_rx (C function) c.__netif_rxhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$int __netif_rx (struct sk_buff *skb)h]h)}(h#int __netif_rx(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM0ubj)}(h __netif_rxh]j%)}(h __netif_rxh]h __netif_rx}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM0ubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]j')}jjsb c.__netif_rxasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM0ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM0ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM0hjhhubjS)}(hhh]jX)}(h&Slightly optimized version of netif_rxh]h&Slightly optimized version of netif_rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM0ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX **Parameters** ``struct sk_buff *skb`` buffer to post **Description** This behaves as netif_rx except that it does not disable bottom halves. As a result this function may only be invoked from the interrupt context (either hard or soft interrupt).h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM4hjubj)}(hhh]j)}(h'``struct sk_buff *skb`` buffer to post h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjubj)}(hhh]jX)}(hbuffer to posth]hbuffer to post}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM3hjubj )}(hThis behaves as netif_rx except that it does not disable bottom halves. As a result this function may only be invoked from the interrupt context (either hard or soft interrupt).h]jX)}(hThis behaves as netif_rx except that it does not disable bottom halves. As a result this function may only be invoked from the interrupt context (either hard or soft interrupt).h]hThis behaves as netif_rx except that it does not disable bottom halves. As a result this function may only be invoked from the interrupt context (either hard or soft interrupt).}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM2hj(ubah}(h]h ]h"]h$]h&]uh1j hj:hM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_rx (C function) c.netif_rxhNtauh1hhjhhhNhNubh)}(hhh](h)}(h"int netif_rx (struct sk_buff *skb)h]h)}(h!int netif_rx(struct sk_buff *skb)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMEubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjohMEubj)}(hnetif_rxh]j%)}(hnetif_rxh]hnetif_rx}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]hhhjohMEubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.netif_rxasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj]hhhjohMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjohMEubah}(h]jTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjohMEhjVhhubjS)}(hhh]jX)}(hpost buffer to the network codeh]hpost buffer to the network code}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jRhjVhhhjohMEubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9jxj9jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to post **Description** This function receives a packet from a device driver and queues it for the upper (protocol) levels to process via the backlog NAPI device. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. The network buffer is passed via the backlog NAPI device. Modern NIC driver should use NAPI and GRO. This function can used from interrupt and from process context. The caller from process context must not disable interrupts before invoking this function. return values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped)h](jX)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMIhj=ubj)}(hhh]j)}(h'``struct sk_buff *skb`` buffer to post h](j)}(h``struct sk_buff *skb``h]j)}(hjbh]hstruct sk_buff *skb}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMFhj\ubj)}(hhh]jX)}(hbuffer to posth]hbuffer to post}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhMFhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMFhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMHhj=ubj )}(hXQThis function receives a packet from a device driver and queues it for the upper (protocol) levels to process via the backlog NAPI device. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. The network buffer is passed via the backlog NAPI device. Modern NIC driver should use NAPI and GRO. This function can used from interrupt and from process context. The caller from process context must not disable interrupts before invoking this function. return values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped)h](jX)}(hXThis function receives a packet from a device driver and queues it for the upper (protocol) levels to process via the backlog NAPI device. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. The network buffer is passed via the backlog NAPI device. Modern NIC driver should use NAPI and GRO. This function can used from interrupt and from process context. The caller from process context must not disable interrupts before invoking this function.h]hXThis function receives a packet from a device driver and queues it for the upper (protocol) levels to process via the backlog NAPI device. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. The network buffer is passed via the backlog NAPI device. Modern NIC driver should use NAPI and GRO. This function can used from interrupt and from process context. The caller from process context must not disable interrupts before invoking this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMGhjubjX)}(hSreturn values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped)h]hSreturn values: NET_RX_SUCCESS (no congestion) NET_RX_DROP (packet was dropped)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMQhjubeh}(h]h ]h"]h$]h&]uh1j hjhMGhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&netdev_is_rx_handler_busy (C function)c.netdev_is_rx_handler_busyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h7bool netdev_is_rx_handler_busy (struct net_device *dev)h]h)}(h6bool netdev_is_rx_handler_busy(struct net_device *dev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetdev_is_rx_handler_busyh]j%)}(hnetdev_is_rx_handler_busyh]hnetdev_is_rx_handler_busy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjWmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_is_rx_handler_busyasbuh1hhj3ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h&check if receive handler is registeredh]h&check if receive handler is registered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device to check **Description** Check if a receive handler is already registered for a given device. Return true if there one. The caller must hold the rtnl_mutex.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h+``struct net_device *dev`` device to check h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hdevice to checkh]hdevice to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hCheck if a receive handler is already registered for a given device. Return true if there one. The caller must hold the rtnl_mutex.h](jX)}(h^Check if a receive handler is already registered for a given device. Return true if there one.h]h^Check if a receive handler is already registered for a given device. Return true if there one.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjLubjX)}(h$The caller must hold the rtnl_mutex.h]h$The caller must hold the rtnl_mutex.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjLubeh}(h]h ]h"]h$]h&]uh1j hj^hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'netdev_rx_handler_register (C function)c.netdev_rx_handler_registerhNtauh1hhjhhhNhNubh)}(hhh](h)}(hmint netdev_rx_handler_register (struct net_device *dev, rx_handler_func_t *rx_handler, void *rx_handler_data)h]h)}(hlint netdev_rx_handler_register(struct net_device *dev, rx_handler_func_t *rx_handler, void *rx_handler_data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetdev_rx_handler_registerh]j%)}(hnetdev_rx_handler_registerh]hnetdev_rx_handler_register}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hN(struct net_device *dev, rx_handler_func_t *rx_handler, void *rx_handler_data)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_rx_handler_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hrx_handler_func_t *rx_handlerh](h')}(hhh]j%)}(hrx_handler_func_th]hrx_handler_func_t}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j c.netdev_rx_handler_registerasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(h rx_handlerh]h rx_handler}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *rx_handler_datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hrx_handler_datah]hrx_handler_data}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hregister receive handlerh]hregister receive handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to register a handler for ``rx_handler_func_t *rx_handler`` receive handler to register ``void *rx_handler_data`` data pointer that is used by rx handler **Description** Register a receive handler for a device. This handler will then be called from __netif_receive_skb. A negative errno code is returned on a failure. The caller must hold the rtnl_mutex. For a general description of rx_handler, see enum rx_handler_result.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h<``struct net_device *dev`` device to register a handler for h](j)}(h``struct net_device *dev``h]j)}(hj,h]hstruct net_device *dev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj&ubj)}(hhh]jX)}(h device to register a handler forh]h device to register a handler for}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhj#ubj)}(h>``rx_handler_func_t *rx_handler`` receive handler to register h](j)}(h!``rx_handler_func_t *rx_handler``h]j)}(hjeh]hrx_handler_func_t *rx_handler}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj_ubj)}(hhh]jX)}(hreceive handler to registerh]hreceive handler to register}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhj#ubj)}(hB``void *rx_handler_data`` data pointer that is used by rx handler h](j)}(h``void *rx_handler_data``h]j)}(hjh]hvoid *rx_handler_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h'data pointer that is used by rx handlerh]h'data pointer that is used by rx handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj#ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hRegister a receive handler for a device. This handler will then be called from __netif_receive_skb. A negative errno code is returned on a failure. The caller must hold the rtnl_mutex. For a general description of rx_handler, see enum rx_handler_result.h](jX)}(hRegister a receive handler for a device. This handler will then be called from __netif_receive_skb. A negative errno code is returned on a failure.h]hRegister a receive handler for a device. This handler will then be called from __netif_receive_skb. A negative errno code is returned on a failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h$The caller must hold the rtnl_mutex.h]h$The caller must hold the rtnl_mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hDFor a general description of rx_handler, see enum rx_handler_result.h]hDFor a general description of rx_handler, see enum rx_handler_result.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)netdev_rx_handler_unregister (C function)c.netdev_rx_handler_unregisterhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:void netdev_rx_handler_unregister (struct net_device *dev)h]h)}(h9void netdev_rx_handler_unregister(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBhhhjThMubj)}(hnetdev_rx_handler_unregisterh]j%)}(hnetdev_rx_handler_unregisterh]hnetdev_rx_handler_unregister}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjBhhhjThMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjisbc.netdev_rx_handler_unregisterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubah}(h]h ]h"]h$]h&]j<j=uh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj>hhhjThMubah}(h]j9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThMhj;hhubjS)}(hhh]jX)}(hunregister receive handlerh]hunregister receive handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhjThMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device to unregister a handler from **Description** Unregister a receive handler from a device. The caller must hold the rtnl_mutex.h](jX)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj"ubj)}(hhh]j)}(h?``struct net_device *dev`` device to unregister a handler from h](j)}(h``struct net_device *dev``h]j)}(hjGh]hstruct net_device *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjAubj)}(hhh]jX)}(h#device to unregister a handler fromh]h#device to unregister a handler from}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj"ubj )}(hQUnregister a receive handler from a device. The caller must hold the rtnl_mutex.h](jX)}(h+Unregister a receive handler from a device.h]h+Unregister a receive handler from a device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h$The caller must hold the rtnl_mutex.h]h$The caller must hold the rtnl_mutex.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ]h"]h$]h&]uh1j hjhMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_receive_skb_core (C function)c.netif_receive_skb_corehNtauh1hhjhhhNhNubh)}(hhh](h)}(h0int netif_receive_skb_core (struct sk_buff *skb)h]h)}(h/int netif_receive_skb_core(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetif_receive_skb_coreh]j%)}(hnetif_receive_skb_coreh]hnetif_receive_skb_core}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jjsbc.netif_receive_skb_coreasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h,special purpose version of netif_receive_skbh]h,special purpose version of netif_receive_skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to process **Description** More direct receive version of netif_receive_skb(). It should only be used by callers that have a need to skip RPS and Generic XDP. Caller must also take care of handling if ``(page_is_)pfmemalloc``. This function may only be called from softirq context and interrupts should be enabled. Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h*``struct sk_buff *skb`` buffer to process h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hbuffer to processh]hbuffer to process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj )}(hXMore direct receive version of netif_receive_skb(). It should only be used by callers that have a need to skip RPS and Generic XDP. Caller must also take care of handling if ``(page_is_)pfmemalloc``. This function may only be called from softirq context and interrupts should be enabled. Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh](jX)}(hMore direct receive version of netif_receive_skb(). It should only be used by callers that have a need to skip RPS and Generic XDP. Caller must also take care of handling if ``(page_is_)pfmemalloc``.h](hMore direct receive version of netif_receive_skb(). It should only be used by callers that have a need to skip RPS and Generic XDP. Caller must also take care of handling if }(hj6hhhNhNubj)}(h``(page_is_)pfmemalloc``h]h(page_is_)pfmemalloc}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj2ubjX)}(hWThis function may only be called from softirq context and interrupts should be enabled.h]hWThis function may only be called from softirq context and interrupts should be enabled.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj2ubjX)}(h^Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh]h^Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was dropped}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj2ubeh}(h]h ]h"]h$]h&]uh1j hjVhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_receive_skb (C function)c.netif_receive_skbhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+int netif_receive_skb (struct sk_buff *skb)h]h)}(h*int netif_receive_skb(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetif_receive_skbh]j%)}(hnetif_receive_skbh]hnetif_receive_skb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netif_receive_skbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hskbh]hskb}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h#process receive buffer from networkh]h#process receive buffer from network}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to process **Description** netif_receive_skb() is the main receive data processing function. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. This function may only be called from softirq context and interrupts should be enabled. Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh](jX)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjwubj)}(hhh]j)}(h*``struct sk_buff *skb`` buffer to process h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hbuffer to processh]hbuffer to process}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjwubj )}(hXlnetif_receive_skb() is the main receive data processing function. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers. This function may only be called from softirq context and interrupts should be enabled. Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh](jX)}(hnetif_receive_skb() is the main receive data processing function. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers.h]hnetif_receive_skb() is the main receive data processing function. It always succeeds. The buffer may be dropped during processing for congestion control or by the protocol layers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hWThis function may only be called from softirq context and interrupts should be enabled.h]hWThis function may only be called from softirq context and interrupts should be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(h^Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was droppedh]h^Return values (usually ignored): NET_RX_SUCCESS: no congestion NET_RX_DROP: packet was dropped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ]h"]h$]h&]uh1j hjhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_receive_skb_list (C function)c.netif_receive_skb_listhNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void netif_receive_skb_list (struct list_head *head)h]h)}(h3void netif_receive_skb_list(struct list_head *head)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhjRhMubj)}(hnetif_receive_skb_listh]j%)}(hnetif_receive_skb_listh]hnetif_receive_skb_list}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhjRhMubj)}(h(struct list_head *head)h]j)}(hstruct list_head *headh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubh)}(hhh]j%)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjgsbc.netif_receive_skb_listasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}ubj%)}(hheadh]hhead}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubah}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj<hhhjRhMubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMhj9hhubjS)}(hhh]jX)}(h)process many receive buffers from networkh]h)process many receive buffers from network}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj9hhhjRhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXF**Parameters** ``struct list_head *head`` list of skbs to process. **Description** Since return value of netif_receive_skb() is normally ignored, and wouldn't be meaningful for a list, this function returns void. This function may only be called from softirq context and interrupts should be enabled.h](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj ubj)}(hhh]j)}(h4``struct list_head *head`` list of skbs to process. h](j)}(h``struct list_head *head``h]j)}(hjEh]hstruct list_head *head}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj?ubj)}(hhh]jX)}(hlist of skbs to process.h]hlist of skbs to process.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hj ubj )}(hSince return value of netif_receive_skb() is normally ignored, and wouldn't be meaningful for a list, this function returns void. This function may only be called from softirq context and interrupts should be enabled.h](jX)}(hSince return value of netif_receive_skb() is normally ignored, and wouldn't be meaningful for a list, this function returns void.h]hSince return value of netif_receive_skb() is normally ignored, and wouldn’t be meaningful for a list, this function returns void.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubjX)}(hWThis function may only be called from softirq context and interrupts should be enabled.h]hWThis function may only be called from softirq context and interrupts should be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hjubeh}(h]h ]h"]h$]h&]uh1j hjhM hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__napi_schedule (C function)c.__napi_schedulehNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void __napi_schedule (struct napi_struct *n)h]h)}(h+void __napi_schedule(struct napi_struct *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(h__napi_scheduleh]j%)}(h__napi_scheduleh]h__napi_schedule}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]j')}jjsbc.__napi_scheduleasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(hschedule for receiveh]hschedule for receive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *n`` entry to schedule **Description** The entry's receive function will be scheduled to run. Consider using __napi_schedule_irqoff() if hard irqs are masked.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h,``struct napi_struct *n`` entry to schedule h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(hentry to scheduleh]hentry to schedule}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubjX)}(hwThe entry's receive function will be scheduled to run. Consider using __napi_schedule_irqoff() if hard irqs are masked.h]hyThe entry’s receive function will be scheduled to run. Consider using __napi_schedule_irqoff() if hard irqs are masked.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_schedule_prep (C function)c.napi_schedule_prephNtauh1hhjhhhNhNubh)}(hhh](h)}(h/bool napi_schedule_prep (struct napi_struct *n)h]h)}(h.bool napi_schedule_prep(struct napi_struct *n)h](j)}(hjTh]hbool}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZhhhjkhMubj)}(hnapi_schedule_preph]j%)}(hnapi_schedule_preph]hnapi_schedule_prep}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZhhhjkhMubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_schedule_prepasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjZhhhjkhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjVhhhjkhMubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkhMhjShhubjS)}(hhh]jX)}(hcheck if napi can be scheduledh]hcheck if napi can be scheduled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjShhhjkhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct napi_struct *n`` napi context **Description** Test if NAPI routine is already running, and if not mark it as running. This is used as a condition variable to insure only one NAPI poll instance runs. We also make sure there is no pending NAPI disable.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj8ubj)}(hhh]j)}(h'``struct napi_struct *n`` napi context h](j)}(h``struct napi_struct *n``h]j)}(hj]h]hstruct napi_struct *n}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjWubj)}(hhh]jX)}(h napi contexth]h napi context}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj8ubjX)}(hTest if NAPI routine is already running, and if not mark it as running. This is used as a condition variable to insure only one NAPI poll instance runs. We also make sure there is no pending NAPI disable.h]hTest if NAPI routine is already running, and if not mark it as running. This is used as a condition variable to insure only one NAPI poll instance runs. We also make sure there is no pending NAPI disable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#__napi_schedule_irqoff (C function)c.__napi_schedule_irqoffhNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void __napi_schedule_irqoff (struct napi_struct *n)h]h)}(h2void __napi_schedule_irqoff(struct napi_struct *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM;ubj)}(h__napi_schedule_irqoffh]j%)}(h__napi_schedule_irqoffh]h__napi_schedule_irqoff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM;ubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jjsbc.__napi_schedule_irqoffasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM;ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM;ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM;hjhhubjS)}(hhh]jX)}(hschedule for receiveh]hschedule for receive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM;hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM;ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXA**Parameters** ``struct napi_struct *n`` entry to schedule **Description** Variant of __napi_schedule() assuming hard irqs are masked. On PREEMPT_RT enabled kernels this maps to __napi_schedule() because the interrupt disabled assumption might not be true due to force-threaded interrupts and spinlock substitution.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?hjubj)}(hhh]j)}(h,``struct napi_struct *n`` entry to schedule h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM<hjubj)}(hhh]jX)}(hentry to scheduleh]hentry to schedule}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM>hjubjX)}(h;Variant of __napi_schedule() assuming hard irqs are masked.h]h;Variant of __napi_schedule() assuming hard irqs are masked.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM=hjubjX)}(hOn PREEMPT_RT enabled kernels this maps to __napi_schedule() because the interrupt disabled assumption might not be true due to force-threaded interrupts and spinlock substitution.h]hOn PREEMPT_RT enabled kernels this maps to __napi_schedule() because the interrupt disabled assumption might not be true due to force-threaded interrupts and spinlock substitution.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netif_threaded_enable (C function)c.netif_threaded_enablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void netif_threaded_enable (struct net_device *dev)h]h)}(h2void netif_threaded_enable(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM<ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhjzhM<ubj)}(hnetif_threaded_enableh]j%)}(hnetif_threaded_enableh]hnetif_threaded_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhjzhM<ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netif_threaded_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjzhM<ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhjzhM<ubah}(h]j_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjzhM<hjahhubjS)}(hhh]jX)}(henable threaded NAPIsh]henable threaded NAPIs}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM<hj)hhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjzhM<ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjDjxjDjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` net_device instance **Description** Enable threaded mode for the NAPI instances of the device. This may be useful for devices where multiple NAPI instances get scheduled by a single interrupt. Threaded NAPI allows moving the NAPI processing to cores other than the core where IRQ is mapped. This function should be called before **dev** is registered.h](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM@hjHubj)}(hhh]j)}(h/``struct net_device *dev`` net_device instance h](j)}(h``struct net_device *dev``h]j)}(hjmh]hstruct net_device *dev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM=hjgubj)}(hhh]jX)}(hnet_device instanceh]hnet_device instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjdubah}(h]h ]h"]h$]h&]uh1jhjHubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?hjHubjX)}(hEnable threaded mode for the NAPI instances of the device. This may be useful for devices where multiple NAPI instances get scheduled by a single interrupt. Threaded NAPI allows moving the NAPI processing to cores other than the core where IRQ is mapped.h]hEnable threaded mode for the NAPI instances of the device. This may be useful for devices where multiple NAPI instances get scheduled by a single interrupt. Threaded NAPI allows moving the NAPI processing to cores other than the core where IRQ is mapped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM>hjHubjX)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjCubj)}(hunsigned int queue_indexh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h queue_indexh]h queue_index}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjCubj)}(henum netdev_queue_type typeh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(hnetdev_queue_typeh]hnetdev_queue_type}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]jc.netif_queue_set_napiasbuh1hhj ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(htypeh]htype}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjCubj)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjmubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netif_queue_set_napiasbuh1hhjmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjmubj%)}(hnapih]hnapi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjCubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMMhjhhubjS)}(hhh]jX)}(hAssociate queue with the napih]hAssociate queue with the napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to which NAPI and queue belong ``unsigned int queue_index`` Index of queue ``enum netdev_queue_type type`` queue type as RX or TX ``struct napi_struct *napi`` NAPI context, pass NULL to clear previously set NAPI **Description** Set queue with its corresponding napi context. This should be done after registering the NAPI handler for the queue-vector and the queues have been mapped to the corresponding interrupt vector.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMQhjubj)}(hhh](j)}(hA``struct net_device *dev`` device to which NAPI and queue belong h](j)}(h``struct net_device *dev``h]j)}(hj3h]hstruct net_device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMNhj-ubj)}(hhh]jX)}(h%device to which NAPI and queue belongh]h%device to which NAPI and queue belong}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMNhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMNhj*ubj)}(h,``unsigned int queue_index`` Index of queue h](j)}(h``unsigned int queue_index``h]j)}(hjlh]hunsigned int queue_index}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMOhjfubj)}(hhh]jX)}(hIndex of queueh]hIndex of queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMOhj*ubj)}(h7``enum netdev_queue_type type`` queue type as RX or TX h](j)}(h``enum netdev_queue_type type``h]j)}(hjh]henum netdev_queue_type type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMPhjubj)}(hhh]jX)}(hqueue type as RX or TXh]hqueue type as RX or TX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhj*ubj)}(hR``struct napi_struct *napi`` NAPI context, pass NULL to clear previously set NAPI h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMQhjubj)}(hhh]jX)}(h4NAPI context, pass NULL to clear previously set NAPIh]h4NAPI context, pass NULL to clear previously set NAPI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMShjubjX)}(hSet queue with its corresponding napi context. This should be done after registering the NAPI handler for the queue-vector and the queues have been mapped to the corresponding interrupt vector.h]hSet queue with its corresponding napi context. This should be done after registering the NAPI handler for the queue-vector and the queues have been mapped to the corresponding interrupt vector.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_disable (C function)c.napi_disablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h)void napi_disable (struct napi_struct *n)h]h)}(h(void napi_disable(struct napi_struct *n)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZhhhjlhMubj)}(h napi_disableh]j%)}(h napi_disableh]h napi_disable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZhhhjlhMubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjVhhhjlhMubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlhMhjShhubjS)}(hhh]jX)}(hprevent NAPI from schedulingh]hprevent NAPI from scheduling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjShhhjlhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj5jxj5jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *n`` NAPI context **Description** Stop NAPI from being scheduled on this context. Waits till any outstanding processing completes. Takes netdev_lock() for associated net_device.h](jX)}(h**Parameters**h]j)}(hj?h]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj9ubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hj^h]hstruct napi_struct *n}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjXubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj9ubjX)}(hStop NAPI from being scheduled on this context. Waits till any outstanding processing completes. Takes netdev_lock() for associated net_device.h]hStop NAPI from being scheduled on this context. Waits till any outstanding processing completes. Takes netdev_lock() for associated net_device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_enable (C function) c.napi_enablehNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void napi_enable (struct napi_struct *n)h]h)}(h'void napi_enable(struct napi_struct *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h napi_enableh]j%)}(h napi_enableh]h napi_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]j')}jjsb c.napi_enableasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(henable NAPI schedulingh]henable NAPI scheduling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *n`` NAPI context **Description** Enable scheduling of a NAPI instance. Must be paired with napi_disable(). Takes netdev_lock() for associated net_device.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hxEnable scheduling of a NAPI instance. Must be paired with napi_disable(). Takes netdev_lock() for associated net_device.h]hxEnable scheduling of a NAPI instance. Must be paired with napi_disable(). Takes netdev_lock() for associated net_device.}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!netdev_has_upper_dev (C function)c.netdev_has_upper_devhNtauh1hhjhhhNhNubh)}(hhh](h)}(hPbool netdev_has_upper_dev (struct net_device *dev, struct net_device *upper_dev)h]h)}(hObool netdev_has_upper_dev(struct net_device *dev, struct net_device *upper_dev)h](j)}(hjTh]hbool}(hj^ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.ubj)}(h h]h }(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZ hhhjk hM.ubj)}(hnetdev_has_upper_devh]j%)}(hnetdev_has_upper_devh]hnetdev_has_upper_dev}(hj~ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjz ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZ hhhjk hM.ubj)}(h6(struct net_device *dev, struct net_device *upper_dev)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.netdev_has_upper_devasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct net_device *upper_devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj* hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj' ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj, modnameN classnameNjj!)}j$]j c.netdev_has_upper_devasbuh1hhj ubj)}(h h]h }(hjH hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjV hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(h upper_devh]h upper_dev}(hjc hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjZ hhhjk hM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjV hhhjk hM.ubah}(h]jQ ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjk hM.hjS hhubjS)}(hhh]jX)}(h,Check if device is linked to an upper deviceh]h,Check if device is linked to an upper device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj hhubah}(h]h ]h"]h$]h&]uh1jRhjS hhhjk hM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hXW**Parameters** ``struct net_device *dev`` device ``struct net_device *upper_dev`` upper device to check **Description** Find out if a device is linked to specified upper device and return true in case it is. Note that this checks only immediate upper device, not through a complete stack of devices. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM2hj ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj h]hstruct net_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM/hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM/hj ubj)}(h7``struct net_device *upper_dev`` upper device to check h](j)}(h ``struct net_device *upper_dev``h]j)}(hj h]hstruct net_device *upper_dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hj ubj)}(hhh]jX)}(hupper device to checkh]hupper device to check}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM0hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM0hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjB h]h Description}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM2hj ubjX)}(hFind out if a device is linked to specified upper device and return true in case it is. Note that this checks only immediate upper device, not through a complete stack of devices. The caller must hold the RTNL lock.h]hFind out if a device is linked to specified upper device and return true in case it is. Note that this checks only immediate upper device, not through a complete stack of devices. The caller must hold the RTNL lock.}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)netdev_has_upper_dev_all_rcu (C function)c.netdev_has_upper_dev_all_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hXbool netdev_has_upper_dev_all_rcu (struct net_device *dev, struct net_device *upper_dev)h]h)}(hWbool netdev_has_upper_dev_all_rcu(struct net_device *dev, struct net_device *upper_dev)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMEubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMEubj)}(hnetdev_has_upper_dev_all_rcuh]j%)}(hnetdev_has_upper_dev_all_rcuh]hnetdev_has_upper_dev_all_rcu}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMEubj)}(h6(struct net_device *dev, struct net_device *upper_dev)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.netdev_has_upper_dev_all_rcuasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hstruct net_device *upper_devh](h)}(hjh]hstruct}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1 ubj)}(h h]h }(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1 ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjS hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjP ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjU modnameN classnameNjj!)}j$]j c.netdev_has_upper_dev_all_rcuasbuh1hhj1 ubj)}(h h]h }(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1 ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1 ubj%)}(h upper_devh]h upper_dev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1 ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMEubah}(h]jz ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMEhj| hhubjS)}(hhh]jX)}(h,Check if device is linked to an upper deviceh]h,Check if device is linked to an upper device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMEhj hhubah}(h]h ]h"]h$]h&]uh1jRhj| hhhj hMEubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(hX+**Parameters** ``struct net_device *dev`` device ``struct net_device *upper_dev`` upper device to check **Description** Find out if a device is linked to specified upper device and return true in case it is. Note that this checks the entire upper device chain. The caller must hold rcu lock.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMIhj ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj h]hstruct net_device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMFhj ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMFhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMFhj ubj)}(h7``struct net_device *upper_dev`` upper device to check h](j)}(h ``struct net_device *upper_dev``h]j)}(hj0 h]hstruct net_device *upper_dev}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMGhj* ubj)}(hhh]jX)}(hupper device to checkh]hupper device to check}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjE hMGhjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jhjE hMGhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjk h]h Description}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMIhj ubjX)}(hFind out if a device is linked to specified upper device and return true in case it is. Note that this checks the entire upper device chain. The caller must hold rcu lock.h]hFind out if a device is linked to specified upper device and return true in case it is. Note that this checks the entire upper device chain. The caller must hold rcu lock.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMHhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%netdev_has_any_upper_dev (C function)c.netdev_has_any_upper_devhNtauh1hhjhhhNhNubh)}(hhh](h)}(h6bool netdev_has_any_upper_dev (struct net_device *dev)h]h)}(h5bool netdev_has_any_upper_dev(struct net_device *dev)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM[ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hM[ubj)}(hnetdev_has_any_upper_devh]j%)}(hnetdev_has_any_upper_devh]hnetdev_has_any_upper_dev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hM[ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.netdev_has_any_upper_devasbuh1hhj ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hM[ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hM[ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hM[hj hhubjS)}(hhh]jX)}(h(Check if device is linked to some deviceh]h(Check if device is linked to some device}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM[hjlhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hM[ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device **Description** Find out if a device is linked to an upper device and return true in case it is. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM_hjubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM\hjubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM^hjubjX)}(htFind out if a device is linked to an upper device and return true in case it is. The caller must hold the RTNL lock.h]htFind out if a device is linked to an upper device and return true in case it is. The caller must hold the RTNL lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM]hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(netdev_master_upper_dev_get (C function)c.netdev_master_upper_dev_gethNtauh1hhjhhhNhNubh)}(hhh](h)}(hHstruct net_device * netdev_master_upper_dev_get (struct net_device *dev)h]h)}(hFstruct net_device *netdev_master_upper_dev_get(struct net_device *dev)h](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhhj=hMjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j')}jnetdev_master_upper_dev_getsbc.netdev_master_upper_dev_getasbuh1hhj,hhhj=hMjubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhhj=hMjubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,hhhj=hMjubj)}(hnetdev_master_upper_dev_geth]j%)}(hjmh]hnetdev_master_upper_dev_get}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj,hhhj=hMjubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jkc.netdev_master_upper_dev_getasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj,hhhj=hMjubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj(hhhj=hMjubah}(h]j#ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hMjhj%hhubjS)}(hhh]jX)}(hGet master upper deviceh]hGet master upper device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMjhj(hhubah}(h]h ]h"]h$]h&]uh1jRhj%hhhj=hMjubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device **Description** Find a master upper device and return pointer to it or NULL in case it's not there. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMnhjGubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjlh]hstruct net_device *dev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMkhjfubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjcubah}(h]h ]h"]h$]h&]uh1jhjGubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMmhjGubjX)}(hwFind a master upper device and return pointer to it or NULL in case it's not there. The caller must hold the RTNL lock.h]hyFind a master upper device and return pointer to it or NULL in case it’s not there. The caller must hold the RTNL lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMlhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*netdev_upper_get_next_dev_rcu (C function)c.netdev_upper_get_next_dev_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hcstruct net_device * netdev_upper_get_next_dev_rcu (struct net_device *dev, struct list_head **iter)h]h)}(hastruct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev, struct list_head **iter)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jnetdev_upper_get_next_dev_rcusbc.netdev_upper_get_next_dev_rcuasbuh1hhjhhhjhMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hnetdev_upper_get_next_dev_rcuh]j%)}(hj)h]hnetdev_upper_get_next_dev_rcu}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h1(struct net_device *dev, struct list_head **iter)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j'c.netdev_upper_get_next_dev_rcuasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(hstruct list_head **iterh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j'c.netdev_upper_get_next_dev_rcuasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hiterh]hiter}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h Get the next dev from upper listh]h Get the next dev from upper list}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjahhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|jxj|jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device ``struct list_head **iter`` list_head ** of the current position **Description** Gets the next device from the dev's upper list, starting from iter position. The caller must hold RCU read lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``struct list_head **iter`` list_head ** of the current position h](j)}(h``struct list_head **iter``h]j)}(hjh]hstruct list_head **iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubj)}(hhh]jX)}(h$list_head ** of the current positionh]h$list_head ** of the current position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubjX)}(hpGets the next device from the dev's upper list, starting from iter position. The caller must hold RCU read lock.h]hrGets the next device from the dev’s upper list, starting from iter position. The caller must hold RCU read lock.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*netdev_lower_get_next_private (C function)c.netdev_lower_get_next_privatehNtauh1hhjhhhNhNubh)}(hhh](h)}(hVvoid * netdev_lower_get_next_private (struct net_device *dev, struct list_head **iter)h]h)}(hTvoid *netdev_lower_get_next_private(struct net_device *dev, struct list_head **iter)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMT ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZhhhjlhMT ubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZhhhjlhMT ubj)}(hnetdev_lower_get_next_privateh]j%)}(hnetdev_lower_get_next_privateh]hnetdev_lower_get_next_private}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjZhhhjlhMT ubj)}(h1(struct net_device *dev, struct list_head **iter)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_lower_get_next_privateasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct list_head **iterh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h list_headh]h list_head}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]jc.netdev_lower_get_next_privateasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hiterh]hiter}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjZhhhjlhMT ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjVhhhjlhMT ubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlhMT hjShhubjS)}(hhh]jX)}(h4Get the next ->private from the lower neighbour listh]h4Get the next ->private from the lower neighbour list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMT hjhhubah}(h]h ]h"]h$]h&]uh1jRhjShhhjlhMT ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXy**Parameters** ``struct net_device *dev`` device ``struct list_head **iter`` list_head ** of the current position **Description** Gets the next netdev_adjacent->private from the dev's lower neighbour list, starting from iter position. The caller must hold either hold the RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMX hjubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMV hjubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMV hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMV hjubj)}(hA``struct list_head **iter`` list_head ** of the current position h](j)}(h``struct list_head **iter``h]j)}(hj"h]hstruct list_head **iter}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMW hjubj)}(hhh]jX)}(h$list_head ** of the current positionh]h$list_head ** of the current position}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMW hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMW hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMY hjubjX)}(hGets the next netdev_adjacent->private from the dev's lower neighbour list, starting from iter position. The caller must hold either hold the RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.h]hGets the next netdev_adjacent->private from the dev’s lower neighbour list, starting from iter position. The caller must hold either hold the RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMX hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.netdev_lower_get_next_private_rcu (C function)#c.netdev_lower_get_next_private_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hZvoid * netdev_lower_get_next_private_rcu (struct net_device *dev, struct list_head **iter)h]h)}(hXvoid *netdev_lower_get_next_private_rcu(struct net_device *dev, struct list_head **iter)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMo ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMo ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMo ubj)}(h!netdev_lower_get_next_private_rcuh]j%)}(h!netdev_lower_get_next_private_rcuh]h!netdev_lower_get_next_private_rcu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMo ubj)}(h1(struct net_device *dev, struct list_head **iter)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsb#c.netdev_lower_get_next_private_rcuasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct list_head **iterh](h)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hhh]j%)}(h list_headh]h list_head}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j&#c.netdev_lower_get_next_private_rcuasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj%)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMo ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMo ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMo hjhhubjS)}(hhh]jX)}(hAGet the next ->private from the lower neighbour list, RCU varianth]hAGet the next ->private from the lower neighbour list, RCU variant}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMo hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMo ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device ``struct list_head **iter`` list_head ** of the current position **Description** Gets the next netdev_adjacent->private from the dev's lower neighbour list, starting from iter position. The caller must hold RCU read lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMs hjubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj-h]hstruct net_device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMr hj'ubj)}(hhh]jX)}(hdeviceh]hdevice}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhMr hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMr hj$ubj)}(hA``struct list_head **iter`` list_head ** of the current position h](j)}(h``struct list_head **iter``h]j)}(hjfh]hstruct list_head **iter}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMs hj`ubj)}(hhh]jX)}(h$list_head ** of the current positionh]h$list_head ** of the current position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMs hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMs hj$ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMu hjubjX)}(hGets the next netdev_adjacent->private from the dev's lower neighbour list, starting from iter position. The caller must hold RCU read lock.h]hGets the next netdev_adjacent->private from the dev’s lower neighbour list, starting from iter position. The caller must hold RCU read lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMt hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netdev_lower_get_next (C function)c.netdev_lower_get_nexthNtauh1hhjhhhNhNubh)}(hhh](h)}(hNvoid * netdev_lower_get_next (struct net_device *dev, struct list_head **iter)h]h)}(hLvoid *netdev_lower_get_next(struct net_device *dev, struct list_head **iter)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM ubj)}(hnetdev_lower_get_nexth]j%)}(hnetdev_lower_get_nexth]hnetdev_lower_get_next}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h1(struct net_device *dev, struct list_head **iter)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_lower_get_nextasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hstruct list_head **iterh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h list_headh]h list_head}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jjc.netdev_lower_get_nextasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hiterh]hiter}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h1Get the next device from the lower neighbour listh]h1Get the next device from the lower neighbour list}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hj-hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhjhNhNubj})}(hX`**Parameters** ``struct net_device *dev`` device ``struct list_head **iter`` list_head ** of the current position **Description** Gets the next netdev_adjacent from the dev's lower neighbour list, starting from iter position. The caller must hold RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.h](jX)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjLubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjqh]hstruct net_device *dev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjkubj)}(hhh]jX)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhM hjhubj)}(hA``struct list_head **iter`` list_head ** of the current position h](j)}(h``struct list_head **iter``h]j)}(hjh]hstruct list_head **iter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjubj)}(hhh]jX)}(h$list_head ** of the current positionh]h$list_head ** of the current position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjhubeh}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjLubjX)}(hGets the next netdev_adjacent from the dev's lower neighbour list, starting from iter position. The caller must hold RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.h]hGets the next netdev_adjacent from the dev’s lower neighbour list, starting from iter position. The caller must hold RTNL lock or its own locking that guarantees that the neighbour lower list will remain unchanged.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/netdev_lower_get_first_private_rcu (C function)$c.netdev_lower_get_first_private_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid * netdev_lower_get_first_private_rcu (struct net_device *dev)h]h)}(h@void *netdev_lower_get_first_private_rcu(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj8hM!ubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&hhhj8hM!ubj)}(h"netdev_lower_get_first_private_rcuh]j%)}(h"netdev_lower_get_first_private_rcuh]h"netdev_lower_get_first_private_rcu}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj8hM!ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjZsb$c.netdev_lower_get_first_private_rcuasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjlubah}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj8hM!ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj8hM!ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hM!hjhhubjS)}(hhh]jX)}(hBGet the first ->private from the lower neighbour list, RCU varianth]hBGet the first ->private from the lower neighbour list, RCU variant}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj8hM!ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device **Description** Gets the first netdev_adjacent->private from the dev's lower neighbour list. The caller must hold RCU read lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj8h]hstruct net_device *dev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hj2ubj)}(hhh]jX)}(hdeviceh]hdevice}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhM!hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM!hj/ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubjX)}(hpGets the first netdev_adjacent->private from the dev's lower neighbour list. The caller must hold RCU read lock.h]hrGets the first netdev_adjacent->private from the dev’s lower neighbour list. The caller must hold RCU read lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,netdev_master_upper_dev_get_rcu (C function)!c.netdev_master_upper_dev_get_rcuhNtauh1hhjhhhNhNubh)}(hhh](h)}(hLstruct net_device * netdev_master_upper_dev_get_rcu (struct net_device *dev)h]h)}(hJstruct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM!ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jnetdev_master_upper_dev_get_rcusb!c.netdev_master_upper_dev_get_rcuasbuh1hhjhhhjhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM!ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM!ubj)}(hnetdev_master_upper_dev_get_rcuh]j%)}(hjh]hnetdev_master_upper_dev_get_rcu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM!ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j!c.netdev_master_upper_dev_get_rcuasbuh1hhj.ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.ubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM!ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM!hjhhubjS)}(hhh]jX)}(hGet master upper deviceh]hGet master upper device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM!ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device **Description** Find a master upper device and return pointer to it or NULL in case it's not there. The caller must hold the RCU read lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubj)}(hhh]jX)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM!hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM!hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubjX)}(h{Find a master upper device and return pointer to it or NULL in case it's not there. The caller must hold the RCU read lock.h]h}Find a master upper device and return pointer to it or NULL in case it’s not there. The caller must hold the RCU read lock.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM!hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netdev_upper_dev_link (C function)c.netdev_upper_dev_linkhNtauh1hhjhhhNhNubh)}(hhh](h)}(hpint netdev_upper_dev_link (struct net_device *dev, struct net_device *upper_dev, struct netlink_ext_ack *extack)h]h)}(hoint netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhjhM"ubj)}(hnetdev_upper_dev_linkh]j%)}(hnetdev_upper_dev_linkh]hnetdev_upper_dev_link}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjphhhjhM"ubj)}(hV(struct net_device *dev, struct net_device *upper_dev, struct netlink_ext_ack *extack)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netdev_upper_dev_linkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net_device *upper_devh](h)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]jc.netdev_upper_dev_linkasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h upper_devh]h upper_dev}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netdev_upper_dev_linkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hextackh]hextack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjphhhjhM"ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjhM"ubah}(h]jgah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM"hjihhubjS)}(hhh]jX)}(hAdd a link to the upper deviceh]hAdd a link to the upper device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjhhubah}(h]h ]h"]h$]h&]uh1jRhjihhhjhM"ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device ``struct net_device *upper_dev`` new upper device ``struct netlink_ext_ack *extack`` netlink extended ack **Description** Adds a link to device which is upper to this one. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.h](jX)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj0ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjUh]hstruct net_device *dev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjOubj)}(hhh]jX)}(hdeviceh]hdevice}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhM"hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhM"hjLubj)}(h2``struct net_device *upper_dev`` new upper device h](j)}(h ``struct net_device *upper_dev``h]j)}(hjh]hstruct net_device *upper_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjubj)}(hhh]jX)}(hnew upper deviceh]hnew upper device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjLubj)}(h8``struct netlink_ext_ack *extack`` netlink extended ack h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjubj)}(hhh]jX)}(hnetlink extended ackh]hnetlink extended ack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjLubeh}(h]h ]h"]h$]h&]uh1jhj0ubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj0ubjX)}(hAdds a link to device which is upper to this one. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.h]hAdds a link to device which is upper to this one. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)netdev_master_upper_dev_link (C function)c.netdev_master_upper_dev_linkhNtauh1hhjhhhNhNubh)}(hhh](h)}(hint netdev_master_upper_dev_link (struct net_device *dev, struct net_device *upper_dev, void *upper_priv, void *upper_info, struct netlink_ext_ack *extack)h]h)}(hint netdev_master_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, void *upper_priv, void *upper_info, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"ubj)}(h h]h }(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjC hhhjU hM"ubj)}(hnetdev_master_upper_dev_linkh]j%)}(hnetdev_master_upper_dev_linkh]hnetdev_master_upper_dev_link}(hjh hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjd ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjC hhhjU hM"ubj)}(hz(struct net_device *dev, struct net_device *upper_dev, void *upper_priv, void *upper_info, struct netlink_ext_ack *extack)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjj sbc.netdev_master_upper_dev_linkasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj| ubj)}(hstruct net_device *upper_devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j c.netdev_master_upper_dev_linkasbuh1hhj ubj)}(h h]h }(hj2!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj@!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(h upper_devh]h upper_dev}(hjM!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj| ubj)}(hvoid *upper_privh](j)}(hvoidh]hvoid}(hjf!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb!ubj)}(h h]h }(hjt!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjb!ubj;)}(hj>h]h*}(hj!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjb!ubj%)}(h upper_privh]h upper_priv}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjb!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj| ubj)}(hvoid *upper_infoh](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hj!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(h upper_infoh]h upper_info}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj| ubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj "modnameN classnameNjj!)}j$]j c.netdev_master_upper_dev_linkasbuh1hhj!ubj)}(h h]h }(hj&"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hj4"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(hextackh]hextack}(hjA"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj| ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjC hhhjU hM"ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj? hhhjU hM"ubah}(h]j: ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjU hM"hj< hhubjS)}(hhh]jX)}(h%Add a master link to the upper deviceh]h%Add a master link to the upper device}(hjk"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjh"hhubah}(h]h ]h"]h$]h&]uh1jRhj< hhhjU hM"ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj"jxj"jyjzj{uh1hhhhjhNhNubj})}(hXk**Parameters** ``struct net_device *dev`` device ``struct net_device *upper_dev`` new upper device ``void *upper_priv`` upper device private ``void *upper_info`` upper info to be passed down via notifier ``struct netlink_ext_ack *extack`` netlink extended ack **Description** Adds a link to device which is upper to this one. In this case, only one master upper device can be linked, although other non-master devices might be linked as well. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.h](jX)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj"ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj"h]hstruct net_device *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj"ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM"hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM"hj"ubj)}(h2``struct net_device *upper_dev`` new upper device h](j)}(h ``struct net_device *upper_dev``h]j)}(hj"h]hstruct net_device *upper_dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj"ubj)}(hhh]jX)}(hnew upper deviceh]hnew upper device}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM"hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM"hj"ubj)}(h*``void *upper_priv`` upper device private h](j)}(h``void *upper_priv``h]j)}(hj#h]hvoid *upper_priv}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj#ubj)}(hhh]jX)}(hupper device privateh]hupper device private}(hj7#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3#hM"hj4#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj3#hM"hj"ubj)}(h?``void *upper_info`` upper info to be passed down via notifier h](j)}(h``void *upper_info``h]j)}(hjW#h]hvoid *upper_info}(hjY#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU#ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hjQ#ubj)}(hhh]jX)}(h)upper info to be passed down via notifierh]h)upper info to be passed down via notifier}(hjp#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjl#hM"hjm#ubah}(h]h ]h"]h$]h&]uh1jhjQ#ubeh}(h]h ]h"]h$]h&]uh1jhjl#hM"hj"ubj)}(h8``struct netlink_ext_ack *extack`` netlink extended ack h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hj#h]hstruct netlink_ext_ack *extack}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj#ubj)}(hhh]jX)}(hnetlink extended ackh]hnetlink extended ack}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hM"hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hM"hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjX)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj"ubjX)}(hXFAdds a link to device which is upper to this one. In this case, only one master upper device can be linked, although other non-master devices might be linked as well. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.h]hXFAdds a link to device which is upper to this one. In this case, only one master upper device can be linked, although other non-master devices might be linked as well. The caller must hold the RTNL lock. On a failure a negative errno code is returned. On success the reference counts are adjusted and the function returns zero.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM"hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$netdev_upper_dev_unlink (C function)c.netdev_upper_dev_unlinkhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSvoid netdev_upper_dev_unlink (struct net_device *dev, struct net_device *upper_dev)h]h)}(hRvoid netdev_upper_dev_unlink(struct net_device *dev, struct net_device *upper_dev)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj $hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM+#ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj $hhhj$hM+#ubj)}(hnetdev_upper_dev_unlinkh]j%)}(hnetdev_upper_dev_unlinkh]hnetdev_upper_dev_unlink}(hj1$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj $hhhj$hM+#ubj)}(h6(struct net_device *dev, struct net_device *upper_dev)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjM$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjI$ubj)}(h h]h }(hjZ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI$ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjk$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjh$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjm$modnameN classnameNjj!)}j$]j')}jj3$sbc.netdev_upper_dev_unlinkasbuh1hhjI$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI$ubj;)}(hj>h]h*}(hj$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjI$ubj%)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE$ubj)}(hstruct net_device *upper_devh](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j$c.netdev_upper_dev_unlinkasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hj %hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(h upper_devh]h upper_dev}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE$ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj $hhhj$hM+#ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$hhhj$hM+#ubah}(h]j$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hM+#hj$hhubjS)}(hhh]jX)}(hRemoves a link to upper deviceh]hRemoves a link to upper device}(hj@%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM+#hj=%hhubah}(h]h ]h"]h$]h&]uh1jRhj$hhhj$hM+#ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjX%jxjX%jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device ``struct net_device *upper_dev`` new upper device **Description** Removes a link to device which is upper to this one. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hjb%h]h Parameters}(hjd%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`%ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/#hj\%ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj%h]hstruct net_device *dev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM,#hj{%ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hM,#hj%ubah}(h]h ]h"]h$]h&]uh1jhj{%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM,#hjx%ubj)}(h2``struct net_device *upper_dev`` new upper device h](j)}(h ``struct net_device *upper_dev``h]j)}(hj%h]hstruct net_device *upper_dev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-#hj%ubj)}(hhh]jX)}(hnew upper deviceh]hnew upper device}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hM-#hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM-#hjx%ubeh}(h]h ]h"]h$]h&]uh1jhj\%ubjX)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/#hj\%ubjX)}(hXRemoves a link to device which is upper to this one. The caller must hold the RTNL lock.h]hXRemoves a link to device which is upper to this one. The caller must hold the RTNL lock.}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.#hj\%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'netdev_bonding_info_change (C function)c.netdev_bonding_info_changehNtauh1hhjhhhNhNubh)}(hhh](h)}(hbvoid netdev_bonding_info_change (struct net_device *dev, struct netdev_bonding_info *bonding_info)h]h)}(havoid netdev_bonding_info_change(struct net_device *dev, struct netdev_bonding_info *bonding_info)h](j)}(hvoidh]hvoid}(hj:&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6&hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#ubj)}(h h]h }(hjI&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6&hhhjH&hM#ubj)}(hnetdev_bonding_info_changeh]j%)}(hnetdev_bonding_info_changeh]hnetdev_bonding_info_change}(hj[&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW&ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6&hhhjH&hM#ubj)}(hB(struct net_device *dev, struct netdev_bonding_info *bonding_info)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjw&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjs&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs&ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&modnameN classnameNjj!)}j$]j')}jj]&sbc.netdev_bonding_info_changeasbuh1hhjs&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs&ubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjs&ubj%)}(hdevh]hdev}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo&ubj)}(h(struct netdev_bonding_info *bonding_infoh](h)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubh)}(hhh]j%)}(hnetdev_bonding_infoh]hnetdev_bonding_info}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj 'modnameN classnameNjj!)}j$]j&c.netdev_bonding_info_changeasbuh1hhj&ubj)}(h h]h }(hj%'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj;)}(hj>h]h*}(hj3'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj&ubj%)}(h bonding_infoh]h bonding_info}(hj@'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo&ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj6&hhhjH&hM#ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2&hhhjH&hM#ubah}(h]j-&ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjH&hM#hj/&hhubjS)}(hhh]jX)}(h!Dispatch event about slave changeh]h!Dispatch event about slave change}(hjj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hjg'hhubah}(h]h ]h"]h$]h&]uh1jRhj/&hhhjH&hM#ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device ``struct netdev_bonding_info *bonding_info`` info to dispatch **Description** Send NETDEV_BONDING_INFO to netdev notifiers with info. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj'ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj'h]hstruct net_device *dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj'ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hM#hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM#hj'ubj)}(h>``struct netdev_bonding_info *bonding_info`` info to dispatch h](j)}(h,``struct netdev_bonding_info *bonding_info``h]j)}(hj'h]h(struct netdev_bonding_info *bonding_info}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj'ubj)}(hhh]jX)}(hinfo to dispatchh]hinfo to dispatch}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hM#hj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hM#hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubjX)}(h**Description**h]j)}(hj(h]h Description}(hj!(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj'ubjX)}(h[Send NETDEV_BONDING_INFO to netdev notifiers with info. The caller must hold the RTNL lock.h]h[Send NETDEV_BONDING_INFO to netdev notifiers with info. The caller must hold the RTNL lock.}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM#hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netdev_get_xmit_slave (C function)c.netdev_get_xmit_slavehNtauh1hhjhhhNhNubh)}(hhh](h)}(hhstruct net_device * netdev_get_xmit_slave (struct net_device *dev, struct sk_buff *skb, bool all_slaves)h]h)}(hfstruct net_device *netdev_get_xmit_slave(struct net_device *dev, struct sk_buff *skb, bool all_slaves)h](h)}(hjh]hstruct}(hjd(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`(hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$ubj)}(h h]h }(hjr(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`(hhhjq(hM$ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j')}jnetdev_get_xmit_slavesbc.netdev_get_xmit_slaveasbuh1hhj`(hhhjq(hM$ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`(hhhjq(hM$ubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`(hhhjq(hM$ubj)}(hnetdev_get_xmit_slaveh]j%)}(hj(h]hnetdev_get_xmit_slave}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj`(hhhjq(hM$ubj)}(h>(struct net_device *dev, struct sk_buff *skb, bool all_slaves)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j(c.netdev_get_xmit_slaveasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hj()hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hdevh]hdev}(hj5)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjN)hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJ)ubj)}(h h]h }(hj[)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ)ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjl)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hji)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjn)modnameN classnameNjj!)}j$]j(c.netdev_get_xmit_slaveasbuh1hhjJ)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ)ubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJ)ubj%)}(hskbh]hskb}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJ)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hbool all_slavesh](j)}(hjTh]hbool}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj%)}(h all_slavesh]h all_slaves}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj`(hhhjq(hM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj\(hhhjq(hM$ubah}(h]jW(ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjq(hM$hjY(hhubjS)}(hhh]jX)}(h#Get the xmit slave of master deviceh]h#Get the xmit slave of master device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj*hhubah}(h]h ]h"]h$]h&]uh1jRhjY(hhhjq(hM$ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj*jxj*jyjzj{uh1hhhhjhNhNubj})}(hXB**Parameters** ``struct net_device *dev`` device ``struct sk_buff *skb`` The packet ``bool all_slaves`` assume all the slaves are active **Description** The reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock. ``NULL`` is returned if no slave is found.h](jX)}(h**Parameters**h]j)}(hj%*h]h Parameters}(hj'*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#*ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj*ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjD*h]hstruct net_device *dev}(hjF*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB*ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj>*ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj]*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjY*hM$hjZ*ubah}(h]h ]h"]h$]h&]uh1jhj>*ubeh}(h]h ]h"]h$]h&]uh1jhjY*hM$hj;*ubj)}(h#``struct sk_buff *skb`` The packet h](j)}(h``struct sk_buff *skb``h]j)}(hj}*h]hstruct sk_buff *skb}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{*ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hjw*ubj)}(hhh]jX)}(h The packeth]h The packet}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM$hj*ubah}(h]h ]h"]h$]h&]uh1jhjw*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM$hj;*ubj)}(h5``bool all_slaves`` assume all the slaves are active h](j)}(h``bool all_slaves``h]j)}(hj*h]hbool all_slaves}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj*ubj)}(hhh]jX)}(h assume all the slaves are activeh]h assume all the slaves are active}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM$hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM$hj;*ubeh}(h]h ]h"]h$]h&]uh1jhj*ubjX)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj*ubjX)}(hThe reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock. ``NULL`` is returned if no slave is found.h](htThe reference counters are not incremented so the caller must be careful with locks. The caller must hold RCU lock. }(hj+hhhNhNubj)}(h``NULL``h]hNULL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh" is returned if no slave is found.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%netdev_sk_get_lowest_dev (C function)c.netdev_sk_get_lowest_devhNtauh1hhjhhhNhNubh)}(hhh](h)}(hVstruct net_device * netdev_sk_get_lowest_dev (struct net_device *dev, struct sock *sk)h]h)}(hTstruct net_device *netdev_sk_get_lowest_dev(struct net_device *dev, struct sock *sk)h](h)}(hjh]hstruct}(hjH+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjD+hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$ubj)}(h h]h }(hjV+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjD+hhhjU+hM$ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjg+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjd+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetji+modnameN classnameNjj!)}j$]j')}jnetdev_sk_get_lowest_devsbc.netdev_sk_get_lowest_devasbuh1hhjD+hhhjU+hM$ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjD+hhhjU+hM$ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjD+hhhjU+hM$ubj)}(hnetdev_sk_get_lowest_devh]j%)}(hj+h]hnetdev_sk_get_lowest_dev}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjD+hhhjU+hM$ubj)}(h)(struct net_device *dev, struct sock *sk)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]j+c.netdev_sk_get_lowest_devasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj;)}(hj>h]h*}(hj ,hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubj%)}(hdevh]hdev}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubj)}(hstruct sock *skh](h)}(hjh]hstruct}(hj2,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.,ubj)}(h h]h }(hj?,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.,ubh)}(hhh]j%)}(hsockh]hsock}(hjP,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR,modnameN classnameNjj!)}j$]j+c.netdev_sk_get_lowest_devasbuh1hhj.,ubj)}(h h]h }(hjn,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.,ubj;)}(hj>h]h*}(hj|,hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.,ubj%)}(hskh]hsk}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjD+hhhjU+hM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@+hhhjU+hM$ubah}(h]j;+ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjU+hM$hj=+hhubjS)}(hhh]jX)}(h6Get the lowest device in chain given device and socketh]h6Get the lowest device in chain given device and socket}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj,hhubah}(h]h ]h"]h$]h&]uh1jRhj=+hhhjU+hM$ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device ``struct sock *sk`` the socket **Description** ``NULL`` is returned if no lower device is found.h](jX)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj,ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj,h]hstruct net_device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj,ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj -hM$hj -ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj -hM$hj,ubj)}(h``struct sock *sk`` the socket h](j)}(h``struct sock *sk``h]j)}(hj--h]hstruct sock *sk}(hj/-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+-ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj'-ubj)}(hhh]jX)}(h the socketh]h the socket}(hjF-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB-hM$hjC-ubah}(h]h ]h"]h$]h&]uh1jhj'-ubeh}(h]h ]h"]h$]h&]uh1jhjB-hM$hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hjh-h]h Description}(hjj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf-ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj,ubjX)}(h1``NULL`` is returned if no lower device is found.h](j)}(h``NULL``h]hNULL}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~-ubh) is returned if no lower device is found.}(hj~-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM$hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'netdev_lower_state_changed (C function)c.netdev_lower_state_changedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hVvoid netdev_lower_state_changed (struct net_device *lower_dev, void *lower_state_info)h]h)}(hUvoid netdev_lower_state_changed(struct net_device *lower_dev, void *lower_state_info)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1%ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj-hM1%ubj)}(hnetdev_lower_state_changedh]j%)}(hnetdev_lower_state_changedh]hnetdev_lower_state_changed}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-hhhj-hM1%ubj)}(h6(struct net_device *lower_dev, void *lower_state_info)h](j)}(hstruct net_device *lower_devh](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]j')}jj-sbc.netdev_lower_state_changedasbuh1hhj-ubj)}(h h]h }(hj6.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hjD.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(h lower_devh]h lower_dev}(hjQ.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubj)}(hvoid *lower_state_infoh](j)}(hvoidh]hvoid}(hjj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf.ubj)}(h h]h }(hjx.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjf.ubj;)}(hj>h]h*}(hj.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjf.ubj%)}(hlower_state_infoh]hlower_state_info}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjf.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj-hhhj-hM1%ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj-hhhj-hM1%ubah}(h]j-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj-hM1%hj-hhubjS)}(hhh]jX)}(h.Dispatch event about lower device state changeh]h.Dispatch event about lower device state change}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1%hj.hhubah}(h]h ]h"]h$]h&]uh1jRhj-hhhj-hM1%ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *lower_dev`` device ``void *lower_state_info`` state to dispatch **Description** Send NETDEV_CHANGELOWERSTATE to netdev notifiers with info. The caller must hold the RTNL lock.h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM5%hj.ubj)}(hhh](j)}(h(``struct net_device *lower_dev`` device h](j)}(h ``struct net_device *lower_dev``h]j)}(hj.h]hstruct net_device *lower_dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM2%hj.ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hM2%hj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hM2%hj.ubj)}(h-``void *lower_state_info`` state to dispatch h](j)}(h``void *lower_state_info``h]j)}(hj7/h]hvoid *lower_state_info}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5/ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM3%hj1/ubj)}(hhh]jX)}(hstate to dispatchh]hstate to dispatch}(hjP/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjL/hM3%hjM/ubah}(h]h ]h"]h$]h&]uh1jhj1/ubeh}(h]h ]h"]h$]h&]uh1jhjL/hM3%hj.ubeh}(h]h ]h"]h$]h&]uh1jhj.ubjX)}(h**Description**h]j)}(hjr/h]h Description}(hjt/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp/ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM5%hj.ubjX)}(h_Send NETDEV_CHANGELOWERSTATE to netdev notifiers with info. The caller must hold the RTNL lock.h]h_Send NETDEV_CHANGELOWERSTATE to netdev notifiers with info. The caller must hold the RTNL lock.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM4%hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_get_flags (C function)c.netif_get_flagshNtauh1hhjhhhNhNubh)}(hhh](h)}(h;unsigned int netif_get_flags (const struct net_device *dev)h]h)}(h:unsigned int netif_get_flags(const struct net_device *dev)h](j)}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhj/hM%ubj)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hM%ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhj/hM%ubj)}(hnetif_get_flagsh]j%)}(hnetif_get_flagsh]hnetif_get_flags}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/hhhj/hM%ubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj 0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 0ubh)}(hjh]hstruct}(hj+0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj 0ubj)}(h h]h }(hj80hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 0ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjI0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjK0modnameN classnameNjj!)}j$]j')}jj/sbc.netif_get_flagsasbuh1hhj 0ubj)}(h h]h }(hji0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 0ubj;)}(hj>h]h*}(hjw0hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj 0ubj%)}(hdevh]hdev}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubah}(h]h ]h"]h$]h&]j<j=uh1jhj/hhhj/hM%ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhj/hM%ubah}(h]j/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj/hM%hj/hhubjS)}(hhh]jX)}(hget flags reported to userspaceh]hget flags reported to userspace}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hj0hhubah}(h]h ]h"]h$]h&]uh1jRhj/hhhj/hM%ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` device **Description** Get the combination of flag bits exported through APIs to userspace.h](jX)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hj0ubj)}(hhh]j)}(h(``const struct net_device *dev`` device h](j)}(h ``const struct net_device *dev``h]j)}(hj0h]hconst struct net_device *dev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hj0ubj)}(hhh]jX)}(hdeviceh]hdevice}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hM%hj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hM%hj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubjX)}(h**Description**h]j)}(hj*1h]h Description}(hj,1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(1ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hj0ubjX)}(hDGet the combination of flag bits exported through APIs to userspace.h]hDGet the combination of flag bits exported through APIs to userspace.}(hj@1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM%hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(netif_pre_changeaddr_notify (C function)c.netif_pre_changeaddr_notifyhNtauh1hhjhhhNhNubh)}(hhh](h)}(hjint netif_pre_changeaddr_notify (struct net_device *dev, const char *addr, struct netlink_ext_ack *extack)h]h)}(hiint netif_pre_changeaddr_notify(struct net_device *dev, const char *addr, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjo1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk1hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&ubj)}(h h]h }(hj~1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjk1hhhj}1hM&ubj)}(hnetif_pre_changeaddr_notifyh]j%)}(hnetif_pre_changeaddr_notifyh]hnetif_pre_changeaddr_notify}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjk1hhhj}1hM&ubj)}(hJ(struct net_device *dev, const char *addr, struct netlink_ext_ack *extack)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jj1sbc.netif_pre_changeaddr_notifyasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1ubj%)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubj)}(hconst char *addrh](h)}(hjh]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj+2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(hcharh]hchar}(hj92hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjG2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hjU2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(haddrh]haddr}(hjb2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hj{2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjw2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw2ubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j1c.netif_pre_changeaddr_notifyasbuh1hhjw2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw2ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjw2ubj%)}(hextackh]hextack}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjk1hhhj}1hM&ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjg1hhhj}1hM&ubah}(h]jb1ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}1hM&hjd1hhubjS)}(hhh]jX)}(hCall NETDEV_PRE_CHANGEADDR.h]hCall NETDEV_PRE_CHANGEADDR.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj2hhubah}(h]h ]h"]h$]h&]uh1jRhjd1hhhj}1hM&ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3jxj3jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device ``const char *addr`` new address ``struct netlink_ext_ack *extack`` netlink extended ack **Return** 0 on success, -errno on failure.h](jX)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj3ubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hj=3h]hstruct net_device *dev}(hj?3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;3ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj73ubj)}(hhh]jX)}(hdeviceh]hdevice}(hjV3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjR3hM&hjS3ubah}(h]h ]h"]h$]h&]uh1jhj73ubeh}(h]h ]h"]h$]h&]uh1jhjR3hM&hj43ubj)}(h!``const char *addr`` new address h](j)}(h``const char *addr``h]j)}(hjv3h]hconst char *addr}(hjx3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt3ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hjp3ubj)}(hhh]jX)}(h new addressh]h new address}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hM&hj3ubah}(h]h ]h"]h$]h&]uh1jhjp3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM&hj43ubj)}(h8``struct netlink_ext_ack *extack`` netlink extended ack h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hj3h]hstruct netlink_ext_ack *extack}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj3ubj)}(hhh]jX)}(hnetlink extended ackh]hnetlink extended ack}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hM&hj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM&hj43ubeh}(h]h ]h"]h$]h&]uh1jhj3ubjX)}(h **Return**h]j)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj3ubjX)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%netif_get_port_parent_id (C function)c.netif_get_port_parent_idhNtauh1hhjhhhNhNubh)}(hhh](h)}(heint netif_get_port_parent_id (struct net_device *dev, struct netdev_phys_item_id *ppid, bool recurse)h]h)}(hdint netif_get_port_parent_id(struct net_device *dev, struct netdev_phys_item_id *ppid, bool recurse)h](j)}(hinth]hint}(hj/4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+4hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMl'ubj)}(h h]h }(hj>4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+4hhhj=4hMl'ubj)}(hnetif_get_port_parent_idh]j%)}(hnetif_get_port_parent_idh]hnetif_get_port_parent_id}(hjP4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj+4hhhj=4hMl'ubj)}(hH(struct net_device *dev, struct netdev_phys_item_id *ppid, bool recurse)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjl4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjh4ubj)}(h h]h }(hjy4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjh4ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j')}jjR4sbc.netif_get_port_parent_idasbuh1hhjh4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjh4ubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjh4ubj%)}(hdevh]hdev}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjh4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjd4ubj)}(h struct netdev_phys_item_id *ppidh](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hnetdev_phys_item_idh]hnetdev_phys_item_id}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j4c.netif_get_port_parent_idasbuh1hhj4ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hj(5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hppidh]hppid}(hj55hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjd4ubj)}(h bool recurseh](j)}(hjTh]hbool}(hjN5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ5ubj)}(h h]h }(hj[5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ5ubj%)}(hrecurseh]hrecurse}(hji5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJ5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjd4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj+4hhhj=4hMl'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj'4hhhj=4hMl'ubah}(h]j"4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=4hMl'hj$4hhubjS)}(hhh]jX)}(h'Get the device's port parent identifierh]h)Get the device’s port parent identifier}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMl'hj5hhubah}(h]h ]h"]h$]h&]uh1jRhj$4hhhj=4hMl'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj5jxj5jyjzj{uh1hhhhjhNhNubj})}(hXA**Parameters** ``struct net_device *dev`` network device ``struct netdev_phys_item_id *ppid`` pointer to a storage for the port's parent identifier ``bool recurse`` allow/disallow recursion to lower devices **Description** Get the devices's port parent identifier. **Return** 0 on success, -errno on failure.h](jX)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMp'hj5ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj5h]hstruct net_device *dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMm'hj5ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMm'hj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMm'hj5ubj)}(h[``struct netdev_phys_item_id *ppid`` pointer to a storage for the port's parent identifier h](j)}(h$``struct netdev_phys_item_id *ppid``h]j)}(hj 6h]h struct netdev_phys_item_id *ppid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 6ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMn'hj6ubj)}(hhh]jX)}(h5pointer to a storage for the port's parent identifierh]h7pointer to a storage for the port’s parent identifier}(hj&6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"6hMn'hj#6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj"6hMn'hj5ubj)}(h;``bool recurse`` allow/disallow recursion to lower devices h](j)}(h``bool recurse``h]j)}(hjF6h]h bool recurse}(hjH6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD6ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMo'hj@6ubj)}(hhh]jX)}(h)allow/disallow recursion to lower devicesh]h)allow/disallow recursion to lower devices}(hj_6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[6hMo'hj\6ubah}(h]h ]h"]h$]h&]uh1jhj@6ubeh}(h]h ]h"]h$]h&]uh1jhj[6hMo'hj5ubeh}(h]h ]h"]h$]h&]uh1jhj5ubjX)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMq'hj5ubjX)}(h)Get the devices's port parent identifier.h]h+Get the devices’s port parent identifier.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMp'hj5ubjX)}(h **Return**h]j)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMr'hj5ubjX)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMs'hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'netdev_port_same_parent_id (C function)c.netdev_port_same_parent_idhNtauh1hhjhhhNhNubh)}(hhh](h)}(hLbool netdev_port_same_parent_id (struct net_device *a, struct net_device *b)h]h)}(hKbool netdev_port_same_parent_id(struct net_device *a, struct net_device *b)h](j)}(hjTh]hbool}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhj6hM'ubj)}(hnetdev_port_same_parent_idh]j%)}(hnetdev_port_same_parent_idh]hnetdev_port_same_parent_id}(hj 7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhj6hM'ubj)}(h,(struct net_device *a, struct net_device *b)h](j)}(hstruct net_device *ah](h)}(hjh]hstruct}(hj)7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%7ubj)}(h h]h }(hj67hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%7ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjG7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjD7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjI7modnameN classnameNjj!)}j$]j')}jj7sbc.netdev_port_same_parent_idasbuh1hhj%7ubj)}(h h]h }(hjg7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%7ubj;)}(hj>h]h*}(hju7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%7ubj%)}(hah]ha}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj!7ubj)}(hstruct net_device *bh](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]jc7c.netdev_port_same_parent_idasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hjh]hb}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj!7ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhj6hM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhj6hM'ubah}(h]j6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hM'hj6hhubjS)}(hhh]jX)}(hDIndicate if two network devices have the same port parent identifierh]hDIndicate if two network devices have the same port parent identifier}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hj8hhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhj6hM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj38jxj38jyjzj{uh1hhhhjhNhNubj})}(hq**Parameters** ``struct net_device *a`` first network device ``struct net_device *b`` second network deviceh](jX)}(h**Parameters**h]j)}(hj=8h]h Parameters}(hj?8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;8ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hj78ubj)}(hhh](j)}(h.``struct net_device *a`` first network device h](j)}(h``struct net_device *a``h]j)}(hj\8h]hstruct net_device *a}(hj^8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ8ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hjV8ubj)}(hhh]jX)}(hfirst network deviceh]hfirst network device}(hju8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjq8hM'hjr8ubah}(h]h ]h"]h$]h&]uh1jhjV8ubeh}(h]h ]h"]h$]h&]uh1jhjq8hM'hjS8ubj)}(h.``struct net_device *b`` second network deviceh](j)}(h``struct net_device *b``h]j)}(hj8h]hstruct net_device *b}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hj8ubj)}(hhh]jX)}(hsecond network deviceh]hsecond network device}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM'hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM'hjS8ubeh}(h]h ]h"]h$]h&]uh1jhj78ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netdev_update_features (C function)c.netdev_update_featureshNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void netdev_update_features (struct net_device *dev)h]h)}(h3void netdev_update_features(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMJ+ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhj8hMJ+ubj)}(hnetdev_update_featuresh]j%)}(hnetdev_update_featuresh]hnetdev_update_features}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 9ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj8hhhj8hMJ+ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj,9hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(9ubj)}(h h]h }(hj99hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(9ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjJ9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjG9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjL9modnameN classnameNjj!)}j$]j')}jj9sbc.netdev_update_featuresasbuh1hhj(9ubj)}(h h]h }(hjj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(9ubj;)}(hj>h]h*}(hjx9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(9ubj%)}(hdevh]hdev}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$9ubah}(h]h ]h"]h$]h&]j<j=uh1jhj8hhhj8hMJ+ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj8hhhj8hMJ+ubah}(h]j8ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hMJ+hj8hhubjS)}(hhh]jX)}(hrecalculate device featuresh]hrecalculate device features}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMJ+hj9hhubah}(h]h ]h"]h$]h&]uh1jRhj8hhhj8hMJ+ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9jxj9jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` the device to check **Description** Recalculate dev->features set and send notifications if it has changed. Should be called after driver or hardware dependent conditions might have changed that influence the features.h](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMN+hj9ubj)}(hhh]j)}(h/``struct net_device *dev`` the device to check h](j)}(h``struct net_device *dev``h]j)}(hj9h]hstruct net_device *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMK+hj9ubj)}(hhh]jX)}(hthe device to checkh]hthe device to check}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMK+hj:ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj:hMK+hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubjX)}(h**Description**h]j)}(hj+:h]h Description}(hj-:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj):ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMM+hj9ubj )}(hRecalculate dev->features set and send notifications if it has changed. Should be called after driver or hardware dependent conditions might have changed that influence the features.h]jX)}(hRecalculate dev->features set and send notifications if it has changed. Should be called after driver or hardware dependent conditions might have changed that influence the features.h]hRecalculate dev->features set and send notifications if it has changed. Should be called after driver or hardware dependent conditions might have changed that influence the features.}(hjE:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chML+hjA:ubah}(h]h ]h"]h$]h&]uh1j hjS:hML+hj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netdev_change_features (C function)c.netdev_change_featureshNtauh1hhjhhhNhNubh)}(hhh](h)}(h4void netdev_change_features (struct net_device *dev)h]h)}(h3void netdev_change_features(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjz:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv:hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMY+ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv:hhhj:hMY+ubj)}(hnetdev_change_featuresh]j%)}(hnetdev_change_featuresh]hnetdev_change_features}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjv:hhhj:hMY+ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jj:sbc.netdev_change_featuresasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:ubj%)}(hdevh]hdev}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubah}(h]h ]h"]h$]h&]j<j=uh1jhjv:hhhj:hMY+ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjr:hhhj:hMY+ubah}(h]jm:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hMY+hjo:hhubjS)}(hhh]jX)}(hrecalculate device featuresh]hrecalculate device features}(hj:;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMY+hj7;hhubah}(h]h ]h"]h$]h&]uh1jRhjo:hhhj:hMY+ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjR;jxjR;jyjzj{uh1hhhhjhNhNubj})}(hXa**Parameters** ``struct net_device *dev`` the device to check **Description** Recalculate dev->features set and send notifications even if they have not changed. Should be called instead of netdev_update_features() if also dev->vlan_features might have changed to allow the changes to be propagated to stacked VLAN devices.h](jX)}(h**Parameters**h]j)}(hj\;h]h Parameters}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ;ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM]+hjV;ubj)}(hhh]j)}(h/``struct net_device *dev`` the device to check h](j)}(h``struct net_device *dev``h]j)}(hj{;h]hstruct net_device *dev}(hj};hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy;ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMZ+hju;ubj)}(hhh]jX)}(hthe device to checkh]hthe device to check}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMZ+hj;ubah}(h]h ]h"]h$]h&]uh1jhju;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMZ+hjr;ubah}(h]h ]h"]h$]h&]uh1jhjV;ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM\+hjV;ubj )}(hRecalculate dev->features set and send notifications even if they have not changed. Should be called instead of netdev_update_features() if also dev->vlan_features might have changed to allow the changes to be propagated to stacked VLAN devices.h]jX)}(hRecalculate dev->features set and send notifications even if they have not changed. Should be called instead of netdev_update_features() if also dev->vlan_features might have changed to allow the changes to be propagated to stacked VLAN devices.h]hRecalculate dev->features set and send notifications even if they have not changed. Should be called instead of netdev_update_features() if also dev->vlan_features might have changed to allow the changes to be propagated to stacked VLAN devices.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM[+hj;ubah}(h]h ]h"]h$]h&]uh1j hj;hM[+hjV;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-netif_stacked_transfer_operstate (C function)"c.netif_stacked_transfer_operstatehNtauh1hhjhhhNhNubh)}(hhh](h)}(h`void netif_stacked_transfer_operstate (const struct net_device *rootdev, struct net_device *dev)h]h)}(h_void netif_stacked_transfer_operstate(const struct net_device *rootdev, struct net_device *dev)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMj+ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<hhhj<hMj+ubj)}(h netif_stacked_transfer_operstateh]j%)}(h netif_stacked_transfer_operstateh]h netif_stacked_transfer_operstate}(hj&<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj<hhhj<hMj+ubj)}(h:(const struct net_device *rootdev, struct net_device *dev)h](j)}(h const struct net_device *rootdevh](h)}(hjh]hconst}(hjB<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj><ubj)}(h h]h }(hjO<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj><ubh)}(hjh]hstruct}(hj]<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj><ubj)}(h h]h }(hjj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj><ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj{<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjx<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}<modnameN classnameNjj!)}j$]j')}jj(<sb"c.netif_stacked_transfer_operstateasbuh1hhj><ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj><ubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj><ubj%)}(hrootdevh]hrootdev}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj><ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:<ubj)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j<"c.netif_stacked_transfer_operstateasbuh1hhj<ubj)}(h h]h }(hj =hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hdevh]hdev}(hj&=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:<ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj<hhhj<hMj+ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;hhhj<hMj+ubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hMj+hj;hhubjS)}(hhh]jX)}(htransfer operstateh]htransfer operstate}(hjP=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMj+hjM=hhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhj<hMj+ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjh=jxjh=jyjzj{uh1hhhhjhNhNubj})}(hXr**Parameters** ``const struct net_device *rootdev`` the root or lower level device to transfer state from ``struct net_device *dev`` the device to transfer operstate to **Description** Transfer operational state from root to device. This is normally called when a stacking relationship exists between the root device and the device(a leaf device).h](jX)}(h**Parameters**h]j)}(hjr=h]h Parameters}(hjt=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp=ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMn+hjl=ubj)}(hhh](j)}(h[``const struct net_device *rootdev`` the root or lower level device to transfer state from h](j)}(h$``const struct net_device *rootdev``h]j)}(hj=h]h const struct net_device *rootdev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMk+hj=ubj)}(hhh]jX)}(h5the root or lower level device to transfer state fromh]h5the root or lower level device to transfer state from}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMk+hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMk+hj=ubj)}(h?``struct net_device *dev`` the device to transfer operstate to h](j)}(h``struct net_device *dev``h]j)}(hj=h]hstruct net_device *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMl+hj=ubj)}(hhh]jX)}(h#the device to transfer operstate toh]h#the device to transfer operstate to}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMl+hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMl+hj=ubeh}(h]h ]h"]h$]h&]uh1jhjl=ubjX)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMn+hjl=ubj )}(hTransfer operational state from root to device. This is normally called when a stacking relationship exists between the root device and the device(a leaf device).h]jX)}(hTransfer operational state from root to device. This is normally called when a stacking relationship exists between the root device and the device(a leaf device).h]hTransfer operational state from root to device. This is normally called when a stacking relationship exists between the root device and the device(a leaf device).}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMm+hj>ubah}(h]h ]h"]h$]h&]uh1j hj->hMm+hjl=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hregister_netdevice (C function)c.register_netdevicehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/int register_netdevice (struct net_device *dev)h]h)}(h.int register_netdevice(struct net_device *dev)h](j)}(hinth]hint}(hjT>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&,ubj)}(h h]h }(hjc>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjP>hhhjb>hM&,ubj)}(hregister_netdeviceh]j%)}(hregister_netdeviceh]hregister_netdevice}(hju>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjP>hhhjb>hM&,ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]j')}jjw>sbc.register_netdeviceasbuh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubah}(h]h ]h"]h$]h&]j<j=uh1jhjP>hhhjb>hM&,ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjL>hhhjb>hM&,ubah}(h]jG>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjb>hM&,hjI>hhubjS)}(hhh]jX)}(hregister a network deviceh]hregister a network device}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM&,hj?hhubah}(h]h ]h"]h$]h&]uh1jRhjI>hhhjb>hM&,ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,?jxj,?jyjzj{uh1hhhhjhNhNubj})}(hX3**Parameters** ``struct net_device *dev`` device to register **Description** Take a prepared network device structure and make it externally accessible. A ``NETDEV_REGISTER`` message is sent to the netdev notifier chain. Callers must hold the rtnl lock - you may want register_netdev() instead of this.h](jX)}(h**Parameters**h]j)}(hj6?h]h Parameters}(hj8?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4?ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM*,hj0?ubj)}(hhh]j)}(h.``struct net_device *dev`` device to register h](j)}(h``struct net_device *dev``h]j)}(hjU?h]hstruct net_device *dev}(hjW?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS?ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM',hjO?ubj)}(hhh]jX)}(hdevice to registerh]hdevice to register}(hjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjj?hM',hjk?ubah}(h]h ]h"]h$]h&]uh1jhjO?ubeh}(h]h ]h"]h$]h&]uh1jhjj?hM',hjL?ubah}(h]h ]h"]h$]h&]uh1jhj0?ubjX)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM),hj0?ubjX)}(hTake a prepared network device structure and make it externally accessible. A ``NETDEV_REGISTER`` message is sent to the netdev notifier chain. Callers must hold the rtnl lock - you may want register_netdev() instead of this.h](hNTake a prepared network device structure and make it externally accessible. A }(hj?hhhNhNubj)}(h``NETDEV_REGISTER``h]hNETDEV_REGISTER}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh message is sent to the netdev notifier chain. Callers must hold the rtnl lock - you may want register_netdev() instead of this.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM(,hj0?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hregister_netdev (C function)c.register_netdevhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,int register_netdev (struct net_device *dev)h]h)}(h+int register_netdev(struct net_device *dev)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?hhhj?hM-ubj)}(hregister_netdevh]j%)}(hregister_netdevh]hregister_netdev}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj?hhhj?hM-ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj$@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj @ubj)}(h h]h }(hj1@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj @ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjB@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjD@modnameN classnameNjj!)}j$]j')}jj @sbc.register_netdevasbuh1hhj @ubj)}(h h]h }(hjb@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj @ubj;)}(hj>h]h*}(hjp@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj @ubj%)}(hdevh]hdev}(hj}@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj @ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubah}(h]h ]h"]h$]h&]j<j=uh1jhj?hhhj?hM-ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj?hhhj?hM-ubah}(h]j?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj?hM-hj?hhubjS)}(hhh]jX)}(hregister a network deviceh]hregister a network device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj@hhubah}(h]h ]h"]h$]h&]uh1jRhj?hhhj?hM-ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@jxj@jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to register **Description** Take a completed network device structure and add it to the kernel interfaces. A ``NETDEV_REGISTER`` message is sent to the netdev notifier chain. 0 is returned on success. A negative errno code is returned on a failure to set up the device, or if the name is a duplicate. This is a wrapper around register_netdevice that takes the rtnl semaphore and expands the device name if you passed a format string to alloc_netdev.h](jX)}(h**Parameters**h]j)}(hj@h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj@ubj)}(hhh]j)}(h.``struct net_device *dev`` device to register h](j)}(h``struct net_device *dev``h]j)}(hj@h]hstruct net_device *dev}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj@ubj)}(hhh]jX)}(hdevice to registerh]hdevice to register}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hM-hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hM-hj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubjX)}(h**Description**h]j)}(hj#Ah]h Description}(hj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Aubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj@ubj )}(hXTake a completed network device structure and add it to the kernel interfaces. A ``NETDEV_REGISTER`` message is sent to the netdev notifier chain. 0 is returned on success. A negative errno code is returned on a failure to set up the device, or if the name is a duplicate. This is a wrapper around register_netdevice that takes the rtnl semaphore and expands the device name if you passed a format string to alloc_netdev.h](jX)}(hXTake a completed network device structure and add it to the kernel interfaces. A ``NETDEV_REGISTER`` message is sent to the netdev notifier chain. 0 is returned on success. A negative errno code is returned on a failure to set up the device, or if the name is a duplicate.h](hQTake a completed network device structure and add it to the kernel interfaces. A }(hj=AhhhNhNubj)}(h``NETDEV_REGISTER``h]hNETDEV_REGISTER}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Aubh message is sent to the netdev notifier chain. 0 is returned on success. A negative errno code is returned on a failure to set up the device, or if the name is a duplicate.}(hj=AhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj9AubjX)}(hThis is a wrapper around register_netdevice that takes the rtnl semaphore and expands the device name if you passed a format string to alloc_netdev.h]hThis is a wrapper around register_netdevice that takes the rtnl semaphore and expands the device name if you passed a format string to alloc_netdev.}(hj^AhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM-hj9Aubeh}(h]h ]h"]h$]h&]uh1j hj]AhM-hj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_get_stats (C function)c.dev_get_statshNtauh1hhjhhhNhNubh)}(hhh](h)}(hdstruct rtnl_link_stats64 * dev_get_stats (struct net_device *dev, struct rtnl_link_stats64 *storage)h]h)}(hbstruct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, struct rtnl_link_stats64 *storage)h](h)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjAhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?.ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAhhhjAhM?.ubh)}(hhh]j%)}(hrtnl_link_stats64h]hrtnl_link_stats64}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j')}j dev_get_statssbc.dev_get_statsasbuh1hhjAhhhjAhM?.ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAhhhjAhM?.ubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAhhhjAhM?.ubj)}(h dev_get_statsh]j%)}(hjAh]h dev_get_stats}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjAhhhjAhM?.ubj)}(h;(struct net_device *dev, struct rtnl_link_stats64 *storage)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Bubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj+BhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(Bubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-BmodnameN classnameNjj!)}j$]jAc.dev_get_statsasbuh1hhj Bubj)}(h h]h }(hjIBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Bubj;)}(hj>h]h*}(hjWBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj Bubj%)}(hdevh]hdev}(hjdBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Bubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubj)}(h!struct rtnl_link_stats64 *storageh](h)}(hjh]hstruct}(hj}BhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjyBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyBubh)}(hhh]j%)}(hrtnl_link_stats64h]hrtnl_link_stats64}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBmodnameN classnameNjj!)}j$]jAc.dev_get_statsasbuh1hhjyBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyBubj;)}(hj>h]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyBubj%)}(hstorageh]hstorage}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubeh}(h]h ]h"]h$]h&]j<j=uh1jhjAhhhjAhM?.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjAhhhjAhM?.ubah}(h]jAah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjAhM?.hjAhhubjS)}(hhh]jX)}(hget network device statisticsh]hget network device statistics}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM?.hjBhhubah}(h]h ]h"]h$]h&]uh1jRhjAhhhjAhM?.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to get statistics from ``struct rtnl_link_stats64 *storage`` place to store stats **Description** Get network statistics from device. Return **storage**. The device driver may provide its own method by setting dev->netdev_ops->get_stats64 or dev->netdev_ops->get_stats; otherwise the internal statistics structure is used.h](jX)}(h**Parameters**h]j)}(hj Ch]h Parameters}(hj"ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMC.hjCubj)}(hhh](j)}(h9``struct net_device *dev`` device to get statistics from h](j)}(h``struct net_device *dev``h]j)}(hj?Ch]hstruct net_device *dev}(hjAChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Cubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM@.hj9Cubj)}(hhh]jX)}(hdevice to get statistics fromh]hdevice to get statistics from}(hjXChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjTChM@.hjUCubah}(h]h ]h"]h$]h&]uh1jhj9Cubeh}(h]h ]h"]h$]h&]uh1jhjTChM@.hj6Cubj)}(h;``struct rtnl_link_stats64 *storage`` place to store stats h](j)}(h%``struct rtnl_link_stats64 *storage``h]j)}(hjxCh]h!struct rtnl_link_stats64 *storage}(hjzChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvCubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMA.hjrCubj)}(hhh]jX)}(hplace to store statsh]hplace to store stats}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMA.hjCubah}(h]h ]h"]h$]h&]uh1jhjrCubeh}(h]h ]h"]h$]h&]uh1jhjChMA.hj6Cubeh}(h]h ]h"]h$]h&]uh1jhjCubjX)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMC.hjCubj )}(hGet network statistics from device. Return **storage**. The device driver may provide its own method by setting dev->netdev_ops->get_stats64 or dev->netdev_ops->get_stats; otherwise the internal statistics structure is used.h]jX)}(hGet network statistics from device. Return **storage**. The device driver may provide its own method by setting dev->netdev_ops->get_stats64 or dev->netdev_ops->get_stats; otherwise the internal statistics structure is used.h](h+Get network statistics from device. Return }(hjChhhNhNubj)}(h **storage**h]hstorage}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh. The device driver may provide its own method by setting dev->netdev_ops->get_stats64 or dev->netdev_ops->get_stats; otherwise the internal statistics structure is used.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chMB.hjCubah}(h]h ]h"]h$]h&]uh1j hjChMB.hjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"dev_fetch_sw_netstats (C function)c.dev_fetch_sw_netstatshNtauh1hhjhhhNhNubh)}(hhh](h)}(hjvoid dev_fetch_sw_netstats (struct rtnl_link_stats64 *s, const struct pcpu_sw_netstats __percpu *netstats)h]h)}(hivoid dev_fetch_sw_netstats(struct rtnl_link_stats64 *s, const struct pcpu_sw_netstats __percpu *netstats)h](j)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM|.ubj)}(h h]h }(hj#DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhj"DhM|.ubj)}(hdev_fetch_sw_netstatsh]j%)}(hdev_fetch_sw_netstatsh]hdev_fetch_sw_netstats}(hj5DhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1Dubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDhhhj"DhM|.ubj)}(hO(struct rtnl_link_stats64 *s, const struct pcpu_sw_netstats __percpu *netstats)h](j)}(hstruct rtnl_link_stats64 *sh](h)}(hjh]hstruct}(hjQDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMDubj)}(h h]h }(hj^DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMDubh)}(hhh]j%)}(hrtnl_link_stats64h]hrtnl_link_stats64}(hjoDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqDmodnameN classnameNjj!)}j$]j')}jj7Dsbc.dev_fetch_sw_netstatsasbuh1hhjMDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMDubj;)}(hj>h]h*}(hjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMDubj%)}(hsh]hs}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIDubj)}(h0const struct pcpu_sw_netstats __percpu *netstatsh](h)}(hjh]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(hpcpu_sw_netstatsh]hpcpu_sw_netstats}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]jDc.dev_fetch_sw_netstatsasbuh1hhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh__percpu}(hjDhhhNhNubj)}(h h]h }(hj,EhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hj:EhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hnetstatsh]hnetstats}(hjGEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIDubeh}(h]h ]h"]h$]h&]j<j=uh1jhjDhhhj"DhM|.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj Dhhhj"DhM|.ubah}(h]jDah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"DhM|.hj DhhubjS)}(hhh]jX)}(h%get per-cpu network device statisticsh]h%get per-cpu network device statistics}(hjqEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM|.hjnEhhubah}(h]h ]h"]h$]h&]uh1jRhj Dhhhj"DhM|.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjEjxjEjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct rtnl_link_stats64 *s`` place to store stats ``const struct pcpu_sw_netstats __percpu *netstats`` per-cpu network stats to read from **Description** Read per-cpu network statistics and populate the related fields in **s**.h](jX)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjEubj)}(hhh](j)}(h5``struct rtnl_link_stats64 *s`` place to store stats h](j)}(h``struct rtnl_link_stats64 *s``h]j)}(hjEh]hstruct rtnl_link_stats64 *s}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM}.hjEubj)}(hhh]jX)}(hplace to store statsh]hplace to store stats}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhM}.hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM}.hjEubj)}(hX``const struct pcpu_sw_netstats __percpu *netstats`` per-cpu network stats to read from h](j)}(h4``const struct pcpu_sw_netstats __percpu *netstats``h]j)}(hjEh]h0const struct pcpu_sw_netstats __percpu *netstats}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM~.hjEubj)}(hhh]jX)}(h"per-cpu network stats to read fromh]h"per-cpu network stats to read from}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhM~.hjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjFhM~.hjEubeh}(h]h ]h"]h$]h&]uh1jhjEubjX)}(h**Description**h]j)}(hj&Fh]h Description}(hj(FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Fubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjEubj )}(hIRead per-cpu network statistics and populate the related fields in **s**.h]jX)}(hj>Fh](hCRead per-cpu network statistics and populate the related fields in }(hj@FhhhNhNubj)}(h**s**h]hs}(hjGFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Fubh.}(hj@FhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjh]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjFubj%)}(hdevh]hdev}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(hstruct rtnl_link_stats64 *sh](h)}(hjh]hstruct}(hj5GhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1Gubj)}(h h]h }(hjBGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1Gubh)}(hhh]j%)}(hrtnl_link_stats64h]hrtnl_link_stats64}(hjSGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUGmodnameN classnameNjj!)}j$]jFc.dev_get_tstats64asbuh1hhj1Gubj)}(h h]h }(hjqGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1Gubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1Gubj%)}(hjDh]hs}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1Gubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubeh}(h]h ]h"]h$]h&]j<j=uh1jhjFhhhjFhM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~FhhhjFhM.ubah}(h]jyFah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjFhM.hj{FhhubjS)}(hhh]jX)}(hndo_get_stats64 implementationh]hndo_get_stats64 implementation}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjGhhubah}(h]h ]h"]h$]h&]uh1jRhj{FhhhjFhM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjGjxjGjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` device to get statistics from ``struct rtnl_link_stats64 *s`` place to store stats **Description** Populate **s** from dev->stats and dev->tstats. Can be used as ndo_get_stats64() callback.h](jX)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjGubj)}(hhh](j)}(h9``struct net_device *dev`` device to get statistics from h](j)}(h``struct net_device *dev``h]j)}(hjGh]hstruct net_device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjGubj)}(hhh]jX)}(hdevice to get statistics fromh]hdevice to get statistics from}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj HhM.hj Hubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj HhM.hjGubj)}(h5``struct rtnl_link_stats64 *s`` place to store stats h](j)}(h``struct rtnl_link_stats64 *s``h]j)}(hj/Hh]hstruct rtnl_link_stats64 *s}(hj1HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Hubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj)Hubj)}(hhh]jX)}(hplace to store statsh]hplace to store stats}(hjHHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDHhM.hjEHubah}(h]h ]h"]h$]h&]uh1jhj)Hubeh}(h]h ]h"]h$]h&]uh1jhjDHhM.hjGubeh}(h]h ]h"]h$]h&]uh1jhjGubjX)}(h**Description**h]j)}(hjjHh]h Description}(hjlHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhHubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjGubj )}(hZPopulate **s** from dev->stats and dev->tstats. Can be used as ndo_get_stats64() callback.h]jX)}(hZPopulate **s** from dev->stats and dev->tstats. Can be used as ndo_get_stats64() callback.h](h Populate }(hjHhhhNhNubj)}(h**s**h]hs}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhL from dev->stats and dev->tstats. Can be used as ndo_get_stats64() callback.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjHubah}(h]h ]h"]h$]h&]uh1j hjHhM.hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.netdev_sw_irq_coalesce_default_on (C function)#c.netdev_sw_irq_coalesce_default_onhNtauh1hhjhhhNhNubh)}(hhh](h)}(h?void netdev_sw_irq_coalesce_default_on (struct net_device *dev)h]h)}(h>void netdev_sw_irq_coalesce_default_on(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjHhM.ubj)}(h!netdev_sw_irq_coalesce_default_onh]j%)}(h!netdev_sw_irq_coalesce_default_onh]h!netdev_sw_irq_coalesce_default_on}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjHhM.ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj&IhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#Iubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(ImodnameN classnameNjj!)}j$]j')}jjHsb#c.netdev_sw_irq_coalesce_default_onasbuh1hhjIubj)}(h h]h }(hjFIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjTIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hdevh]hdev}(hjaIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubah}(h]h ]h"]h$]h&]j<j=uh1jhjHhhhjHhM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhjHhM.ubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhM.hjHhhubjS)}(hhh]jX)}(h#enable SW IRQ coalescing by defaulth]h#enable SW IRQ coalescing by default}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjIhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjHhM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjIjxjIjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` netdev to enable the IRQ coalescing on **Description** Sets a conservative default for SW IRQ coalescing. Users can use sysfs attributes to override the default values.h](jX)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjIubj)}(hhh]j)}(hB``struct net_device *dev`` netdev to enable the IRQ coalescing on h](j)}(h``struct net_device *dev``h]j)}(hjIh]hstruct net_device *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjIubj)}(hhh]jX)}(h&netdev to enable the IRQ coalescing onh]h&netdev to enable the IRQ coalescing on}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIhM.hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM.hjIubah}(h]h ]h"]h$]h&]uh1jhjIubjX)}(h**Description**h]j)}(hjJh]h Description}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjIubjX)}(hqSets a conservative default for SW IRQ coalescing. Users can use sysfs attributes to override the default values.h]hqSets a conservative default for SW IRQ coalescing. Users can use sysfs attributes to override the default values.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_netdev_mqs (C function)c.alloc_netdev_mqshNtauh1hhjhhhNhNubh)}(hhh](h)}(hstruct net_device * alloc_netdev_mqs (int sizeof_priv, const char *name, unsigned char name_assign_type, void (*setup)(struct net_device *), unsigned int txqs, unsigned int rxqs)h]h)}(hstruct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, unsigned char name_assign_type, void (*setup)(struct net_device*), unsigned int txqs, unsigned int rxqs)h](h)}(hjh]hstruct}(hjLJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHJhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.ubj)}(h h]h }(hjZJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHJhhhjYJhM.ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjkJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhJubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmJmodnameN classnameNjj!)}j$]j')}jalloc_netdev_mqssbc.alloc_netdev_mqsasbuh1hhjHJhhhjYJhM.ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHJhhhjYJhM.ubj;)}(hj>h]h*}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHJhhhjYJhM.ubj)}(halloc_netdev_mqsh]j%)}(hjJh]halloc_netdev_mqs}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHJhhhjYJhM.ubj)}(h(int sizeof_priv, const char *name, unsigned char name_assign_type, void (*setup)(struct net_device*), unsigned int txqs, unsigned int rxqs)h](j)}(hint sizeof_privh](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj%)}(h sizeof_privh]h sizeof_priv}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(hconst char *nameh](h)}(hjh]hconst}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj)}(hcharh]hchar}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hj$KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hj2KhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hnameh]hname}(hj?KhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(hunsigned char name_assign_typeh](j)}(hunsignedh]hunsigned}(hjXKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTKubj)}(h h]h }(hjfKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTKubj)}(hcharh]hchar}(hjtKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTKubj%)}(hname_assign_typeh]hname_assign_type}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(h!void (*setup)(struct net_device*)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj;)}(hjmh]h(}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj;)}(hj>h]h*}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj%)}(hsetuph]hsetup}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubj;)}(hjh]h)}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj;)}(hjmh]h(}(hjKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubh)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj%LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"Lubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'LmodnameN classnameNjj!)}j$]jJc.alloc_netdev_mqsasbuh1hhjKubj;)}(hj>h]h*}(hjCLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj;)}(hjh]h)}(hjPLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(hunsigned int txqsh](j)}(hunsignedh]hunsigned}(hjhLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdLubj)}(h h]h }(hjvLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdLubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdLubj%)}(htxqsh]htxqs}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubj)}(hunsigned int rxqsh](j)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj%)}(hrxqsh]hrxqs}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubeh}(h]h ]h"]h$]h&]j<j=uh1jhjHJhhhjYJhM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjDJhhhjYJhM.ubah}(h]j?Jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYJhM.hjAJhhubjS)}(hhh]jX)}(hallocate network deviceh]hallocate network device}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjMhhubah}(h]h ]h"]h$]h&]uh1jRhjAJhhhjYJhM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3Mjxj3Mjyjzj{uh1hhhhjhNhNubj})}(hX>**Parameters** ``int sizeof_priv`` size of private data to allocate space for ``const char *name`` device name format string ``unsigned char name_assign_type`` origin of device name ``void (*setup)(struct net_device *)`` callback to initialize device ``unsigned int txqs`` the number of TX subqueues to allocate ``unsigned int rxqs`` the number of RX subqueues to allocate **Description** Allocates a struct net_device with private data area for driver use and performs basic initialization. Also allocates subqueue structs for each queue on the device.h](jX)}(h**Parameters**h]j)}(hj=Mh]h Parameters}(hj?MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Mubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj7Mubj)}(hhh](j)}(h?``int sizeof_priv`` size of private data to allocate space for h](j)}(h``int sizeof_priv``h]j)}(hj\Mh]hint sizeof_priv}(hj^MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjVMubj)}(hhh]jX)}(h*size of private data to allocate space forh]h*size of private data to allocate space for}(hjuMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqMhM.hjrMubah}(h]h ]h"]h$]h&]uh1jhjVMubeh}(h]h ]h"]h$]h&]uh1jhjqMhM.hjSMubj)}(h/``const char *name`` device name format string h](j)}(h``const char *name``h]j)}(hjMh]hconst char *name}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjMubj)}(hhh]jX)}(hdevice name format stringh]hdevice name format string}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhM.hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM.hjSMubj)}(h9``unsigned char name_assign_type`` origin of device name h](j)}(h"``unsigned char name_assign_type``h]j)}(hjMh]hunsigned char name_assign_type}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjMubj)}(hhh]jX)}(horigin of device nameh]horigin of device name}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhM.hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhM.hjSMubj)}(hE``void (*setup)(struct net_device *)`` callback to initialize device h](j)}(h&``void (*setup)(struct net_device *)``h]j)}(hjNh]h"void (*setup)(struct net_device *)}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjNubj)}(hhh]jX)}(hcallback to initialize deviceh]hcallback to initialize device}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhM.hjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhM.hjSMubj)}(h=``unsigned int txqs`` the number of TX subqueues to allocate h](j)}(h``unsigned int txqs``h]j)}(hj@Nh]hunsigned int txqs}(hjBNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Nubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj:Nubj)}(hhh]jX)}(h&the number of TX subqueues to allocateh]h&the number of TX subqueues to allocate}(hjYNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUNhM.hjVNubah}(h]h ]h"]h$]h&]uh1jhj:Nubeh}(h]h ]h"]h$]h&]uh1jhjUNhM.hjSMubj)}(h=``unsigned int rxqs`` the number of RX subqueues to allocate h](j)}(h``unsigned int rxqs``h]j)}(hjyNh]hunsigned int rxqs}(hj{NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hjsNubj)}(hhh]jX)}(h&the number of RX subqueues to allocateh]h&the number of RX subqueues to allocate}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhM.hjNubah}(h]h ]h"]h$]h&]uh1jhjsNubeh}(h]h ]h"]h$]h&]uh1jhjNhM.hjSMubeh}(h]h ]h"]h$]h&]uh1jhj7MubjX)}(h**Description**h]j)}(hjNh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj7MubjX)}(hAllocates a struct net_device with private data area for driver use and performs basic initialization. Also allocates subqueue structs for each queue on the device.h]hAllocates a struct net_device with private data area for driver use and performs basic initialization. Also allocates subqueue structs for each queue on the device.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM.hj7Mubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hfree_netdev (C function) c.free_netdevhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)void free_netdev (struct net_device *dev)h]h)}(h(void free_netdev(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM~/ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNhhhjOhM~/ubj)}(h free_netdevh]j%)}(h free_netdevh]h free_netdev}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjNhhhjOhM~/ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj6OhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2Oubj)}(h h]h }(hjCOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2Oubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjTOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVOmodnameN classnameNjj!)}j$]j')}jjOsb c.free_netdevasbuh1hhj2Oubj)}(h h]h }(hjtOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2Oubj;)}(hj>h]h*}(hjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2Oubj%)}(hdevh]hdev}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2Oubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.Oubah}(h]h ]h"]h$]h&]j<j=uh1jhjNhhhjOhM~/ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjNhhhjOhM~/ubah}(h]jNah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhM~/hjNhhubjS)}(hhh]jX)}(hfree network deviceh]hfree network device}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM~/hjOhhubah}(h]h ]h"]h$]h&]uh1jRhjNhhhjOhM~/ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjOjxjOjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device **Description** This function does the last stage of destroying an allocated device interface. The reference to the device object is released. If this is the last reference then it will be freed.Must be called in process context.h](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjOubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjOh]hstruct net_device *dev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjOubj)}(hhh]jX)}(hdeviceh]hdevice}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhM/hjPubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjPhM/hjOubah}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hj5Ph]h Description}(hj7PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Pubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjOubjX)}(hThis function does the last stage of destroying an allocated device interface. The reference to the device object is released. If this is the last reference then it will be freed.Must be called in process context.h]hThis function does the last stage of destroying an allocated device interface. The reference to the device object is released. If this is the last reference then it will be freed.Must be called in process context.}(hjKPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_netdev_dummy (C function)c.alloc_netdev_dummyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8struct net_device * alloc_netdev_dummy (int sizeof_priv)h]h)}(h6struct net_device *alloc_netdev_dummy(int sizeof_priv)h](h)}(hjh]hstruct}(hjzPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvPhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvPhhhjPhM/ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j')}jalloc_netdev_dummysbc.alloc_netdev_dummyasbuh1hhjvPhhhjPhM/ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvPhhhjPhM/ubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvPhhhjPhM/ubj)}(halloc_netdev_dummyh]j%)}(hjPh]halloc_netdev_dummy}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjvPhhhjPhM/ubj)}(h(int sizeof_priv)h]j)}(hint sizeof_privh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj%)}(h sizeof_privh]h sizeof_priv}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubah}(h]h ]h"]h$]h&]j<j=uh1jhjvPhhhjPhM/ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrPhhhjPhM/ubah}(h]jmPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjPhM/hjoPhhubjS)}(hhh]jX)}(h+Allocate and initialize a dummy net device.h]h+Allocate and initialize a dummy net device.}(hj:QhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj7Qhhubah}(h]h ]h"]h$]h&]uh1jRhjoPhhhjPhM/ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjRQjxjRQjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``int sizeof_priv`` size of private data to allocate space for **Return** the allocated net_device on success, NULL otherwiseh](jX)}(h**Parameters**h]j)}(hj\Qh]h Parameters}(hj^QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZQubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjVQubj)}(hhh]j)}(h?``int sizeof_priv`` size of private data to allocate space for h](j)}(h``int sizeof_priv``h]j)}(hj{Qh]hint sizeof_priv}(hj}QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyQubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjuQubj)}(hhh]jX)}(h*size of private data to allocate space forh]h*size of private data to allocate space for}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhM/hjQubah}(h]h ]h"]h$]h&]uh1jhjuQubeh}(h]h ]h"]h$]h&]uh1jhjQhM/hjrQubah}(h]h ]h"]h$]h&]uh1jhjVQubjX)}(h **Return**h]j)}(hjQh]hReturn}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjVQubjX)}(h3the allocated net_device on success, NULL otherwiseh]h3the allocated net_device on success, NULL otherwise}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjVQubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsynchronize_net (C function)c.synchronize_nethNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid synchronize_net (void)h]h)}(hvoid synchronize_net(void)h](j)}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/ubj)}(h h]h }(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQhhhj RhM/ubj)}(hsynchronize_neth]j%)}(hsynchronize_neth]hsynchronize_net}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjQhhhj RhM/ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hj8RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Rubah}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0Rubah}(h]h ]h"]h$]h&]j<j=uh1jhjQhhhj RhM/ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjQhhhj RhM/ubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj RhM/hjQhhubjS)}(hhh]jX)}(h*Synchronize with packet receive processingh]h*Synchronize with packet receive processing}(hjbRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj_Rhhubah}(h]h ]h"]h$]h&]uh1jRhjQhhhj RhM/ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzRjxjzRjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``void`` no arguments **Description** Wait for packets currently being received to be done. Does not block later packets from starting.h](jX)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj~Rubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjRh]hvoid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chKhjRubj)}(hhh]jX)}(h no argumentsh]h no arguments}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjRhKhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhKhjRubah}(h]h ]h"]h$]h&]uh1jhj~RubjX)}(h**Description**h]j)}(hjRh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chKhj~Rubj )}(haWait for packets currently being received to be done. Does not block later packets from starting.h]jX)}(haWait for packets currently being received to be done. Does not block later packets from starting.h]haWait for packets currently being received to be done. Does not block later packets from starting.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjRubah}(h]h ]h"]h$]h&]uh1j hjShM/hj~Rubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'unregister_netdevice_queue (C function)c.unregister_netdevice_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hPvoid unregister_netdevice_queue (struct net_device *dev, struct list_head *head)h]h)}(hOvoid unregister_netdevice_queue(struct net_device *dev, struct list_head *head)h](j)}(hvoidh]hvoid}(hj-ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ShhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/ubj)}(h h]h }(hjh]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfSubj%)}(hdevh]hdev}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbSubj)}(hstruct list_head *headh](h)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(h list_headh]h list_head}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]jSc.unregister_netdevice_queueasbuh1hhjSubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hj&ThhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hheadh]hhead}(hj3ThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbSubeh}(h]h ]h"]h$]h&]j<j=uh1jhj)Shhhj;ShM/ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%Shhhj;ShM/ubah}(h]j Sah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj;ShM/hj"ShhubjS)}(hhh]jX)}(hremove device from the kernelh]hremove device from the kernel}(hj]ThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjZThhubah}(h]h ]h"]h$]h&]uh1jRhj"Shhhj;ShM/ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjuTjxjuTjyjzj{uh1hhhhjhNhNubj})}(hXk**Parameters** ``struct net_device *dev`` device ``struct list_head *head`` list **Description** This function shuts down a device interface and removes it from the kernel tables. If head not NULL, device is queued to be unregistered later. Callers must hold the rtnl semaphore. You may want unregister_netdev() instead of this.h](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Tubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjyTubj)}(hhh](j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjTh]hstruct net_device *dev}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjTubj)}(hhh]jX)}(hdeviceh]hdevice}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThM/hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM/hjTubj)}(h ``struct list_head *head`` list h](j)}(h``struct list_head *head``h]j)}(hjTh]hstruct list_head *head}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjTubj)}(hhh]jX)}(hlisth]hlist}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThM/hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM/hjTubeh}(h]h ]h"]h$]h&]uh1jhjyTubjX)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hjyTubj )}(hThis function shuts down a device interface and removes it from the kernel tables. If head not NULL, device is queued to be unregistered later. Callers must hold the rtnl semaphore. You may want unregister_netdev() instead of this.h](jX)}(hThis function shuts down a device interface and removes it from the kernel tables. If head not NULL, device is queued to be unregistered later.h]hThis function shuts down a device interface and removes it from the kernel tables. If head not NULL, device is queued to be unregistered later.}(hj,UhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj(UubjX)}(hXCallers must hold the rtnl semaphore. You may want unregister_netdev() instead of this.h]hXCallers must hold the rtnl semaphore. You may want unregister_netdev() instead of this.}(hj;UhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM/hj(Uubeh}(h]h ]h"]h$]h&]uh1j hj:UhM/hjyTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&unregister_netdevice_many (C function)c.unregister_netdevice_manyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h7void unregister_netdevice_many (struct list_head *head)h]h)}(h6void unregister_netdevice_many(struct list_head *head)h](j)}(hvoidh]hvoid}(hjpUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlUhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlUhhhj~UhM0ubj)}(hunregister_netdevice_manyh]j%)}(hunregister_netdevice_manyh]hunregister_netdevice_many}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjlUhhhj~UhM0ubj)}(h(struct list_head *head)h]j)}(hstruct list_head *headh](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hhh]j%)}(h list_headh]h list_head}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]j')}jjUsbc.unregister_netdevice_manyasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hheadh]hhead}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubah}(h]h ]h"]h$]h&]j<j=uh1jhjlUhhhj~UhM0ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhUhhhj~UhM0ubah}(h]jcUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~UhM0hjeUhhubjS)}(hhh]jX)}(hunregister many devicesh]hunregister many devices}(hj0VhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hj-Vhhubah}(h]h ]h"]h$]h&]uh1jRhjeUhhhj~UhM0ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHVjxjHVjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct list_head *head`` list of devices **Note** As most callers use a stack allocated list_head, we force a list_del() to make sure stack won't be corrupted later.h](jX)}(h**Parameters**h]j)}(hjRVh]h Parameters}(hjTVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPVubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjLVubj)}(hhh]j)}(h+``struct list_head *head`` list of devices h](j)}(h``struct list_head *head``h]j)}(hjqVh]hstruct list_head *head}(hjsVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoVubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjkVubj)}(hhh]jX)}(hlist of devicesh]hlist of devices}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhM0hjVubah}(h]h ]h"]h$]h&]uh1jhjkVubeh}(h]h ]h"]h$]h&]uh1jhjVhM0hjhVubah}(h]h ]h"]h$]h&]uh1jhjLVubjX)}(h**Note**h]j)}(hjVh]hNote}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjLVubj)}(hhh]j)}(hsAs most callers use a stack allocated list_head, we force a list_del() to make sure stack won't be corrupted later.h](j)}(h0As most callers use a stack allocated list_head,h]h0As most callers use a stack allocated list_head,}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjVubj)}(hhh]jX)}(hBwe force a list_del() to make sure stack won't be corrupted later.h]hDwe force a list_del() to make sure stack won’t be corrupted later.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM0hjVubah}(h]h ]h"]h$]h&]uh1jhjLVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hunregister_netdev (C function)c.unregister_netdevhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void unregister_netdev (struct net_device *dev)h]h)}(h.void unregister_netdev(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0ubj)}(h h]h }(hj+WhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWhhhj*WhM0ubj)}(hunregister_netdevh]j%)}(hunregister_netdevh]hunregister_netdev}(hj=WhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9Wubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjWhhhj*WhM0ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjYWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUWubj)}(h h]h }(hjfWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUWubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjwWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjyWmodnameN classnameNjj!)}j$]j')}jj?Wsbc.unregister_netdevasbuh1hhjUWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUWubj;)}(hj>h]h*}(hjWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUWubj%)}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjQWubah}(h]h ]h"]h$]h&]j<j=uh1jhjWhhhj*WhM0ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWhhhj*WhM0ubah}(h]jWah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*WhM0hjWhhubjS)}(hhh]jX)}(hremove device from the kernelh]hremove device from the kernel}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjWhhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhj*WhM0ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjhNhNubj})}(hX@**Parameters** ``struct net_device *dev`` device **Description** This function shuts down a device interface and removes it from the kernel tables. This is just a wrapper for unregister_netdevice that takes the rtnl semaphore. In general you want to use this and not unregister_netdevice.h](jX)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjWubj)}(hhh]j)}(h"``struct net_device *dev`` device h](j)}(h``struct net_device *dev``h]j)}(hjXh]hstruct net_device *dev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjXubj)}(hhh]jX)}(hdeviceh]hdevice}(hj6XhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2XhM0hj3Xubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj2XhM0hjXubah}(h]h ]h"]h$]h&]uh1jhjWubjX)}(h**Description**h]j)}(hjXXh]h Description}(hjZXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVXubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjWubj )}(hThis function shuts down a device interface and removes it from the kernel tables. This is just a wrapper for unregister_netdevice that takes the rtnl semaphore. In general you want to use this and not unregister_netdevice.h](jX)}(hRThis function shuts down a device interface and removes it from the kernel tables.h]hRThis function shuts down a device interface and removes it from the kernel tables.}(hjrXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjnXubjX)}(hThis is just a wrapper for unregister_netdevice that takes the rtnl semaphore. In general you want to use this and not unregister_netdevice.h]hThis is just a wrapper for unregister_netdevice that takes the rtnl semaphore. In general you want to use this and not unregister_netdevice.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM0hjnXubeh}(h]h ]h"]h$]h&]uh1j hjXhM0hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&netdev_increment_features (C function)c.netdev_increment_featureshNtauh1hhjhhhNhNubh)}(hhh](h)}(hrnetdev_features_t netdev_increment_features (netdev_features_t all, netdev_features_t one, netdev_features_t mask)h]h)}(hqnetdev_features_t netdev_increment_features(netdev_features_t all, netdev_features_t one, netdev_features_t mask)h](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j')}jnetdev_increment_featuressbc.netdev_increment_featuresasbuh1hhjXhhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhjXhM1ubj)}(hnetdev_increment_featuresh]j%)}(hjXh]hnetdev_increment_features}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXhhhjXhM1ubj)}(hF(netdev_features_t all, netdev_features_t one, netdev_features_t mask)h](j)}(hnetdev_features_t allh](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hj YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj YmodnameN classnameNjj!)}j$]jXc.netdev_increment_featuresasbuh1hhjYubj)}(h h]h }(hj)YhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(hallh]hall}(hj7YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubj)}(hnetdev_features_t oneh](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hjSYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUYmodnameN classnameNjj!)}j$]jXc.netdev_increment_featuresasbuh1hhjLYubj)}(h h]h }(hjqYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLYubj%)}(honeh]hone}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubj)}(hnetdev_features_t maskh](h)}(hhh]j%)}(hnetdev_features_th]hnetdev_features_t}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjYmodnameN classnameNjj!)}j$]jXc.netdev_increment_featuresasbuh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(hmaskh]hmask}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubeh}(h]h ]h"]h$]h&]j<j=uh1jhjXhhhjXhM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXhhhjXhM1ubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhM1hjXhhubjS)}(hhh]jX)}(hincrement feature set by oneh]hincrement feature set by one}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjYhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhjXhM1ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj Zjxj Zjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``netdev_features_t all`` current feature set ``netdev_features_t one`` new feature set ``netdev_features_t mask`` mask feature set **Description** Computes a new feature set after adding a device with feature set **one** to the master device with current feature set **all**. Will not enable anything that is off in **mask**. Returns the new feature set.h](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj Zubj)}(hhh](j)}(h.``netdev_features_t all`` current feature set h](j)}(h``netdev_features_t all``h]j)}(hj2Zh]hnetdev_features_t all}(hj4ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Zubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj,Zubj)}(hhh]jX)}(hcurrent feature seth]hcurrent feature set}(hjKZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGZhM1hjHZubah}(h]h ]h"]h$]h&]uh1jhj,Zubeh}(h]h ]h"]h$]h&]uh1jhjGZhM1hj)Zubj)}(h*``netdev_features_t one`` new feature set h](j)}(h``netdev_features_t one``h]j)}(hjkZh]hnetdev_features_t one}(hjmZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiZubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjeZubj)}(hhh]jX)}(hnew feature seth]hnew feature set}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhM1hjZubah}(h]h ]h"]h$]h&]uh1jhjeZubeh}(h]h ]h"]h$]h&]uh1jhjZhM1hj)Zubj)}(h,``netdev_features_t mask`` mask feature set h](j)}(h``netdev_features_t mask``h]j)}(hjZh]hnetdev_features_t mask}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjZubj)}(hhh]jX)}(hmask feature seth]hmask feature set}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhM1hjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhM1hj)Zubeh}(h]h ]h"]h$]h&]uh1jhj ZubjX)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj Zubj )}(hComputes a new feature set after adding a device with feature set **one** to the master device with current feature set **all**. Will not enable anything that is off in **mask**. Returns the new feature set.h]jX)}(hComputes a new feature set after adding a device with feature set **one** to the master device with current feature set **all**. Will not enable anything that is off in **mask**. Returns the new feature set.h](hBComputes a new feature set after adding a device with feature set }(hjZhhhNhNubj)}(h**one**h]hone}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh/ to the master device with current feature set }(hjZhhhNhNubj)}(h**all**h]hall}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh+. Will not enable anything that is off in }(hjZhhhNhNubj)}(h**mask**h]hmask}(hj%[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh. Returns the new feature set.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjZubah}(h]h ]h"]h$]h&]uh1j hj=[hM1hj Zubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1netdev_compute_master_upper_features (C function)&c.netdev_compute_master_upper_featureshNtauh1hhjhhhNhNubh)}(hhh](h)}(hVvoid netdev_compute_master_upper_features (struct net_device *dev, bool update_header)h]h)}(hUvoid netdev_compute_master_upper_features(struct net_device *dev, bool update_header)h](j)}(hvoidh]hvoid}(hjd[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`[hhhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1ubj)}(h h]h }(hjs[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`[hhhjr[hM1ubj)}(h$netdev_compute_master_upper_featuresh]j%)}(h$netdev_compute_master_upper_featuresh]h$netdev_compute_master_upper_features}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj`[hhhjr[hM1ubj)}(h,(struct net_device *dev, bool update_header)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]j')}jj[sb&c.netdev_compute_master_upper_featuresasbuh1hhj[ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ubj%)}(hdevh]hdev}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[ubj)}(hbool update_headerh](j)}(hjTh]hbool}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hj \hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj%)}(h update_headerh]h update_header}(hj.\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj`[hhhjr[hM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj\[hhhjr[hM1ubah}(h]jW[ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjr[hM1hjY[hhubjS)}(hhh]jX)}(hcompute feature from lowersh]hcompute feature from lowers}(hjX\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjU\hhubah}(h]h ]h"]h$]h&]uh1jRhjY[hhhjr[hM1ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjp\jxjp\jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` the upper device ``bool update_header`` whether to update upper device's header_len/headroom/tailroom **Description** Recompute the upper device's feature based on all lower devices.h](jX)}(h**Parameters**h]j)}(hjz\h]h Parameters}(hj|\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx\ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjt\ubj)}(hhh](j)}(h,``struct net_device *dev`` the upper device h](j)}(h``struct net_device *dev``h]j)}(hj\h]hstruct net_device *dev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj\ubj)}(hhh]jX)}(hthe upper deviceh]hthe upper device}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hM1hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM1hj\ubj)}(hU``bool update_header`` whether to update upper device's header_len/headroom/tailroom h](j)}(h``bool update_header``h]j)}(hj\h]hbool update_header}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj\ubj)}(hhh]jX)}(h=whether to update upper device's header_len/headroom/tailroomh]h?whether to update upper device’s header_len/headroom/tailroom}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hM1hj\ubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhj\hM1hj\ubeh}(h]h ]h"]h$]h&]uh1jhjt\ubjX)}(h**Description**h]j)}(hj ]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hjt\ubj )}(h@Recompute the upper device's feature based on all lower devices.h]jX)}(hj%]h]hBRecompute the upper device’s feature based on all lower devices.}(hj']hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhN/var/lib/git/docbuild/linux/Documentation/networking/kapi:92: ./net/core/dev.chM1hj#]ubah}(h]h ]h"]h$]h&]uh1j hj4]hM1hjt\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_header (C function) c.eth_headerhNtauh1hhjhhhNhNubh)}(hhh](h)}(hint eth_header (struct sk_buff *skb, struct net_device *dev, unsigned short type, const void *daddr, const void *saddr, unsigned int len)h]h)}(hint eth_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, const void *daddr, const void *saddr, unsigned int len)h](j)}(hinth]hint}(hj[]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKCubj)}(h h]h }(hjj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW]hhhji]hKCubj)}(h eth_headerh]j%)}(h eth_headerh]h eth_header}(hj|]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjx]ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjW]hhhji]hKCubj)}(hz(struct sk_buff *skb, struct net_device *dev, unsigned short type, const void *daddr, const void *saddr, unsigned int len)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]modnameN classnameNjj!)}j$]j')}jj~]sb c.eth_headerasbuh1hhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj;)}(hj>h]h*}(hj]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]ubj%)}(hskbh]hskb}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj(^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*^modnameN classnameNjj!)}j$]j] c.eth_headerasbuh1hhj^ubj)}(h h]h }(hjF^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjT^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hdevh]hdev}(hja^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hunsigned short typeh](j)}(hunsignedh]hunsigned}(hjz^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv^ubj)}(hshorth]hshort}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv^ubj%)}(htypeh]htype}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hconst void *daddrh](h)}(hjh]hconst}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hdaddrh]hdaddr}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hconst void *saddrh](h)}(hjh]hconst}(hj(_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$_ubj)}(h h]h }(hj5_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$_ubj)}(hvoidh]hvoid}(hjC_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$_ubj)}(h h]h }(hjQ_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$_ubj;)}(hj>h]h*}(hj__hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$_ubj%)}(hsaddrh]hsaddr}(hjl_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hunsigned int lenh](j)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(hlenh]hlen}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjW]hhhji]hKCubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjS]hhhji]hKCubah}(h]jN]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhji]hKChjP]hhubjS)}(hhh]jX)}(hcreate the Ethernet headerh]hcreate the Ethernet header}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKChj_hhubah}(h]h ]h"]h$]h&]uh1jRhjP]hhhji]hKCubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj_jxj_jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct sk_buff *skb`` buffer to alter ``struct net_device *dev`` source device ``unsigned short type`` Ethernet type field ``const void *daddr`` destination address (NULL leave destination address) ``const void *saddr`` source address (NULL use device source address) ``unsigned int len`` packet length (<= skb->len) **Description** Set the protocol type. For a packet of type ETH_P_802_3/2 we put the length in here instead.h](jX)}(h**Parameters**h]j)}(hj `h]h Parameters}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKGhj`ubj)}(hhh](j)}(h(``struct sk_buff *skb`` buffer to alter h](j)}(h``struct sk_buff *skb``h]j)}(hj(`h]hstruct sk_buff *skb}(hj*`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&`ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKDhj"`ubj)}(hhh]jX)}(hbuffer to alterh]hbuffer to alter}(hjA`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=`hKDhj>`ubah}(h]h ]h"]h$]h&]uh1jhj"`ubeh}(h]h ]h"]h$]h&]uh1jhj=`hKDhj`ubj)}(h)``struct net_device *dev`` source device h](j)}(h``struct net_device *dev``h]j)}(hja`h]hstruct net_device *dev}(hjc`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_`ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKEhj[`ubj)}(hhh]jX)}(h source deviceh]h source device}(hjz`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjv`hKEhjw`ubah}(h]h ]h"]h$]h&]uh1jhj[`ubeh}(h]h ]h"]h$]h&]uh1jhjv`hKEhj`ubj)}(h,``unsigned short type`` Ethernet type field h](j)}(h``unsigned short type``h]j)}(hj`h]hunsigned short type}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKFhj`ubj)}(hhh]jX)}(hEthernet type fieldh]hEthernet type field}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hKFhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hKFhj`ubj)}(hK``const void *daddr`` destination address (NULL leave destination address) h](j)}(h``const void *daddr``h]j)}(hj`h]hconst void *daddr}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKGhj`ubj)}(hhh]jX)}(h4destination address (NULL leave destination address)h]h4destination address (NULL leave destination address)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hKGhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hKGhj`ubj)}(hF``const void *saddr`` source address (NULL use device source address) h](j)}(h``const void *saddr``h]j)}(hj ah]hconst void *saddr}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj aubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKHhjaubj)}(hhh]jX)}(h/source address (NULL use device source address)h]h/source address (NULL use device source address)}(hj%ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!ahKHhj"aubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj!ahKHhj`ubj)}(h1``unsigned int len`` packet length (<= skb->len) h](j)}(h``unsigned int len``h]j)}(hjEah]hunsigned int len}(hjGahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCaubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKIhj?aubj)}(hhh]jX)}(hpacket length (<= skb->len)h]hpacket length (<= skb->len)}(hj^ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZahKIhj[aubah}(h]h ]h"]h$]h&]uh1jhj?aubeh}(h]h ]h"]h$]h&]uh1jhjZahKIhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjX)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~aubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKKhj`ubjX)}(h\Set the protocol type. For a packet of type ETH_P_802_3/2 we put the length in here instead.h]h\Set the protocol type. For a packet of type ETH_P_802_3/2 we put the length in here instead.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKJhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_get_headlen (C function)c.eth_get_headlenhNtauh1hhjhhhNhNubh)}(hhh](h)}(hMu32 eth_get_headlen (const struct net_device *dev, const void *data, u32 len)h]h)}(hLu32 eth_get_headlen(const struct net_device *dev, const void *data, u32 len)h](h)}(hhh]j%)}(hu32h]hu32}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j')}jeth_get_headlensbc.eth_get_headlenasbuh1hhjahhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKuubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjahhhjahKuubj)}(heth_get_headlenh]j%)}(hjah]heth_get_headlen}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjahhhjahKuubj)}(h9(const struct net_device *dev, const void *data, u32 len)h](j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hj$bhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hjh]hstruct}(hj2bhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hj?bhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjPbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMbubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRbmodnameN classnameNjj!)}j$]jac.eth_get_headlenasbuh1hhjbubj)}(h h]h }(hjnbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hj|bhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(hdevh]hdev}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubj)}(hconst void *datah](h)}(hjh]hconst}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(hdatah]hdata}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubj)}(hu32 lenh](h)}(hhh]j%)}(hu32h]hu32}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]jac.eth_get_headlenasbuh1hhjbubj)}(h h]h }(hj chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj%)}(hlenh]hlen}(hj.chhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubeh}(h]h ]h"]h$]h&]j<j=uh1jhjahhhjahKuubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjahKuubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahKuhjahhubjS)}(hhh]jX)}(h4determine the length of header for an ethernet frameh]h4determine the length of header for an ethernet frame}(hjXchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKuhjUchhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjahKuubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjpcjxjpcjyjzj{uh1hhhhjhNhNubj})}(hX **Parameters** ``const struct net_device *dev`` pointer to network device ``const void *data`` pointer to start of frame ``u32 len`` total length of frame **Description** Make a best effort attempt to pull the length for all of the headers for a given frame in a linear buffer.h](jX)}(h**Parameters**h]j)}(hjzch]h Parameters}(hj|chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxcubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKyhjtcubj)}(hhh](j)}(h;``const struct net_device *dev`` pointer to network device h](j)}(h ``const struct net_device *dev``h]j)}(hjch]hconst struct net_device *dev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKvhjcubj)}(hhh]jX)}(hpointer to network deviceh]hpointer to network device}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchKvhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKvhjcubj)}(h/``const void *data`` pointer to start of frame h](j)}(h``const void *data``h]j)}(hjch]hconst void *data}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKwhjcubj)}(hhh]jX)}(hpointer to start of frameh]hpointer to start of frame}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchKwhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKwhjcubj)}(h"``u32 len`` total length of frame h](j)}(h ``u32 len``h]j)}(hj dh]hu32 len}(hj dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj dubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKxhjdubj)}(hhh]jX)}(htotal length of frameh]htotal length of frame}(hj$dhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj dhKxhj!dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj dhKxhjcubeh}(h]h ]h"]h$]h&]uh1jhjtcubjX)}(h**Description**h]j)}(hjFdh]h Description}(hjHdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDdubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKzhjtcubjX)}(hjMake a best effort attempt to pull the length for all of the headers for a given frame in a linear buffer.h]hjMake a best effort attempt to pull the length for all of the headers for a given frame in a linear buffer.}(hj\dhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKyhjtcubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_type_trans (C function)c.eth_type_transhNtauh1hhjhhhNhNubh)}(hhh](h)}(hC__be16 eth_type_trans (struct sk_buff *skb, struct net_device *dev)h]h)}(hB__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)h](h)}(hhh]j%)}(h__be16h]h__be16}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]j')}jeth_type_transsbc.eth_type_transasbuh1hhjdhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdhhhjdhKubj)}(heth_type_transh]j%)}(hjdh]heth_type_trans}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjdhhhjdhKubj)}(h-(struct sk_buff *skb, struct net_device *dev)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]jdc.eth_type_transasbuh1hhjdubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hj'ehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hskbh]hskb}(hj4ehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjdubj)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjMehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIeubj)}(h h]h }(hjZehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIeubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjkehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjheubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmemodnameN classnameNjj!)}j$]jdc.eth_type_transasbuh1hhjIeubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIeubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIeubj%)}(hdevh]hdev}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjdubeh}(h]h ]h"]h$]h&]j<j=uh1jhjdhhhjdhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhjdhKubah}(h]j~dah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjdhKhjdhhubjS)}(hhh]jX)}(h#determine the packet's protocol ID.h]h%determine the packet’s protocol ID.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjehhubah}(h]h ]h"]h$]h&]uh1jRhjdhhhjdhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjejxjejyjzj{uh1hhhhjhNhNubj})}(hX **Parameters** ``struct sk_buff *skb`` received socket data ``struct net_device *dev`` receiving network device **Description** The rule here is that we assume 802.3 if the type field is short enough to be a length. This is normal practice and works for any 'now in use' protocol.h](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjeubj)}(hhh](j)}(h-``struct sk_buff *skb`` received socket data h](j)}(h``struct sk_buff *skb``h]j)}(hjfh]hstruct sk_buff *skb}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj fubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj fubj)}(hhh]jX)}(hreceived socket datah]hreceived socket data}(hj(fhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$fhKhj%fubah}(h]h ]h"]h$]h&]uh1jhj fubeh}(h]h ]h"]h$]h&]uh1jhj$fhKhjfubj)}(h4``struct net_device *dev`` receiving network device h](j)}(h``struct net_device *dev``h]j)}(hjHfh]hstruct net_device *dev}(hjJfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFfubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjBfubj)}(hhh]jX)}(hreceiving network deviceh]hreceiving network device}(hjafhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]fhKhj^fubah}(h]h ]h"]h$]h&]uh1jhjBfubeh}(h]h ]h"]h$]h&]uh1jhj]fhKhjfubeh}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjeubjX)}(hThe rule here is that we assume 802.3 if the type field is short enough to be a length. This is normal practice and works for any 'now in use' protocol.h]hThe rule here is that we assume 802.3 if the type field is short enough to be a length. This is normal practice and works for any ‘now in use’ protocol.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_header_parse (C function)c.eth_header_parsehNtauh1hhjhhhNhNubh)}(hhh](h)}(hFint eth_header_parse (const struct sk_buff *skb, unsigned char *haddr)h]h)}(hEint eth_header_parse(const struct sk_buff *skb, unsigned char *haddr)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjfhKubj)}(heth_header_parseh]j%)}(heth_header_parseh]heth_header_parse}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfhhhjfhKubj)}(h1(const struct sk_buff *skb, unsigned char *haddr)h](j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubh)}(hjh]hstruct}(hj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgubj)}(h h]h }(hj-ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj>ghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;gubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj@gmodnameN classnameNjj!)}j$]j')}jjfsbc.eth_header_parseasbuh1hhjgubj)}(h h]h }(hj^ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjlghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(hskbh]hskb}(hjyghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(hunsigned char *haddrh](j)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj)}(hcharh]hchar}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(hhaddrh]hhaddr}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubeh}(h]h ]h"]h$]h&]j<j=uh1jhjfhhhjfhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhjfhKubah}(h]jfah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjfhKhjfhhubjS)}(hhh]jX)}(h$extract hardware address from packeth]h$extract hardware address from packet}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjghhubah}(h]h ]h"]h$]h&]uh1jRhjfhhhjfhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjhNhNubj})}(h|**Parameters** ``const struct sk_buff *skb`` packet to extract header from ``unsigned char *haddr`` destination bufferh](jX)}(h**Parameters**h]j)}(hj#hh]h Parameters}(hj%hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!hubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjhubj)}(hhh](j)}(h<``const struct sk_buff *skb`` packet to extract header from h](j)}(h``const struct sk_buff *skb``h]j)}(hjBhh]hconst struct sk_buff *skb}(hjDhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@hubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjh]h*}(hjyihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hneighh]hneigh}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj iubj)}(hstruct hh_cache *hhh](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hhh_cacheh]hhh_cache}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]jgic.eth_header_cacheasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hhhh]hhh}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj iubj)}(h __be16 typeh](h)}(hhh]j%)}(h__be16h]h__be16}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjjmodnameN classnameNjj!)}j$]jgic.eth_header_cacheasbuh1hhj jubj)}(h h]h }(hj0jhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj jubj%)}(htypeh]htype}(hj>jhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj jubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj iubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjhhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhjhhKubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhhKhjhhhubjS)}(hhh]jX)}(hfill cache entry from neighbourh]hfill cache entry from neighbour}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjejhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhhjhhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct neighbour *neigh`` source neighbour ``struct hh_cache *hh`` destination cache entry ``__be16 type`` Ethernet type field **Description** Create an Ethernet header template from the neighbour.h](jX)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjjubj)}(hhh](j)}(h3``const struct neighbour *neigh`` source neighbour h](j)}(h!``const struct neighbour *neigh``h]j)}(hjjh]hconst struct neighbour *neigh}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjjubj)}(hhh]jX)}(hsource neighbourh]hsource neighbour}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhKhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjjubj)}(h0``struct hh_cache *hh`` destination cache entry h](j)}(h``struct hh_cache *hh``h]j)}(hjjh]hstruct hh_cache *hh}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjjubj)}(hhh]jX)}(hdestination cache entryh]hdestination cache entry}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhKhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjjubj)}(h$``__be16 type`` Ethernet type field h](j)}(h``__be16 type``h]j)}(hjkh]h __be16 type}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjkubj)}(hhh]jX)}(hEthernet type fieldh]hEthernet type field}(hj4khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0khKhj1kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj0khKhjjubeh}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hjVkh]h Description}(hjXkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTkubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjjubjX)}(h6Create an Ethernet header template from the neighbour.h]h6Create an Ethernet header template from the neighbour.}(hjlkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$eth_header_cache_update (C function)c.eth_header_cache_updatehNtauh1hhjhhhNhNubh)}(hhh](h)}(hlvoid eth_header_cache_update (struct hh_cache *hh, const struct net_device *dev, const unsigned char *haddr)h]h)}(hkvoid eth_header_cache_update(struct hh_cache *hh, const struct net_device *dev, const unsigned char *haddr)h](j)}(hvoidh]hvoid}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhjkhKubj)}(heth_header_cache_updateh]j%)}(heth_header_cache_updateh]heth_header_cache_update}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkhhhjkhKubj)}(hO(struct hh_cache *hh, const struct net_device *dev, const unsigned char *haddr)h](j)}(hstruct hh_cache *hhh](h)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(hhh_cacheh]hhh_cache}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjkmodnameN classnameNjj!)}j$]j')}jjksbc.eth_header_cache_updateasbuh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hj>h]h*}(hj$lhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(hhhh]hhh}(hj1lhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjJlhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFlubj)}(h h]h }(hjWlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFlubh)}(hjh]hstruct}(hjelhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFlubj)}(h h]h }(hjrlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFlubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]jlc.eth_header_cache_updateasbuh1hhjFlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFlubj;)}(hj>h]h*}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjFlubj%)}(hdevh]hdev}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hconst unsigned char *haddrh](h)}(hjh]hconst}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj)}(hcharh]hchar}(hj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubj;)}(hj>h]h*}(hj(mhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlubj%)}(hhaddrh]hhaddr}(hj5mhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubeh}(h]h ]h"]h$]h&]j<j=uh1jhjkhhhjkhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjkhhhjkhKubah}(h]jkah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkhKhjkhhubjS)}(hhh]jX)}(hupdate cache entryh]hupdate cache entry}(hj_mhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj\mhhubah}(h]h ]h"]h$]h&]uh1jRhjkhhhjkhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwmjxjwmjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct hh_cache *hh`` destination cache entry ``const struct net_device *dev`` network device ``const unsigned char *haddr`` new hardware address **Description** Called by Address Resolution module to notify changes in address.h](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj{mubj)}(hhh](j)}(h0``struct hh_cache *hh`` destination cache entry h](j)}(h``struct hh_cache *hh``h]j)}(hjmh]hstruct hh_cache *hh}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjmubj)}(hhh]jX)}(hdestination cache entryh]hdestination cache entry}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubj)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjmh]hconst struct net_device *dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhjmubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubj)}(h4``const unsigned char *haddr`` new hardware address h](j)}(h``const unsigned char *haddr``h]j)}(hjnh]hconst unsigned char *haddr}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj nubj)}(hhh]jX)}(hnew hardware addressh]hnew hardware address}(hj+nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'nhKhj(nubah}(h]h ]h"]h$]h&]uh1jhj nubeh}(h]h ]h"]h$]h&]uh1jhj'nhKhjmubeh}(h]h ]h"]h$]h&]uh1jhj{mubjX)}(h**Description**h]j)}(hjMnh]h Description}(hjOnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKnubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj{mubjX)}(hACalled by Address Resolution module to notify changes in address.h]hACalled by Address Resolution module to notify changes in address.}(hjcnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chKhj{mubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hð_header_parse_protocol (C function)c.eth_header_parse_protocolhNtauh1hhjhhhNhNubh)}(hhh](h)}(h<__be16 eth_header_parse_protocol (const struct sk_buff *skb)h]h)}(h;__be16 eth_header_parse_protocol(const struct sk_buff *skb)h](h)}(hhh]j%)}(h__be16h]h__be16}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j')}jeth_header_parse_protocolsbc.eth_header_parse_protocolasbuh1hhjnhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjnhMubj)}(heth_header_parse_protocolh]j%)}(hjnh]heth_header_parse_protocol}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjnhMubj)}(h(const struct sk_buff *skb)h]j)}(hconst struct sk_buff *skbh](h)}(hjh]hconst}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]jnc.eth_header_parse_protocolasbuh1hhjnubj)}(h h]h }(hj;ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hjIohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hskbh]hskb}(hjVohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubah}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjnhMubah}(h]jnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjnhhubjS)}(hhh]jX)}(hextract protocol from L2 headerh]hextract protocol from L2 header}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhj}ohhubah}(h]h ]h"]h$]h&]uh1jRhjnhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjhNhNubj})}(hO**Parameters** ``const struct sk_buff *skb`` packet to extract protocol fromh](jX)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjoubj)}(hhh]j)}(h=``const struct sk_buff *skb`` packet to extract protocol fromh](j)}(h``const struct sk_buff *skb``h]j)}(hjoh]hconst struct sk_buff *skb}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM hjoubj)}(hhh]jX)}(hpacket to extract protocol fromh]hpacket to extract protocol from}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohM hjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(eth_prepare_mac_addr_change (C function)c.eth_prepare_mac_addr_changehNtauh1hhjhhhNhNubh)}(hhh](h)}(hAint eth_prepare_mac_addr_change (struct net_device *dev, void *p)h]h)}(h@int eth_prepare_mac_addr_change(struct net_device *dev, void *p)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMubj)}(h h]h }(hj*phhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhj)phMubj)}(heth_prepare_mac_addr_changeh]j%)}(heth_prepare_mac_addr_changeh]heth_prepare_mac_addr_change}(hjpsbc.eth_prepare_mac_addr_changeasbuh1hhjTpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTpubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTpubj%)}(hdevh]hdev}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPpubj)}(hvoid *ph](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hjGh]hp}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPpubeh}(h]h ]h"]h$]h&]j<j=uh1jhjphhhj)phMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjphhhj)phMubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)phMhjphhubjS)}(hhh]jX)}(hprepare for mac changeh]hprepare for mac change}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jRhjphhhj)phMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4qjxj4qjyjzj{uh1hhhhjhNhNubj})}(hY**Parameters** ``struct net_device *dev`` network device ``void *p`` socket addressh](jX)}(h**Parameters**h]j)}(hj>qh]h Parameters}(hj@qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh]h*}(hjyrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)rubj%)}(hdevh]hdev}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)rubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%rubj)}(hvoid *ph](j)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjrhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hjGh]hp}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%rubeh}(h]h ]h"]h$]h&]j<j=uh1jhjqhhhjqhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjqhhhjqhM ubah}(h]jqah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjqhM hjqhhubjS)}(hhh]jX)}(hcommit mac changeh]hcommit mac change}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM hjrhhubah}(h]h ]h"]h$]h&]uh1jRhjqhhhjqhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj sjxj sjyjzj{uh1hhhhjhNhNubj})}(hY**Parameters** ``struct net_device *dev`` network device ``void *p`` socket addressh](jX)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM$hj subj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj2sh]hstruct net_device *dev}(hj4shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0subah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM!hj,subj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjKshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGshM!hjHsubah}(h]h ]h"]h$]h&]uh1jhj,subeh}(h]h ]h"]h$]h&]uh1jhjGshM!hj)subj)}(h``void *p`` socket addressh](j)}(h ``void *p``h]j)}(hjksh]hvoid *p}(hjmshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjisubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM#hjesubj)}(hhh]jX)}(hsocket addressh]hsocket address}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM"hjsubah}(h]h ]h"]h$]h&]uh1jhjesubeh}(h]h ]h"]h$]h&]uh1jhjshM#hj)subeh}(h]h ]h"]h$]h&]uh1jhj subeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_mac_addr (C function)c.eth_mac_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h2int eth_mac_addr (struct net_device *dev, void *p)h]h)}(h1int eth_mac_addr(struct net_device *dev, void *p)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM-ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjshhhjshM-ubj)}(h eth_mac_addrh]j%)}(h eth_mac_addrh]h eth_mac_addr}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjshhhjshM-ubj)}(h!(struct net_device *dev, void *p)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjsubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj thhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"tmodnameN classnameNjj!)}j$]j')}jjssbc.eth_mac_addrasbuh1hhjsubj)}(h h]h }(hj@thhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj;)}(hj>h]h*}(hjNthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjsubj%)}(hdevh]hdev}(hj[thhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubj)}(hvoid *ph](j)}(hvoidh]hvoid}(hjtthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjptubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjptubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjptubj%)}(hjGh]hp}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjptubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubeh}(h]h ]h"]h$]h&]j<j=uh1jhjshhhjshM-ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjshhhjshM-ubah}(h]jsah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjshM-hjshhubjS)}(hhh]jX)}(h!set new Ethernet hardware addressh]h!set new Ethernet hardware address}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM-hjthhubah}(h]h ]h"]h$]h&]uh1jRhjshhhjshM-ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``void *p`` socket address **Description** Change hardware address of device. This doesn't change hardware matching, so needs to be overridden for most real devices.h](jX)}(h**Parameters**h]j)}(hjth]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM1hjtubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjuh]hstruct net_device *dev}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM.hjuubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjuhM.hjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM.hjtubj)}(h``void *p`` socket address h](j)}(h ``void *p``h]j)}(hj@uh]hvoid *p}(hjBuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>uubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM/hj:uubj)}(hhh]jX)}(hsocket addressh]hsocket address}(hjYuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUuhM/hjVuubah}(h]h ]h"]h$]h&]uh1jhj:uubeh}(h]h ]h"]h$]h&]uh1jhjUuhM/hjtubeh}(h]h ]h"]h$]h&]uh1jhjtubjX)}(h**Description**h]j)}(hj{uh]h Description}(hj}uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyuubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM1hjtubjX)}(h"Change hardware address of device.h]h"Change hardware address of device.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM0hjtubjX)}(hWThis doesn't change hardware matching, so needs to be overridden for most real devices.h]hYThis doesn’t change hardware matching, so needs to be overridden for most real devices.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chM2hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hether_setup (C function) c.ether_setuphNtauh1hhjhhhNhNubh)}(hhh](h)}(h)void ether_setup (struct net_device *dev)h]h)}(h(void ether_setup(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMTubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuhhhjuhMTubj)}(h ether_setuph]j%)}(h ether_setuph]h ether_setup}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjuhhhjuhMTubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj*vhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'vubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj,vmodnameN classnameNjj!)}j$]j')}jjusb c.ether_setupasbuh1hhjvubj)}(h h]h }(hjJvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj;)}(hj>h]h*}(hjXvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hdevh]hdev}(hjevhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubah}(h]h ]h"]h$]h&]j<j=uh1jhjuhhhjuhMTubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjuhMTubah}(h]juah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjuhMThjuhhubjS)}(hhh]jX)}(hsetup Ethernet network deviceh]hsetup Ethernet network device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMThjvhhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjuhMTubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjvjxjvjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Fill in the fields of the device structure with Ethernet-generic values.h](jX)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMXhjvubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjvh]hstruct net_device *dev}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMUhjvubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMUhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMUhjvubah}(h]h ]h"]h$]h&]uh1jhjvubjX)}(h**Description**h]j)}(hj wh]h Description}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj wubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMWhjvubjX)}(hHFill in the fields of the device structure with Ethernet-generic values.h]hHFill in the fields of the device structure with Ethernet-generic values.}(hj!whhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMVhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](halloc_etherdev_mqs (C function)c.alloc_etherdev_mqshNtauh1hhjhhhNhNubh)}(hhh](h)}(h^struct net_device * alloc_etherdev_mqs (int sizeof_priv, unsigned int txqs, unsigned int rxqs)h]h)}(h\struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, unsigned int rxqs)h](h)}(hjh]hstruct}(hjPwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLwhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMmubj)}(h h]h }(hj^whhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLwhhhj]whMmubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjowhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlwubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqwmodnameN classnameNjj!)}j$]j')}jalloc_etherdev_mqssbc.alloc_etherdev_mqsasbuh1hhjLwhhhj]whMmubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLwhhhj]whMmubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLwhhhj]whMmubj)}(halloc_etherdev_mqsh]j%)}(hjwh]halloc_etherdev_mqs}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLwhhhj]whMmubj)}(h7(int sizeof_priv, unsigned int txqs, unsigned int rxqs)h](j)}(hint sizeof_privh](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj%)}(h sizeof_privh]h sizeof_priv}(hjwhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjwubj)}(hunsigned int txqsh](j)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hj xhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hj)xhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj%)}(htxqsh]htxqs}(hj7xhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjwubj)}(hunsigned int rxqsh](j)}(hunsignedh]hunsigned}(hjPxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLxubj)}(h h]h }(hj^xhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLxubj)}(hinth]hint}(hjlxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLxubj)}(h h]h }(hjzxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLxubj%)}(hrxqsh]hrxqs}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjwubeh}(h]h ]h"]h$]h&]j<j=uh1jhjLwhhhj]whMmubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHwhhhj]whMmubah}(h]jCwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]whMmhjEwhhubjS)}(hhh]jX)}(h(Allocates and sets up an Ethernet deviceh]h(Allocates and sets up an Ethernet device}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMmhjxhhubah}(h]h ]h"]h$]h&]uh1jRhjEwhhhj]whMmubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjxjxjxjyjzj{uh1hhhhjhNhNubj})}(hX2**Parameters** ``int sizeof_priv`` Size of additional driver-private structure to be allocated for this Ethernet device ``unsigned int txqs`` The number of TX queues this device has. ``unsigned int rxqs`` The number of RX queues this device has. **Description** Fill in the fields of the device structure with Ethernet-generic values. Basically does everything except registering the device. Constructs a new net device, complete with a private data area of size (sizeof_priv). A 32-byte (not bit) alignment is enforced for this private data area.h](jX)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMqhjxubj)}(hhh](j)}(hi``int sizeof_priv`` Size of additional driver-private structure to be allocated for this Ethernet device h](j)}(h``int sizeof_priv``h]j)}(hjxh]hint sizeof_priv}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMohjxubj)}(hhh]jX)}(hTSize of additional driver-private structure to be allocated for this Ethernet deviceh]hTSize of additional driver-private structure to be allocated for this Ethernet device}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMnhj yubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhMohjxubj)}(h?``unsigned int txqs`` The number of TX queues this device has. h](j)}(h``unsigned int txqs``h]j)}(hj-yh]hunsigned int txqs}(hj/yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+yubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMphj'yubj)}(hhh]jX)}(h(The number of TX queues this device has.h]h(The number of TX queues this device has.}(hjFyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjByhMphjCyubah}(h]h ]h"]h$]h&]uh1jhj'yubeh}(h]h ]h"]h$]h&]uh1jhjByhMphjxubj)}(h?``unsigned int rxqs`` The number of RX queues this device has. h](j)}(h``unsigned int rxqs``h]j)}(hjfyh]hunsigned int rxqs}(hjhyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdyubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMqhj`yubj)}(hhh]jX)}(h(The number of RX queues this device has.h]h(The number of RX queues this device has.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{yhMqhj|yubah}(h]h ]h"]h$]h&]uh1jhj`yubeh}(h]h ]h"]h$]h&]uh1jhj{yhMqhjxubeh}(h]h ]h"]h$]h&]uh1jhjxubjX)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMshjxubjX)}(hFill in the fields of the device structure with Ethernet-generic values. Basically does everything except registering the device.h]hFill in the fields of the device structure with Ethernet-generic values. Basically does everything except registering the device.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMrhjxubjX)}(hConstructs a new net device, complete with a private data area of size (sizeof_priv). A 32-byte (not bit) alignment is enforced for this private data area.h]hConstructs a new net device, complete with a private data area of size (sizeof_priv). A 32-byte (not bit) alignment is enforced for this private data area.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMuhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(platform_get_ethdev_address (C function)c.platform_get_ethdev_addresshNtauh1hhjhhhNhNubh)}(hhh](h)}(hOint platform_get_ethdev_address (struct device *dev, struct net_device *netdev)h]h)}(hNint platform_get_ethdev_address(struct device *dev, struct net_device *netdev)h](j)}(hinth]hint}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjzhMubj)}(hplatform_get_ethdev_addressh]j%)}(hplatform_get_ethdev_addressh]hplatform_get_ethdev_address}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjzhMubj)}(h/(struct device *dev, struct net_device *netdev)h](j)}(hstruct device *devh](h)}(hjh]hstruct}(hj2zhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.zubj)}(h h]h }(hj?zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.zubh)}(hhh]j%)}(hdeviceh]hdevice}(hjPzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRzmodnameN classnameNjj!)}j$]j')}jjzsbc.platform_get_ethdev_addressasbuh1hhj.zubj)}(h h]h }(hjpzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.zubj;)}(hj>h]h*}(hj~zhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.zubj%)}(hdevh]hdev}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.zubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*zubj)}(hstruct net_device *netdevh](h)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjzmodnameN classnameNjj!)}j$]jlzc.platform_get_ethdev_addressasbuh1hhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubj%)}(hnetdevh]hnetdev}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*zubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjzhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjyhhhjzhMubah}(h]jyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjzhMhjyhhubjS)}(hhh]jX)}(h,Set netdev's MAC address from a given deviceh]h.Set netdev’s MAC address from a given device}(hj%{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhj"{hhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjzhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj={jxj={jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct device *dev`` Pointer to the device ``struct net_device *netdev`` Pointer to netdev to write the address to **Description** Wrapper around eth_platform_get_mac_address() which writes the address directly to netdev->dev_addr.h](jX)}(h**Parameters**h]j)}(hjG{h]h Parameters}(hjI{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE{ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjA{ubj)}(hhh](j)}(h-``struct device *dev`` Pointer to the device h](j)}(h``struct device *dev``h]j)}(hjf{h]hstruct device *dev}(hjh{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhj`{ubj)}(hhh]jX)}(hPointer to the deviceh]hPointer to the device}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{{hMhj|{ubah}(h]h ]h"]h$]h&]uh1jhj`{ubeh}(h]h ]h"]h$]h&]uh1jhj{{hMhj]{ubj)}(hH``struct net_device *netdev`` Pointer to netdev to write the address to h](j)}(h``struct net_device *netdev``h]j)}(hj{h]hstruct net_device *netdev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhj{ubj)}(hhh]jX)}(h)Pointer to netdev to write the address toh]h)Pointer to netdev to write the address to}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj]{ubeh}(h]h ]h"]h$]h&]uh1jhjA{ubjX)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjA{ubjX)}(hdWrapper around eth_platform_get_mac_address() which writes the address directly to netdev->dev_addr.h]hdWrapper around eth_platform_get_mac_address() which writes the address directly to netdev->dev_addr.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMhjA{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#fwnode_get_mac_address (C function)c.fwnode_get_mac_addresshNtauh1hhjhhhNhNubh)}(hhh](h)}(hEint fwnode_get_mac_address (struct fwnode_handle *fwnode, char *addr)h]h)}(hDint fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr)h](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMAubj)}(h h]h }(hj.|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhj-|hMAubj)}(hfwnode_get_mac_addressh]j%)}(hfwnode_get_mac_addressh]hfwnode_get_mac_address}(hj@|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<|ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj|hhhj-|hMAubj)}(h*(struct fwnode_handle *fwnode, char *addr)h](j)}(hstruct fwnode_handle *fwnodeh](h)}(hjh]hstruct}(hj\|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjX|ubj)}(h h]h }(hji|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjX|ubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjz|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj||modnameN classnameNjj!)}j$]j')}jjB|sbc.fwnode_get_mac_addressasbuh1hhjX|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjX|ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjX|ubj%)}(hfwnodeh]hfwnode}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjX|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjT|ubj)}(h char *addrh](j)}(hcharh]hchar}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|ubj%)}(haddrh]haddr}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjT|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj|hhhj-|hMAubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhj-|hMAubah}(h]j|ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj-|hMAhj|hhubjS)}(hhh]jX)}(h"Get the MAC from the firmware nodeh]h"Get the MAC from the firmware node}(hj!}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMAhj}hhubah}(h]h ]h"]h$]h&]uh1jRhj|hhhj-|hMAubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9}jxj9}jyjzj{uh1hhhhjhNhNubj})}(hX7**Parameters** ``struct fwnode_handle *fwnode`` Pointer to the firmware node ``char *addr`` Address of buffer to store the MAC in **Description** Search the firmware node for the best MAC address to use. 'mac-address' is checked first, because that is supposed to contain to "most recent" MAC address. If that isn't set, then 'local-mac-address' is checked next, because that is the default address. If that isn't set, then the obsolete 'address' is checked, just in case we're using an old device tree. Note that the 'address' property is supposed to contain a virtual address of the register set, but some DTS files have redefined that property to be the MAC address. All-zero MAC addresses are rejected, because those could be properties that exist in the firmware tables, but were not updated by the firmware. For example, the DTS could define 'mac-address' and 'local-mac-address', with zero MAC addresses. Some older U-Boots only initialized 'local-mac-address'. In this case, the real MAC is in 'local-mac-address', and 'mac-address' exists but is all zeros.h](jX)}(h**Parameters**h]j)}(hjC}h]h Parameters}(hjE}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA}ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMEhj=}ubj)}(hhh](j)}(h>``struct fwnode_handle *fwnode`` Pointer to the firmware node h](j)}(h ``struct fwnode_handle *fwnode``h]j)}(hjb}h]hstruct fwnode_handle *fwnode}(hjd}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`}ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMBhj\}ubj)}(hhh]jX)}(hPointer to the firmware nodeh]hPointer to the firmware node}(hj{}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw}hMBhjx}ubah}(h]h ]h"]h$]h&]uh1jhj\}ubeh}(h]h ]h"]h$]h&]uh1jhjw}hMBhjY}ubj)}(h5``char *addr`` Address of buffer to store the MAC in h](j)}(h``char *addr``h]j)}(hj}h]h char *addr}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMChj}ubj)}(hhh]jX)}(h%Address of buffer to store the MAC inh]h%Address of buffer to store the MAC in}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMChj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMChjY}ubeh}(h]h ]h"]h$]h&]uh1jhj=}ubjX)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMEhj=}ubjX)}(hXgSearch the firmware node for the best MAC address to use. 'mac-address' is checked first, because that is supposed to contain to "most recent" MAC address. If that isn't set, then 'local-mac-address' is checked next, because that is the default address. If that isn't set, then the obsolete 'address' is checked, just in case we're using an old device tree.h]hX}Search the firmware node for the best MAC address to use. ‘mac-address’ is checked first, because that is supposed to contain to “most recent” MAC address. If that isn’t set, then ‘local-mac-address’ is checked next, because that is the default address. If that isn’t set, then the obsolete ‘address’ is checked, just in case we’re using an old device tree.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMDhj=}ubjX)}(hNote that the 'address' property is supposed to contain a virtual address of the register set, but some DTS files have redefined that property to be the MAC address.h]hNote that the ‘address’ property is supposed to contain a virtual address of the register set, but some DTS files have redefined that property to be the MAC address.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMJhj=}ubjX)}(hXAll-zero MAC addresses are rejected, because those could be properties that exist in the firmware tables, but were not updated by the firmware. For example, the DTS could define 'mac-address' and 'local-mac-address', with zero MAC addresses. Some older U-Boots only initialized 'local-mac-address'. In this case, the real MAC is in 'local-mac-address', and 'mac-address' exists but is all zeros.h]hXAll-zero MAC addresses are rejected, because those could be properties that exist in the firmware tables, but were not updated by the firmware. For example, the DTS could define ‘mac-address’ and ‘local-mac-address’, with zero MAC addresses. Some older U-Boots only initialized ‘local-mac-address’. In this case, the real MAC is in ‘local-mac-address’, and ‘mac-address’ exists but is all zeros.}(hj ~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMNhj=}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#device_get_mac_address (C function)c.device_get_mac_addresshNtauh1hhjhhhNhNubh)}(hhh](h)}(h;int device_get_mac_address (struct device *dev, char *addr)h]h)}(h:int device_get_mac_address(struct device *dev, char *addr)h](j)}(hinth]hint}(hj9~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5~hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMbubj)}(h h]h }(hjH~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5~hhhjG~hMbubj)}(hdevice_get_mac_addressh]j%)}(hdevice_get_mac_addressh]hdevice_get_mac_address}(hjZ~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjV~ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5~hhhjG~hMbubj)}(h (struct device *dev, char *addr)h](j)}(hstruct device *devh](h)}(hjh]hstruct}(hjv~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjr~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr~ubh)}(hhh]j%)}(hdeviceh]hdevice}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j')}jj\~sbc.device_get_mac_addressasbuh1hhjr~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjr~ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjr~ubj%)}(hdevh]hdev}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjr~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjn~ubj)}(h char *addrh](j)}(hcharh]hchar}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjn~ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj5~hhhjG~hMbubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1~hhhjG~hMbubah}(h]j,~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjG~hMbhj.~hhubjS)}(hhh]jX)}(hGet the MAC for a given deviceh]hGet the MAC for a given device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMbhj8hhubah}(h]h ]h"]h$]h&]uh1jRhj.~hhhjG~hMbubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjSjxjSjyjzj{uh1hhhhjhNhNubj})}(hv**Parameters** ``struct device *dev`` Pointer to the device ``char *addr`` Address of buffer to store the MAC inh](jX)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMfhjWubj)}(hhh](j)}(h-``struct device *dev`` Pointer to the device h](j)}(h``struct device *dev``h]j)}(hj|h]hstruct device *dev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMchjvubj)}(hhh]jX)}(hPointer to the deviceh]hPointer to the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMchjsubj)}(h4``char *addr`` Address of buffer to store the MAC inh](j)}(h``char *addr``h]j)}(hjh]h char *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMehjubj)}(hhh]jX)}(h%Address of buffer to store the MAC inh]h%Address of buffer to store the MAC in}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjsubeh}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&device_get_ethdev_address (C function)c.device_get_ethdev_addresshNtauh1hhjhhhNhNubh)}(hhh](h)}(hMint device_get_ethdev_address (struct device *dev, struct net_device *netdev)h]h)}(hLint device_get_ethdev_address(struct device *dev, struct net_device *netdev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMpubj)}(hdevice_get_ethdev_addressh]j%)}(hdevice_get_ethdev_addressh]hdevice_get_ethdev_address}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMpubj)}(h/(struct device *dev, struct net_device *netdev)h](j)}(hstruct device *devh](h)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubh)}(hhh]j%)}(hdeviceh]hdevice}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]j')}jj2sbc.device_get_ethdev_addressasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hstruct net_device *netdevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjˀhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj܀hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjـubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjހmodnameN classnameNjj!)}j$]jc.device_get_ethdev_addressasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnetdevh]hnetdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMpubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMpubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMphjhhubjS)}(hhh]jX)}(h,Set netdev's MAC address from a given deviceh]h.Set netdev’s MAC address from a given device}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMphj<hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMpubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct device *dev`` Pointer to the device ``struct net_device *netdev`` Pointer to netdev to write the address to **Description** Wrapper around device_get_mac_address() which writes the address directly to netdev->dev_addr.h](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMthj[ubj)}(hhh](j)}(h-``struct device *dev`` Pointer to the device h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMqhjzubj)}(hhh]jX)}(hPointer to the deviceh]hPointer to the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjwubj)}(hH``struct net_device *netdev`` Pointer to netdev to write the address to h](j)}(h``struct net_device *netdev``h]j)}(hjh]hstruct net_device *netdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMrhjubj)}(hhh]jX)}(h)Pointer to netdev to write the address toh]h)Pointer to netdev to write the address to}(hjҁhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj΁hMrhjρubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj΁hMrhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMthj[ubjX)}(h^Wrapper around device_get_mac_address() which writes the address directly to netdev->dev_addr.h]h^Wrapper around device_get_mac_address() which writes the address directly to netdev->dev_addr.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhR/var/lib/git/docbuild/linux/Documentation/networking/kapi:95: ./net/ethernet/eth.chMshj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_carrier_on (C function)c.netif_carrier_onhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_carrier_on (struct net_device *dev)h]h)}(h-void netif_carrier_on(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMDubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhjGhMDubj)}(hnetif_carrier_onh]j%)}(hnetif_carrier_onh]hnetif_carrier_on}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhjGhMDubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj\sbc.netif_carrier_onasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hj‚hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hdevh]hdev}(hjςhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubah}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhjGhMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1hhhjGhMDubah}(h]j,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGhMDhj.hhubjS)}(hhh]jX)}(h set carrierh]h set carrier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMDhjhhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhjGhMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hy**Parameters** ``struct net_device *dev`` network device **Description** Device has detected acquisition of carrier.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMHhjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj:h]hstruct net_device *dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMEhj4ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMEhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMEhj1ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMGhjubjX)}(h+Device has detected acquisition of carrier.h]h+Device has detected acquisition of carrier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_carrier_off (C function)c.netif_carrier_offhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void netif_carrier_off (struct net_device *dev)h]h)}(h.void netif_carrier_off(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMWubj)}(h h]h }(hjɃhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjȃhMWubj)}(hnetif_carrier_offh]j%)}(hnetif_carrier_offh]hnetif_carrier_off}(hjۃhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj׃ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjȃhMWubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj݃sbc.netif_carrier_offasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjȃhMWubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjȃhMWubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjȃhMWhjhhubjS)}(hhh]jX)}(h clear carrierh]h clear carrier}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMWhjwhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjȃhMWubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hr**Parameters** ``struct net_device *dev`` network device **Description** Device has detected loss of carrier.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chM[hjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMXhjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjԄhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjЄhMXhjфubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjЄhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMZhjubjX)}(h$Device has detected loss of carrier.h]h$Device has detected loss of carrier.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_carrier_event (C function)c.netif_carrier_eventhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void netif_carrier_event (struct net_device *dev)h]h)}(h0void netif_carrier_event(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMhubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7hhhjIhMhubj)}(hnetif_carrier_eventh]j%)}(hnetif_carrier_eventh]hnetif_carrier_event}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj7hhhjIhMhubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj^sbc.netif_carrier_eventasbuh1hhjtubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hjąhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(hdevh]hdev}(hjхhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpubah}(h]h ]h"]h$]h&]j<j=uh1jhj7hhhjIhMhubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3hhhjIhMhubah}(h]j.ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjIhMhhj0hhubjS)}(hhh]jX)}(hreport carrier state eventh]hreport carrier state event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMhhjhhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhjIhMhubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device **Description** Device has detected a carrier event but the carrier state wasn't changed. Use in drivers when querying carrier state asynchronously, to avoid missing events (link flaps) if link recovers before it's queried.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMlhjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj<h]hstruct net_device *dev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMihj6ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMihjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMihj3ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMkhjubjX)}(hDevice has detected a carrier event but the carrier state wasn't changed. Use in drivers when querying carrier state asynchronously, to avoid missing events (link flaps) if link recovers before it's queried.h]hDevice has detected a carrier event but the carrier state wasn’t changed. Use in drivers when querying carrier state asynchronously, to avoid missing events (link flaps) if link recovers before it’s queried.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhW/var/lib/git/docbuild/linux/Documentation/networking/kapi:98: ./net/sched/sch_generic.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%is_link_local_ether_addr (C function)c.is_link_local_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool is_link_local_ether_addr (const u8 *addr)h]h)}(h-bool is_link_local_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKQubj)}(h h]h }(hjʆhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjɆhKQubj)}(his_link_local_ether_addrh]j%)}(his_link_local_ether_addrh]his_link_local_ether_addr}(hj܆hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj؆ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjɆhKQubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjކsbc.is_link_local_ether_addrasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjɆhKQubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjɆhKQubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjɆhKQhjhhubjS)}(hhh]jX)}(h1Determine if given Ethernet address is link-localh]h1Determine if given Ethernet address is link-local}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKQhjxhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjɆhKQubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if address is link local reserved addr (01:80:c2:00:00:0X) per IEEE 802.1Q 8.6.3 Frame filtering. **Description** Please note: addr must be aligned to u16.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKUhjubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKRhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjՇhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjчhKRhj҇ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjчhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKThjubjX)}(hftrue if address is link local reserved addr (01:80:c2:00:00:0X) per IEEE 802.1Q 8.6.3 Frame filtering.h]hftrue if address is link local reserved addr (01:80:c2:00:00:0X) per IEEE 802.1Q 8.6.3 Frame filtering.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKThjubjX)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKWhjubjX)}(h)Please note: addr must be aligned to u16.h]h)Please note: addr must be aligned to u16.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_zero_ether_addr (C function)c.is_zero_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(bool is_zero_ether_addr (const u8 *addr)h]h)}(h'bool is_zero_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_hhhjphKhubj)}(his_zero_ether_addrh]j%)}(his_zero_ether_addrh]his_zero_ether_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj_hhhjphKhubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.is_zero_ether_addrasbuh1hhjubj)}(h h]h }(hj݈hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj_hhhjphKhubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj[hhhjphKhubah}(h]jVah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjphKhhjXhhubjS)}(hhh]jX)}(h0Determine if give Ethernet address is all zeros.h]h0Determine if give Ethernet address is all zeros.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhhjhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhjphKhubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj:jxj:jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if the address is all zeroes. **Description** Please note: addr must be aligned to u16.h](jX)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKlhj>ubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hjch]hconst u8 *addr}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKihj]ubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhKihjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKihjZubah}(h]h ]h"]h$]h&]uh1jhj>ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKkhj>ubjX)}(h"true if the address is all zeroes.h]h"true if the address is all zeroes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKkhj>ubjX)}(h**Description**h]j)}(hjʼnh]h Description}(hjljhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÉubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKmhj>ubjX)}(h)Please note: addr must be aligned to u16.h]h)Please note: addr must be aligned to u16.}(hjۉhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKlhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$is_multicast_ether_addr (C function)c.is_multicast_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool is_multicast_ether_addr (const u8 *addr)h]h)}(h,bool is_multicast_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhK{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhK{ubj)}(his_multicast_ether_addrh]j%)}(his_multicast_ether_addrh]his_multicast_ether_addr}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhK{ubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jj,sbc.is_multicast_ether_addrasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhK{ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhK{ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhK{hjhhubjS)}(hhh]jX)}(h1Determine if the Ethernet address is a multicast.h]h1Determine if the Ethernet address is a multicast.}(hjɊhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhK{hjƊhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhK{ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if the address is a multicast address. By definition the broadcast address is also a multicast address.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hj h]hconst u8 *addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhK|hjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhK|hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhK~hjubjX)}(hltrue if the address is a multicast address. By definition the broadcast address is also a multicast address.h]hltrue if the address is a multicast address. By definition the broadcast address is also a multicast address.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhK~hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h is_local_ether_addr (C function)c.is_local_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)bool is_local_ether_addr (const u8 *addr)h]h)}(h(bool is_local_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(his_local_ether_addrh]j%)}(his_local_ether_addrh]his_local_ether_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjƋhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj‹ubj)}(h h]h }(hjӋhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj‹ubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.is_local_ether_addrasbuh1hhj‹ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj‹ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj‹ubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj‹ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]j}ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hEDetermine if the Ethernet address is locally-assigned one (IEEE 802).h]hEDetermine if the Ethernet address is locally-assigned one (IEEE 802).}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjFhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjajxjajyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if the address is a local address.h](jX)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjeubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h **Return**h]j)}(hjŌh]hReturn}(hjnjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÌubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjeubjX)}(h'true if the address is a local address.h]h'true if the address is a local address.}(hjیhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$is_broadcast_ether_addr (C function)c.is_broadcast_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-bool is_broadcast_ether_addr (const u8 *addr)h]h)}(h,bool is_broadcast_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(his_broadcast_ether_addrh]j%)}(his_broadcast_ether_addrh]his_broadcast_ether_addr}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jj,sbc.is_broadcast_ether_addrasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h.Determine if the Ethernet address is broadcasth]h.Determine if the Ethernet address is broadcast}(hjɍhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjƍhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if the address is the broadcast address. **Description** Please note: addr must be aligned to u16.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hj h]hconst u8 *addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjEh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h-true if the address is the broadcast address.h]h-true if the address is the broadcast address.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h**Description**h]j)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h)Please note: addr must be aligned to u16.h]h)Please note: addr must be aligned to u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"is_unicast_ether_addr (C function)c.is_unicast_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+bool is_unicast_ether_addr (const u8 *addr)h]h)}(h*bool is_unicast_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(his_unicast_ether_addrh]j%)}(his_unicast_ether_addrh]his_unicast_ether_addr}(hjюhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj͎ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjӎsbc.is_unicast_ether_addrasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h,Determine if the Ethernet address is unicasth]h,Determine if the Ethernet address is unicast}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjmhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** true if the address is a unicast address.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjʏhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƏhKhjǏubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƏhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h)true if the address is a unicast address.h]h)true if the address is a unicast address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h is_valid_ether_addr (C function)c.is_valid_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)bool is_valid_ether_addr (const u8 *addr)h]h)}(h(bool is_valid_ether_addr(const u8 *addr)h](j)}(hjTh]hbool}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj>hKubj)}(his_valid_ether_addrh]j%)}(his_valid_ether_addrh]his_valid_ether_addr}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-hhhj>hKubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjSsbc.is_valid_ether_addrasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(haddrh]haddr}(hjƐhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubah}(h]h ]h"]h$]h&]j<j=uh1jhj-hhhj>hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj)hhhj>hKubah}(h]j$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>hKhj&hhubjS)}(hhh]jX)}(h0Determine if the given Ethernet address is validh]h0Determine if the given Ethernet address is valid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jRhj&hhhj>hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXC**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Description** Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not a multicast address, and is not FF:FF:FF:FF:FF:FF. Please note: addr must be aligned to u16. **Return** true if the address is valid.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hj1h]hconst u8 *addr}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj+ubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjlh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubjX)}(hyCheck that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not a multicast address, and is not FF:FF:FF:FF:FF:FF.h]hyCheck that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not a multicast address, and is not FF:FF:FF:FF:FF:FF.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubjX)}(h)Please note: addr must be aligned to u16.h]h)Please note: addr must be aligned to u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubjX)}(htrue if the address is valid.h]htrue if the address is valid.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_proto_is_802_3 (C function)c.eth_proto_is_802_3hNtauh1hhjhhhNhNubh)}(hhh](h)}(h&bool eth_proto_is_802_3 (__be16 proto)h]h)}(h%bool eth_proto_is_802_3(__be16 proto)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(heth_proto_is_802_3h]j%)}(heth_proto_is_802_3h]heth_proto_is_802_3}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(__be16 proto)h]j)}(h __be16 protoh](h)}(hhh]j%)}(h__be16h]h__be16}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j')}jj sbc.eth_proto_is_802_3asbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hprotoh]hproto}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjߑhhhjhKubah}(h]jڑah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjܑhhubjS)}(hhh]jX)}(h3Determine if a given Ethertype/length is a protocolh]h3Determine if a given Ethertype/length is a protocol}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj{hhubah}(h]h ]h"]h$]h&]uh1jRhjܑhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``__be16 proto`` Ethertype/length value to be tested **Description** Check that the value from the Ethertype/length field is a valid Ethertype. **Return** true if the valid is an 802.3 supported Ethertype.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]j)}(h5``__be16 proto`` Ethertype/length value to be tested h](j)}(h``__be16 proto``h]j)}(hjh]h __be16 proto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]jX)}(h#Ethertype/length value to be testedh]h#Ethertype/length value to be tested}(hjؒhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjԒhKhjՒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԒhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(hJCheck that the value from the Ethertype/length field is a valid Ethertype.h]hJCheck that the value from the Ethertype/length field is a valid Ethertype.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h **Return**h]j)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h2true if the valid is an 802.3 supported Ethertype.h]h2true if the valid is an 802.3 supported Ethertype.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_random_addr (C function)c.eth_random_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid eth_random_addr (u8 *addr)h]h)}(hvoid eth_random_addr(u8 *addr)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjthKubj)}(heth_random_addrh]j%)}(heth_random_addrh]heth_random_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjbhhhjthKubj)}(h (u8 *addr)h]j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.eth_random_addrasbuh1hhjubj)}(h h]h }(hjƓhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjԓhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjbhhhjthKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhjthKubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthKhj[hhubjS)}(hhh]jX)}(h2Generate software assigned random Ethernet addressh]h2Generate software assigned random Ethernet address}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhjthKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#jxj#jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Description** Generate a random Ethernet address (MAC) that is not multicast and has the local assigned bit set.h](jX)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj'ubj)}(hhh]j)}(hI``u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h ``u8 *addr``h]j)}(hjLh]hu8 *addr}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjFubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj'ubjX)}(hbGenerate a random Ethernet address (MAC) that is not multicast and has the local assigned bit set.h]hbGenerate a random Ethernet address (MAC) that is not multicast and has the local assigned bit set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_broadcast_addr (C function)c.eth_broadcast_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h"void eth_broadcast_addr (u8 *addr)h]h)}(h!void eth_broadcast_addr(u8 *addr)h](j)}(hvoidh]hvoid}(hj̔hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȔhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hj۔hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjȔhhhjڔhKubj)}(heth_broadcast_addrh]j%)}(heth_broadcast_addrh]heth_broadcast_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjȔhhhjڔhKubj)}(h (u8 *addr)h]j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.eth_broadcast_addrasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjȔhhhjڔhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjĔhhhjڔhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjڔhKhjhhubjS)}(hhh]jX)}(hAssign broadcast addressh]hAssign broadcast address}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjnhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjڔhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Description** Assign the broadcast address to the given address array.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]j)}(hI``u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h ``u8 *addr``h]j)}(hjh]hu8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hj˕hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjǕhKhjȕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǕhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubjX)}(h8Assign the broadcast address to the given address array.h]h8Assign the broadcast address to the given address array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_zero_addr (C function)c.eth_zero_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid eth_zero_addr (u8 *addr)h]h)}(hvoid eth_zero_addr(u8 *addr)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.hhhj@hKubj)}(h eth_zero_addrh]j%)}(h eth_zero_addrh]h eth_zero_addr}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj.hhhj@hKubj)}(h (u8 *addr)h]j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j')}jjUsbc.eth_zero_addrasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjgubah}(h]h ]h"]h$]h&]j<j=uh1jhj.hhhj@hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*hhhj@hKubah}(h]j%ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@hKhj'hhubjS)}(hhh]jX)}(hAssign zero addressh]hAssign zero address}(hjזhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhKhjԖhhubah}(h]h ]h"]h$]h&]uh1jRhj'hhhj@hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Description** Assign the zero address to the given address array.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]j)}(hI``u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h ``u8 *addr``h]j)}(hjh]hu8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubjX)}(h3Assign the zero address to the given address array.h]h3Assign the zero address to the given address array.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_hw_addr_random (C function)c.eth_hw_addr_randomhNtauh1hhjhhhNhNubh)}(hhh](h)}(h0void eth_hw_addr_random (struct net_device *dev)h]h)}(h/void eth_hw_addr_random(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(heth_hw_addr_randomh]j%)}(heth_hw_addr_randomh]heth_hw_addr_random}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj՗hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjїubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjїubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.eth_hw_addr_randomasbuh1hhjїubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjїubj;)}(hj>h]h*}(hj!hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjїubj%)}(hdevh]hdev}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjїubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj͗ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h>Generate software assigned random Ethernet and set device flagh]h>Generate software assigned random Ethernet and set device flag}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM hjUhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjpjxjpjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` pointer to net_device structure **Description** Generate a random Ethernet address (MAC) to be used by a net device and set addr_assign_type so the state can be read by sysfs and be used by userspace.h](jX)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjtubj)}(hhh]j)}(h;``struct net_device *dev`` pointer to net_device structure h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM hjubj)}(hhh]jX)}(hpointer to net_device structureh]hpointer to net_device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubjX)}(h**Description**h]j)}(hjԘh]h Description}(hj֘hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҘubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjtubjX)}(hGenerate a random Ethernet address (MAC) to be used by a net device and set addr_assign_type so the state can be read by sysfs and be used by userspace.h]hGenerate a random Ethernet address (MAC) to be used by a net device and set addr_assign_type so the state can be read by sysfs and be used by userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_hw_addr_crc (C function)c.eth_hw_addr_crchNtauh1hhjhhhNhNubh)}(hhh](h)}(h/u32 eth_hw_addr_crc (struct netdev_hw_addr *ha)h]h)}(h.u32 eth_hw_addr_crc(struct netdev_hw_addr *ha)h](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jeth_hw_addr_crcsbc.eth_hw_addr_crcasbuh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj=hMubj)}(heth_hw_addr_crch]j%)}(hj:h]heth_hw_addr_crc}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj=hMubj)}(h(struct netdev_hw_addr *ha)h]j)}(hstruct netdev_hw_addr *hah](h)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubh)}(hhh]j%)}(hnetdev_hw_addrh]hnetdev_hw_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j8c.eth_hw_addr_crcasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(hhah]hha}(hj™hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj=hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj=hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hMhjhhubjS)}(hhh]jX)}(h!Calculate CRC from netdev_hw_addrh]h!Calculate CRC from netdev_hw_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj=hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct netdev_hw_addr *ha`` pointer to hardware address **Description** Calculate CRC from a hardware address as basis for filter hashes.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM hjubj)}(hhh]j)}(h:``struct netdev_hw_addr *ha`` pointer to hardware address h](j)}(h``struct netdev_hw_addr *ha``h]j)}(hj-h]hstruct netdev_hw_addr *ha}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhj'ubj)}(hhh]jX)}(hpointer to hardware addressh]hpointer to hardware address}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubjX)}(hACalculate CRC from a hardware address as basis for filter hashes.h]hACalculate CRC from a hardware address as basis for filter hashes.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hether_addr_copy (C function)c.ether_addr_copyhNtauh1hhjhhhNhNubh)}(hhh](h)}(h-void ether_addr_copy (u8 *dst, const u8 *src)h]h)}(h,void ether_addr_copy(u8 *dst, const u8 *src)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM'ubj)}(hether_addr_copyh]j%)}(hether_addr_copyh]hether_addr_copy}(hjΚhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjʚubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM'ubj)}(h(u8 *dst, const u8 *src)h](j)}(hu8 *dsth](h)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjКsbc.ether_addr_copyasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdsth]hdst}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const u8 *srch](h)}(hjh]hconst}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(hu8h]hu8}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j c.ether_addr_copyasbuh1hhj=ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM'ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM'hjhhubjS)}(hhh]jX)}(hCopy an Ethernet addressh]hCopy an Ethernet address}(hj›hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM'hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjڛjxjڛjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u8 *dst`` Pointer to a six-byte array Ethernet address destination ``const u8 *src`` Pointer to a six-byte array Ethernet address source **Description** Please note: dst & src must both be aligned to u16.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM+hjޛubj)}(hhh](j)}(hE``u8 *dst`` Pointer to a six-byte array Ethernet address destination h](j)}(h ``u8 *dst``h]j)}(hjh]hu8 *dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM(hjubj)}(hhh]jX)}(h8Pointer to a six-byte array Ethernet address destinationh]h8Pointer to a six-byte array Ethernet address destination}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(hF``const u8 *src`` Pointer to a six-byte array Ethernet address source h](j)}(h``const u8 *src``h]j)}(hj<h]h const u8 *src}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM)hj6ubj)}(hhh]jX)}(h3Pointer to a six-byte array Ethernet address sourceh]h3Pointer to a six-byte array Ethernet address source}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhM)hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM)hjubeh}(h]h ]h"]h$]h&]uh1jhjޛubjX)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM+hjޛubjX)}(h3Please note: dst & src must both be aligned to u16.h]h3Please note: dst & src must both be aligned to u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM*hjޛubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_hw_addr_set (C function)c.eth_hw_addr_sethNtauh1hhjhhhNhNubh)}(hhh](h)}(h=void eth_hw_addr_set (struct net_device *dev, const u8 *addr)h]h)}(hh]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst u8 *addrh](h)}(hjh]hconst}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j3c.eth_hw_addr_setasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjʜhM=ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjʜhM=ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjʜhM=hjhhubjS)}(hhh]jX)}(h'Assign Ethernet address to a net_deviceh]h'Assign Ethernet address to a net_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM=hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjʜhM=ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` pointer to net_device structure ``const u8 *addr`` address to assign **Description** Assign given address to the net_device, addr_assign_type is not changed.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMAhjubj)}(hhh](j)}(h;``struct net_device *dev`` pointer to net_device structure h](j)}(h``struct net_device *dev``h]j)}(hj-h]hstruct net_device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM>hj'ubj)}(hhh]jX)}(hpointer to net_device structureh]hpointer to net_device structure}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM>hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM>hj$ubj)}(h%``const u8 *addr`` address to assign h](j)}(h``const u8 *addr``h]j)}(hjfh]hconst u8 *addr}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM?hj`ubj)}(hhh]jX)}(haddress to assignh]haddress to assign}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM?hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM?hj$ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMAhjubjX)}(hHAssign given address to the net_device, addr_assign_type is not changed.h]hHAssign given address to the net_device, addr_assign_type is not changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM@hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h eth_hw_addr_inherit (C function)c.eth_hw_addr_inherithNtauh1hhjhhhNhNubh)}(hhh](h)}(hIvoid eth_hw_addr_inherit (struct net_device *dst, struct net_device *src)h]h)}(hHvoid eth_hw_addr_inherit(struct net_device *dst, struct net_device *src)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMIubj)}(heth_hw_addr_inherith]j%)}(heth_hw_addr_inherith]heth_hw_addr_inherit}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMIubj)}(h0(struct net_device *dst, struct net_device *src)h](j)}(hstruct net_device *dsth](h)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}jj sbc.eth_hw_addr_inheritasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdsth]hdst}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct net_device *srch](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j]c.eth_hw_addr_inheritasbuh1hhjubj)}(h h]h }(hjџhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjߟhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMIubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjޞhhhjhMIubah}(h]jٞah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMIhj۞hhubjS)}(hhh]jX)}(h%Copy dev_addr from another net_deviceh]h%Copy dev_addr from another net_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMIhjhhubah}(h]h ]h"]h$]h&]uh1jRhj۞hhhjhMIubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhjhNhNubj})}(hX!**Parameters** ``struct net_device *dst`` pointer to net_device to copy dev_addr to ``struct net_device *src`` pointer to net_device to copy dev_addr from **Description** Copy the Ethernet address from one net_device to another along with the address attributes (addr_assign_type).h](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMMhj2ubj)}(hhh](j)}(hE``struct net_device *dst`` pointer to net_device to copy dev_addr to h](j)}(h``struct net_device *dst``h]j)}(hjWh]hstruct net_device *dst}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMJhjQubj)}(hhh]jX)}(h)pointer to net_device to copy dev_addr toh]h)pointer to net_device to copy dev_addr to}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMJhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMJhjNubj)}(hG``struct net_device *src`` pointer to net_device to copy dev_addr from h](j)}(h``struct net_device *src``h]j)}(hjh]hstruct net_device *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMKhjubj)}(hhh]jX)}(h+pointer to net_device to copy dev_addr fromh]h+pointer to net_device to copy dev_addr from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubjX)}(h**Description**h]j)}(hjˠh]h Description}(hj͠hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɠubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMMhj2ubjX)}(hnCopy the Ethernet address from one net_device to another along with the address attributes (addr_assign_type).h]hnCopy the Ethernet address from one net_device to another along with the address attributes (addr_assign_type).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMLhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hether_addr_equal (C function)c.ether_addr_equalhNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool ether_addr_equal (const u8 *addr1, const u8 *addr2)h]h)}(h7bool ether_addr_equal(const u8 *addr1, const u8 *addr2)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMXubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMXubj)}(hether_addr_equalh]j%)}(hether_addr_equalh]hether_addr_equal}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMXubj)}(h"(const u8 *addr1, const u8 *addr2)h](j)}(hconst u8 *addr1h](h)}(hjh]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubh)}(hhh]j%)}(hu8h]hu8}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]j')}jj2sbc.ether_addr_equalasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHubj%)}(haddr1h]haddr1}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hconst u8 *addr2h](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjˡhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjܡhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj١ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjޡmodnameN classnameNjj!)}j$]jc.ether_addr_equalasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddr2h]haddr2}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMXubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMXubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMXhjhhubjS)}(hhh]jX)}(hCompare two Ethernet addressesh]hCompare two Ethernet addresses}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMXhj<hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMXubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjhNhNubj})}(hX6**Parameters** ``const u8 *addr1`` Pointer to a six-byte array containing the Ethernet address ``const u8 *addr2`` Pointer other six-byte array containing the Ethernet address **Description** Compare two Ethernet addresses, returns true if equal Please note: addr1 & addr2 must both be aligned to u16.h](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM\hj[ubj)}(hhh](j)}(hP``const u8 *addr1`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr1``h]j)}(hjh]hconst u8 *addr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMYhjzubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjwubj)}(hQ``const u8 *addr2`` Pointer other six-byte array containing the Ethernet address h](j)}(h``const u8 *addr2``h]j)}(hjh]hconst u8 *addr2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMZhjubj)}(hhh]jX)}(hbool ether_addr_equal_64bits(const u8 *addr1, const u8 *addr2)h](j)}(hjTh]hbool}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMpubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhjUhMpubj)}(hether_addr_equal_64bitsh]j%)}(hether_addr_equal_64bitsh]hether_addr_equal_64bits}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDhhhjUhMpubj)}(h"(const u8 *addr1, const u8 *addr2)h](j)}(hconst u8 *addr1h](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjjsbc.ether_addr_equal_64bitsasbuh1hhjubj)}(h h]h }(hj£hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjУhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddr1h]haddr1}(hjݣhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(hconst u8 *addr2h](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.ether_addr_equal_64bitsasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddr2h]haddr2}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjDhhhjUhMpubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhjUhMpubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjUhMphj=hhubjS)}(hhh]jX)}(hCompare two Ethernet addressesh]hCompare two Ethernet addresses}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMphjthhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhjUhMpubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const u8 *addr1`` Pointer to an array of 8 bytes ``const u8 *addr2`` Pointer to an other array of 8 bytes **Description** Compare two Ethernet addresses, returns true if equal, false otherwise. The function doesn't need any conditional branches and possibly uses word memory accesses on CPU allowing cheap unaligned memory reads. arrays = { byte1, byte2, byte3, byte4, byte5, byte6, pad1, pad2 } Please note that alignment of addr1 & addr2 are only guaranteed to be 16 bits.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMthjubj)}(hhh](j)}(h3``const u8 *addr1`` Pointer to an array of 8 bytes h](j)}(h``const u8 *addr1``h]j)}(hjh]hconst u8 *addr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMqhjubj)}(hhh]jX)}(hPointer to an array of 8 bytesh]hPointer to an array of 8 bytes}(hjѤhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjͤhMqhjΤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjͤhMqhjubj)}(h9``const u8 *addr2`` Pointer to an other array of 8 bytes h](j)}(h``const u8 *addr2``h]j)}(hjh]hconst u8 *addr2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMrhjubj)}(hhh]jX)}(h$Pointer to an other array of 8 bytesh]h$Pointer to an other array of 8 bytes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMthjubjX)}(hGCompare two Ethernet addresses, returns true if equal, false otherwise.h]hGCompare two Ethernet addresses, returns true if equal, false otherwise.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMshjubjX)}(hThe function doesn't need any conditional branches and possibly uses word memory accesses on CPU allowing cheap unaligned memory reads. arrays = { byte1, byte2, byte3, byte4, byte5, byte6, pad1, pad2 }h]hThe function doesn’t need any conditional branches and possibly uses word memory accesses on CPU allowing cheap unaligned memory reads. arrays = { byte1, byte2, byte3, byte4, byte5, byte6, pad1, pad2 }}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMuhjubjX)}(hNPlease note that alignment of addr1 & addr2 are only guaranteed to be 16 bits.h]hNPlease note that alignment of addr1 & addr2 are only guaranteed to be 16 bits.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMyhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'ether_addr_equal_unaligned (C function)c.ether_addr_equal_unalignedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hBbool ether_addr_equal_unaligned (const u8 *addr1, const u8 *addr2)h]h)}(hAbool ether_addr_equal_unaligned(const u8 *addr1, const u8 *addr2)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hether_addr_equal_unalignedh]j%)}(hether_addr_equal_unalignedh]hether_addr_equal_unaligned}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h"(const u8 *addr1, const u8 *addr2)h](j)}(hconst u8 *addr1h](h)}(hjh]hconst}(hj˥hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjǥubj)}(h h]h }(hjإhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǥubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.ether_addr_equal_unalignedasbuh1hhjǥubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǥubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjǥubj%)}(haddr1h]haddr1}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjǥubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjåubj)}(hconst u8 *addr2h](h)}(hjh]hconst}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj9ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubh)}(hhh]j%)}(hu8h]hu8}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]modnameN classnameNjj!)}j$]jc.ether_addr_equal_unalignedasbuh1hhj9ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9ubj%)}(haddr2h]haddr2}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjåubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h.Compare two not u16 aligned Ethernet addressesh]h.Compare two not u16 aligned Ethernet addresses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj֦jxj֦jyjzj{uh1hhhhjhNhNubj})}(hXF**Parameters** ``const u8 *addr1`` Pointer to a six-byte array containing the Ethernet address ``const u8 *addr2`` Pointer other six-byte array containing the Ethernet address **Description** Compare two Ethernet addresses, returns true if equal Please note: Use only when any Ethernet address may not be u16 aligned.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjަubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjڦubj)}(hhh](j)}(hP``const u8 *addr1`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr1``h]j)}(hjh]hconst u8 *addr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hQ``const u8 *addr2`` Pointer other six-byte array containing the Ethernet address h](j)}(h``const u8 *addr2``h]j)}(hj8h]hconst u8 *addr2}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhj2ubj)}(hhh]jX)}(hh]h*}(hjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddr1h]haddr1}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst u8 *addr2h](h)}(hjh]hconst}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j=c.ether_addr_equal_maskedasbuh1hhjqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjqubj%)}(haddr2h]haddr2}(hj̨hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst u8 *maskh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j=c.ether_addr_equal_maskedasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hmaskh]hmask}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjçhhhjԧhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjԧhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjԧhMhjhhubjS)}(hhh]jX)}(h*Compare two Ethernet addresses with a maskh]h*Compare two Ethernet addresses with a mask}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjchhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjԧhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj~jxj~jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const u8 *addr1`` Pointer to a six-byte array containing the 1st Ethernet address ``const u8 *addr2`` Pointer to a six-byte array containing the 2nd Ethernet address ``const u8 *mask`` Pointer to a six-byte array containing the Ethernet address bitmask **Description** Compare two Ethernet addresses with a mask, returns true if for every bit set in the bitmask the equivalent bits in the ethernet addresses are equal. Using a mask with all bits set is a slower ether_addr_equal.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh](j)}(hT``const u8 *addr1`` Pointer to a six-byte array containing the 1st Ethernet address h](j)}(h``const u8 *addr1``h]j)}(hjh]hconst u8 *addr1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h?Pointer to a six-byte array containing the 1st Ethernet addressh]h?Pointer to a six-byte array containing the 1st Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hT``const u8 *addr2`` Pointer to a six-byte array containing the 2nd Ethernet address h](j)}(h``const u8 *addr2``h]j)}(hjh]hconst u8 *addr2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjީubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjکubj)}(hhh]jX)}(h?Pointer to a six-byte array containing the 2nd Ethernet addressh]h?Pointer to a six-byte array containing the 2nd Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjکubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hW``const u8 *mask`` Pointer to a six-byte array containing the Ethernet address bitmask h](j)}(h``const u8 *mask``h]j)}(hjh]hconst u8 *mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(hCPointer to a six-byte array containing the Ethernet address bitmaskh]hCPointer to a six-byte array containing the Ethernet address bitmask}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubjX)}(hCompare two Ethernet addresses with a mask, returns true if for every bit set in the bitmask the equivalent bits in the ethernet addresses are equal. Using a mask with all bits set is a slower ether_addr_equal.h]hCompare two Ethernet addresses with a mask, returns true if for every bit set in the bitmask the equivalent bits in the ethernet addresses are equal. Using a mask with all bits set is a slower ether_addr_equal.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hether_addr_to_u64 (C function)c.ether_addr_to_u64hNtauh1hhjhhhNhNubh)}(hhh](h)}(h&u64 ether_addr_to_u64 (const u8 *addr)h]h)}(h%u64 ether_addr_to_u64(const u8 *addr)h](h)}(hhh]j%)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jether_addr_to_u64sbc.ether_addr_to_u64asbuh1hhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hether_addr_to_u64h]j%)}(hjh]hether_addr_to_u64}(hjЪhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj̪ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(const u8 *addr)h]j)}(hconst u8 *addrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jc.ether_addr_to_u64asbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h-Convert an Ethernet address into a u64 value.h]h-Convert an Ethernet address into a u64 value.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjihhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address **Return** a u64 value of the addressh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]j)}(hO``const u8 *addr`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 *addr``h]j)}(hjh]hconst u8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjƫhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj«hMhjëubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj«hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubjX)}(ha u64 value of the addressh]ha u64 value of the address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hu64_to_ether_addr (C function)c.u64_to_ether_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(h(void u64_to_ether_addr (u64 u, u8 *addr)h]h)}(h'void u64_to_ether_addr(u64 u, u8 *addr)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hhhj;hMubj)}(hu64_to_ether_addrh]j%)}(hu64_to_ether_addrh]hu64_to_ether_addr}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj)hhhj;hMubj)}(h(u64 u, u8 *addr)h](j)}(hu64 uh](h)}(hhh]j%)}(hu64h]hu64}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjomodnameN classnameNjj!)}j$]j')}jjPsbc.u64_to_ether_addrasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj%)}(huh]hu}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubj)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.u64_to_ether_addrasbuh1hhjubj)}(h h]h }(hjլhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjbubeh}(h]h ]h"]h$]h&]j<j=uh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%hhhj;hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj;hMhj"hhubjS)}(hhh]jX)}(h%Convert a u64 to an Ethernet address.h]h%Convert a u64 to an Ethernet address.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj"hhhj;hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj2jxj2jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u64 u`` u64 to convert to an Ethernet MAC address ``u8 *addr`` Pointer to a six-byte array to contain the Ethernet addressh](jX)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhj6ubj)}(hhh](j)}(h4``u64 u`` u64 to convert to an Ethernet MAC address h](j)}(h ``u64 u``h]j)}(hj[h]hu64 u}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjUubj)}(hhh]jX)}(h)u64 to convert to an Ethernet MAC addressh]h)u64 to convert to an Ethernet MAC address}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubj)}(hH``u8 *addr`` Pointer to a six-byte array to contain the Ethernet addressh](j)}(h ``u8 *addr``h]j)}(hjh]hu8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h;Pointer to a six-byte array to contain the Ethernet addressh]h;Pointer to a six-byte array to contain the Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_addr_dec (C function)c.eth_addr_dechNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid eth_addr_dec (u8 *addr)h]h)}(hvoid eth_addr_dec(u8 *addr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h eth_addr_dech]j%)}(h eth_addr_dech]h eth_addr_dec}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h (u8 *addr)h]j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj0modnameN classnameNjj!)}j$]j')}jjsbc.eth_addr_decasbuh1hhj'ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(haddrh]haddr}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hDecrement the given MAC addressh]hDecrement the given MAC address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hc**Parameters** ``u8 *addr`` Pointer to a six-byte array containing Ethernet address to decrementh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]j)}(hQ``u8 *addr`` Pointer to a six-byte array containing Ethernet address to decrementh](j)}(h ``u8 *addr``h]j)}(hjԮh]hu8 *addr}(hj֮hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjҮubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjήubj)}(hhh]jX)}(hDPointer to a six-byte array containing Ethernet address to decrementh]hDPointer to a six-byte array containing Ethernet address to decrement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjήubeh}(h]h ]h"]h$]h&]uh1jhjhMhjˮubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_addr_inc (C function)c.eth_addr_inchNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid eth_addr_inc (u8 *addr)h]h)}(hvoid eth_addr_inc(u8 *addr)h](j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj<hMubj)}(h eth_addr_inch]j%)}(h eth_addr_inch]h eth_addr_inc}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj<hMubj)}(h (u8 *addr)h]j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]j')}jjQsbc.eth_addr_incasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubah}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj<hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj&hhhj<hMubah}(h]j!ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hMhj#hhubjS)}(hhh]jX)}(h Increment the given MAC address.h]h Increment the given MAC address.}(hjӯhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjЯhhubah}(h]h ]h"]h$]h&]uh1jRhj#hhhj<hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hd**Parameters** ``u8 *addr`` Pointer to a six-byte array containing Ethernet address to increment.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]j)}(hR``u8 *addr`` Pointer to a six-byte array containing Ethernet address to increment.h](j)}(h ``u8 *addr``h]j)}(hjh]hu8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(hEPointer to a six-byte array containing Ethernet address to increment.h]hEPointer to a six-byte array containing Ethernet address to increment.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_addr_add (C function)c.eth_addr_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(h)void eth_addr_add (u8 *addr, long offset)h]h)}(h(void eth_addr_add(u8 *addr, long offset)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj|hMubj)}(h eth_addr_addh]j%)}(h eth_addr_addh]h eth_addr_add}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj|hMubj)}(h(u8 *addr, long offset)h](j)}(hu8 *addrh](h)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.eth_addr_addasbuh1hhjubj)}(h h]h }(hjΰhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjܰhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h long offseth](j)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj|hMubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMhjchhubjS)}(hhh]jX)}(h:Add (or subtract) an offset to/from the given MAC address.h]h:Add (or subtract) an offset to/from the given MAC address.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj|hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`jxj`jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``u8 *addr`` Pointer to a six-byte array containing Ethernet address to increment. ``long offset`` Offset to add.h](jX)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjdubj)}(hhh](j)}(hS``u8 *addr`` Pointer to a six-byte array containing Ethernet address to increment. h](j)}(h ``u8 *addr``h]j)}(hjh]hu8 *addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(hEPointer to a six-byte array containing Ethernet address to increment.h]hEPointer to a six-byte array containing Ethernet address to increment.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``long offset`` Offset to add.h](j)}(h``long offset``h]j)}(hj±h]h long offset}(hjıhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(hOffset to add.h]hOffset to add.}(hj۱hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjرubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjױhMhjubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](his_etherdev_addr (C function)c.is_etherdev_addrhNtauh1hhjhhhNhNubh)}(hhh](h)}(hJbool is_etherdev_addr (const struct net_device *dev, const u8 addr[6 + 2])h]h)}(hIbool is_etherdev_addr(const struct net_device *dev, const u8 addr[6 + 2])h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj)hMubj)}(his_etherdev_addrh]j%)}(his_etherdev_addrh]his_etherdev_addr}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj)hMubj)}(h4(const struct net_device *dev, const u8 addr[6 + 2])h](j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj>sbc.is_etherdev_addrasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hdevh]hdev}(hj̲hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hconst u8 addr[6 + 2]h](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.is_etherdev_addrasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubj;)}(h[h]h[}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubhdesc_sig_literal_number)}(h6h]h6}(hjMhhhNhNubah}(h]h ]mah"]h$]h&]uh1jKhjubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubhdesc_sig_operator)}(h+h]h+}(hjlhhhNhNubah}(h]h ]oah"]h$]h&]uh1jjhjubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubjL)}(h2h]h2}(hjhhhNhNubah}(h]h ]jXah"]h$]h&]uh1jKhjubj;)}(h]h]h]}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj)hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMhjhhubjS)}(hhh]jX)}(h5Tell if given Ethernet address belongs to the device.h]h5Tell if given Ethernet address belongs to the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj)hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjٳjxjٳjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const struct net_device *dev`` Pointer to a device structure ``const u8 addr[6 + 2]`` Pointer to a six-byte array containing the Ethernet address **Description** Compare passed address with all addresses of the device. Return true if the address if one of the device addresses. Note that this function calls ether_addr_equal_64bits() so take care of the right padding.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjݳubj)}(hhh](j)}(h?``const struct net_device *dev`` Pointer to a device structure h](j)}(h ``const struct net_device *dev``h]j)}(hjh]hconst struct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(hPointer to a device structureh]hPointer to a device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hU``const u8 addr[6 + 2]`` Pointer to a six-byte array containing the Ethernet address h](j)}(h``const u8 addr[6 + 2]``h]j)}(hj;h]hconst u8 addr[6 + 2]}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhj5ubj)}(hhh]jX)}(h;Pointer to a six-byte array containing the Ethernet addressh]h;Pointer to a six-byte array containing the Ethernet address}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubeh}(h]h ]h"]h$]h&]uh1jhjݳubjX)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjݳubjX)}(hsCompare passed address with all addresses of the device. Return true if the address if one of the device addresses.h]hsCompare passed address with all addresses of the device. Return true if the address if one of the device addresses.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjݳubjX)}(hZNote that this function calls ether_addr_equal_64bits() so take care of the right padding.h]hZNote that this function calls ether_addr_equal_64bits() so take care of the right padding.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjݳubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!compare_ether_header (C function)c.compare_ether_headerhNtauh1hhjhhhNhNubh)}(hhh](h)}(hAunsigned long compare_ether_header (const void *a, const void *b)h]h)}(h@unsigned long compare_ether_header(const void *a, const void *b)h](j)}(hunsignedh]hunsigned}(hjʴhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƴhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM-ubj)}(h h]h }(hjٴhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƴhhhjشhM-ubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjƴhhhjشhM-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjƴhhhjشhM-ubj)}(hcompare_ether_headerh]j%)}(hcompare_ether_headerh]hcompare_ether_header}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjƴhhhjشhM-ubj)}(h(const void *a, const void *b)h](j)}(h const void *ah](h)}(hjh]hconst}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hvoidh]hvoid}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj7h]ha}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const void *bh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{ubj%)}(hjh]hb}(hjõhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjƴhhhjشhM-ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj´hhhjشhM-ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjشhM-hjhhubjS)}(hhh]jX)}(hCompare two Ethernet headersh]hCompare two Ethernet headers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM-hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjشhM-ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``const void *a`` Pointer to Ethernet header ``const void *b`` Pointer to Ethernet header **Description** Compare two Ethernet headers, returns 0 if equal. This assumes that the network header (i.e., IP header) is 4-byte aligned OR the platform can handle unaligned access. This is the case for all packets coming into netif_receive_skb or similar entry points.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM1hjubj)}(hhh](j)}(h-``const void *a`` Pointer to Ethernet header h](j)}(h``const void *a``h]j)}(hj-h]h const void *a}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM.hj'ubj)}(hhh]jX)}(hPointer to Ethernet headerh]hPointer to Ethernet header}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM.hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM.hj$ubj)}(h-``const void *b`` Pointer to Ethernet header h](j)}(h``const void *b``h]j)}(hjfh]h const void *b}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM/hj`ubj)}(hhh]jX)}(hPointer to Ethernet headerh]hPointer to Ethernet header}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM/hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM/hj$ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM1hjubjX)}(hXCompare two Ethernet headers, returns 0 if equal. This assumes that the network header (i.e., IP header) is 4-byte aligned OR the platform can handle unaligned access. This is the case for all packets coming into netif_receive_skb or similar entry points.h]hXCompare two Ethernet headers, returns 0 if equal. This assumes that the network header (i.e., IP header) is 4-byte aligned OR the platform can handle unaligned access. This is the case for all packets coming into netif_receive_skb or similar entry points.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_hw_addr_gen (C function)c.eth_hw_addr_genhNtauh1hhjhhhNhNubh)}(hhh](h)}(hSvoid eth_hw_addr_gen (struct net_device *dev, const u8 *base_addr, unsigned int id)h]h)}(hRvoid eth_hw_addr_gen(struct net_device *dev, const u8 *base_addr, unsigned int id)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMRubj)}(heth_hw_addr_genh]j%)}(heth_hw_addr_genh]heth_hw_addr_gen}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMRubj)}(h>(struct net_device *dev, const u8 *base_addr, unsigned int id)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}jj sbc.eth_hw_addr_genasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst u8 *base_addrh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j]c.eth_hw_addr_genasbuh1hhjubj)}(h h]h }(hjѷhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj߷hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h base_addrh]h base_addr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int idh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hidh]hid}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj޶hhhjhMRubah}(h]jٶah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMRhj۶hhubjS)}(hhh]jX)}(h.Generate and assign Ethernet address to a porth]h.Generate and assign Ethernet address to a port}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMRhjdhhubah}(h]h ]h"]h$]h&]uh1jRhj۶hhhjhMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` pointer to port's net_device structure ``const u8 *base_addr`` base Ethernet address ``unsigned int id`` offset to add to the base address **Description** Generate a MAC address using a base address and an offset and assign it to a net_device. Commonly used by switch drivers which need to compute addresses for all their ports. addr_assign_type is not changed.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMVhjubj)}(hhh](j)}(hB``struct net_device *dev`` pointer to port's net_device structure h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMShjubj)}(hhh]jX)}(h&pointer to port's net_device structureh]h(pointer to port’s net_device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h.``const u8 *base_addr`` base Ethernet address h](j)}(h``const u8 *base_addr``h]j)}(hjh]hconst u8 *base_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߸ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMThj۸ubj)}(hhh]jX)}(hbase Ethernet addressh]hbase Ethernet address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhj۸ubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h6``unsigned int id`` offset to add to the base address h](j)}(h``unsigned int id``h]j)}(hjh]hunsigned int id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMUhjubj)}(hhh]jX)}(h!offset to add to the base addressh]h!offset to add to the base address}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMUhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMUhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjUh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMWhjubjX)}(hGenerate a MAC address using a base address and an offset and assign it to a net_device. Commonly used by switch drivers which need to compute addresses for all their ports. addr_assign_type is not changed.h]hGenerate a MAC address using a base address and an offset and assign it to a net_device. Commonly used by switch drivers which need to compute addresses for all their ports. addr_assign_type is not changed.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMVhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_skb_pkt_type (C function)c.eth_skb_pkt_typehNtauh1hhjhhhNhNubh)}(hhh](h)}(hIvoid eth_skb_pkt_type (struct sk_buff *skb, const struct net_device *dev)h]h)}(hHvoid eth_skb_pkt_type(struct sk_buff *skb, const struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMgubj)}(heth_skb_pkt_typeh]j%)}(heth_skb_pkt_typeh]heth_skb_pkt_type}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMgubj)}(h3(struct sk_buff *skb, const struct net_device *dev)h](j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj׹hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjӹubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӹubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.eth_skb_pkt_typeasbuh1hhjӹubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjӹubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjӹubj%)}(hskbh]hskb}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjӹubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjϹubj)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.eth_skb_pkt_typeasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjϹubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMgubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMghjhhubjS)}(hhh]jX)}(h8Assign packet type if destination address does not matchh]h8Assign packet type if destination address does not match}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMghjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMgubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXQ**Parameters** ``struct sk_buff *skb`` Assigned a packet type if address does not match **dev** address ``const struct net_device *dev`` Network device used to compare packet address against **Description** If the destination MAC address of the packet does not match the network device address, assign an appropriate packet type.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMkhjubj)}(hhh](j)}(hY``struct sk_buff *skb`` Assigned a packet type if address does not match **dev** address h](j)}(h``struct sk_buff *skb``h]j)}(hj&h]hstruct sk_buff *skb}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhhj ubj)}(hhh]jX)}(h@Assigned a packet type if address does not match **dev** addressh](h1Assigned a packet type if address does not match }(hj?hhhNhNubj)}(h**dev**h]hdev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh address}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj;hMhhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhhjubj)}(hW``const struct net_device *dev`` Network device used to compare packet address against h](j)}(h ``const struct net_device *dev``h]j)}(hjqh]hconst struct net_device *dev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMihjkubj)}(hhh]jX)}(h5Network device used to compare packet address againsth]h5Network device used to compare packet address against}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMkhjubjX)}(hzIf the destination MAC address of the packet does not match the network device address, assign an appropriate packet type.h]hzIf the destination MAC address of the packet does not match the network device address, assign an appropriate packet type.}(hj»hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](heth_skb_pad (C function) c.eth_skb_padhNtauh1hhjhhhNhNubh)}(hhh](h)}(h%int eth_skb_pad (struct sk_buff *skb)h]h)}(h$int eth_skb_pad(struct sk_buff *skb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h eth_skb_padh]j%)}(h eth_skb_padh]h eth_skb_pad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sk_buff *skb)h]j)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jjsb c.eth_skb_padasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h9Pad buffer to minimum number of octets for Ethernet frameh]h9Pad buffer to minimum number of octets for Ethernet frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjɼjxjɼjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct sk_buff *skb`` Buffer to pad **Description** An Ethernet frame should have a minimum size of 60 bytes. This function takes short frames and pads them with zeros up to the 60 byte limit.h](jX)}(h**Parameters**h]j)}(hjӼh]h Parameters}(hjռhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѼubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjͼubj)}(hhh]j)}(h&``struct sk_buff *skb`` Buffer to pad h](j)}(h``struct sk_buff *skb``h]j)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjubj)}(hhh]jX)}(h Buffer to padh]h Buffer to pad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjͼubjX)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjͼubjX)}(hAn Ethernet frame should have a minimum size of 60 bytes. This function takes short frames and pads them with zeros up to the 60 byte limit.h]hAn Ethernet frame should have a minimum size of 60 bytes. This function takes short frames and pads them with zeros up to the 60 byte limit.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWh\/var/lib/git/docbuild/linux/Documentation/networking/kapi:101: ./include/linux/etherdevice.hhMhjͼubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgro_node (C struct) c.gro_nodehNtauh1hhjhhhNhNubh)}(hhh](h)}(hgro_nodeh]h)}(hstruct gro_nodeh](h)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjhKubj)}(hgro_nodeh]j%)}(hjlh]hgro_node}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjjhhhjhKubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjghhubjS)}(hhh]jX)}(h,structure to support Generic Receive Offloadh]h,structure to support Generic Receive Offload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM]hjhhubah}(h]h ]h"]h$]h&]uh1jRhjghhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj̽jxj̽jyjzj{uh1hhhhjhNhNubj})}(hX"**Definition**:: struct gro_node { unsigned long bitmask; struct gro_list hash[GRO_HASH_BUCKETS]; struct list_head rx_list; u32 rx_count; u32 cached_napi_id; }; **Members** ``bitmask`` bitmask to indicate used buckets in **hash** ``hash`` hashtable of pending aggregated skbs, separated by flows ``rx_list`` list of pending ``GRO_NORMAL`` skbs ``rx_count`` cached current length of **rx_list** ``cached_napi_id`` napi_struct::napi_id cached for hotpath, 0 for standaloneh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjؽhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԽubh:}(hjԽhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMahjнubjU)}(hstruct gro_node { unsigned long bitmask; struct gro_list hash[GRO_HASH_BUCKETS]; struct list_head rx_list; u32 rx_count; u32 cached_napi_id; };h]hstruct gro_node { unsigned long bitmask; struct gro_list hash[GRO_HASH_BUCKETS]; struct list_head rx_list; u32 rx_count; u32 cached_napi_id; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMchjнubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMkhjнubj)}(hhh](j)}(h9``bitmask`` bitmask to indicate used buckets in **hash** h](j)}(h ``bitmask``h]j)}(hj!h]hbitmask}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM_hjubj)}(hhh]jX)}(h,bitmask to indicate used buckets in **hash**h](h$bitmask to indicate used buckets in }(hj:hhhNhNubj)}(h**hash**h]hhash}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jWhj6hM_hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hM_hjubj)}(hB``hash`` hashtable of pending aggregated skbs, separated by flows h](j)}(h``hash``h]j)}(hjhh]hhash}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM`hjbubj)}(hhh]jX)}(h8hashtable of pending aggregated skbs, separated by flowsh]h8hashtable of pending aggregated skbs, separated by flows}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hM`hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hM`hjubj)}(h0``rx_list`` list of pending ``GRO_NORMAL`` skbs h](j)}(h ``rx_list``h]j)}(hjh]hrx_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMahjubj)}(hhh]jX)}(h#list of pending ``GRO_NORMAL`` skbsh](hlist of pending }(hjhhhNhNubj)}(h``GRO_NORMAL``h]h GRO_NORMAL}(hj¾hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh skbs}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(h2``rx_count`` cached current length of **rx_list** h](j)}(h ``rx_count``h]j)}(hjh]hrx_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMbhjubj)}(hhh]jX)}(h$cached current length of **rx_list**h](hcached current length of }(hjhhhNhNubj)}(h **rx_list**h]hrx_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(hL``cached_napi_id`` napi_struct::napi_id cached for hotpath, 0 for standaloneh](j)}(h``cached_napi_id``h]j)}(hj3h]hcached_napi_id}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMbhj-ubj)}(hhh]jX)}(h9napi_struct::napi_id cached for hotpath, 0 for standaloneh]h9napi_struct::napi_id cached for hotpath, 0 for standalone}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMchjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMbhjubeh}(h]h ]h"]h$]h&]uh1jhjнubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_is_scheduled (C function)c.napi_is_scheduledhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.bool napi_is_scheduled (struct napi_struct *n)h]h)}(h-bool napi_is_scheduled(struct napi_struct *n)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hnapi_is_scheduledh]j%)}(hnapi_is_scheduledh]hnapi_is_scheduled}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjɿhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjſubj)}(h h]h }(hjֿhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjſubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_is_scheduledasbuh1hhjſubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjſubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjſubj%)}(hj0h]hn}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjſubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(htest if NAPI is scheduledh]htest if NAPI is scheduled}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjHhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1hhhhjhNhNubj})}(hX?**Parameters** ``struct napi_struct *n`` NAPI context **Description** This check is "best-effort". With no locking implemented, a NAPI can be scheduled or terminate right after this check and produce not precise results. NAPI_STATE_SCHED is an internal state, napi_is_scheduled should not be used normally and napi_schedule should be used instead. Use only if the driver really needs to check if a NAPI is scheduled for example in the context of delayed timer that can be skipped if a NAPI is already scheduled. **Return** True if NAPI is scheduled, False otherwise.h](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjgubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjgubjX)}(hThis check is "best-effort". With no locking implemented, a NAPI can be scheduled or terminate right after this check and produce not precise results.h]hThis check is “best-effort”. With no locking implemented, a NAPI can be scheduled or terminate right after this check and produce not precise results.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjgubjX)}(h~NAPI_STATE_SCHED is an internal state, napi_is_scheduled should not be used normally and napi_schedule should be used instead.h]h~NAPI_STATE_SCHED is an internal state, napi_is_scheduled should not be used normally and napi_schedule should be used instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubjX)}(hUse only if the driver really needs to check if a NAPI is scheduled for example in the context of delayed timer that can be skipped if a NAPI is already scheduled.h]hUse only if the driver really needs to check if a NAPI is scheduled for example in the context of delayed timer that can be skipped if a NAPI is already scheduled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubjX)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubjX)}(h+True if NAPI is scheduled, False otherwise.h]h+True if NAPI is scheduled, False otherwise.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_schedule (C function)c.napi_schedulehNtauh1hhjhhhNhNubh)}(hhh](h)}(h*bool napi_schedule (struct napi_struct *n)h]h)}(h)bool napi_schedule(struct napi_struct *n)h](j)}(hjTh]hbool}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM#ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhhj^hM#ubj)}(h napi_scheduleh]j%)}(h napi_scheduleh]h napi_schedule}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjMhhhj^hM#ubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjssbc.napi_scheduleasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjMhhhj^hM#ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjIhhhj^hM#ubah}(h]jDah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^hM#hjFhhubjS)}(hhh]jX)}(hschedule NAPI pollh]hschedule NAPI poll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM#hj hhubah}(h]h ]h"]h$]h&]uh1jRhjFhhhj^hM#ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhjhNhNubj})}(hX#**Parameters** ``struct napi_struct *n`` NAPI context **Description** Schedule NAPI poll routine to be called if it is not already running. **Return** true if we schedule a NAPI or false if not. Refer to napi_schedule_prep() for additional reason on why a NAPI might not be scheduled.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM'hj+ubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hjPh]hstruct napi_struct *n}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM$hjJubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM$hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM$hjGubah}(h]h ]h"]h$]h&]uh1jhj+ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM&hj+ubjX)}(hESchedule NAPI poll routine to be called if it is not already running.h]hESchedule NAPI poll routine to be called if it is not already running.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM%hj+ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM(hj+ubjX)}(htrue if we schedule a NAPI or false if not. Refer to napi_schedule_prep() for additional reason on why a NAPI might not be scheduled.h]htrue if we schedule a NAPI or false if not. Refer to napi_schedule_prep() for additional reason on why a NAPI might not be scheduled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM(hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!napi_schedule_irqoff (C function)c.napi_schedule_irqoffhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void napi_schedule_irqoff (struct napi_struct *n)h]h)}(h0void napi_schedule_irqoff(struct napi_struct *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM7ubj)}(hnapi_schedule_irqoffh]j%)}(hnapi_schedule_irqoffh]hnapi_schedule_irqoff}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM7ubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]j')}jjsbc.napi_schedule_irqoffasbuh1hhj0ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM7ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM7ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM7hjhhubjS)}(hhh]jX)}(hschedule NAPI pollh]hschedule NAPI poll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM7hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM7ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *n`` NAPI context **Description** Variant of napi_schedule(), assuming hard irqs are masked.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM;hjubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM8hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM8hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM8hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM:hjubjX)}(h:Variant of napi_schedule(), assuming hard irqs are masked.h]h:Variant of napi_schedule(), assuming hard irqs are masked.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_complete_done (C function)c.napi_complete_donehNtauh1hhjhhhNhNubh)}(hhh](h)}(h>bool napi_complete_done (struct napi_struct *n, int work_done)h]h)}(h=bool napi_complete_done(struct napi_struct *n, int work_done)h](j)}(hjTh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjshhhjhMCubj)}(hnapi_complete_doneh]j%)}(hnapi_complete_doneh]hnapi_complete_done}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjshhhjhMCubj)}(h&(struct napi_struct *n, int work_done)h](j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_complete_doneasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int work_doneh](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(h work_doneh]h work_done}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjshhhjhMCubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjohhhjhMCubah}(h]jjah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMChjlhhubjS)}(hhh]jX)}(hNAPI processing completeh]hNAPI processing complete}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMChjghhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjhMCubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hX@**Parameters** ``struct napi_struct *n`` NAPI context ``int work_done`` number of packets processed **Description** Mark NAPI processing as complete. Should only be called if poll budget has not been completely consumed. Prefer over napi_complete(). **Return** false if device should avoid rearming interrupts.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMGhjubj)}(hhh](j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hjh]hstruct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMDhjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubj)}(h.``int work_done`` number of packets processed h](j)}(h``int work_done``h]j)}(hjh]h int work_done}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMEhjubj)}(hhh]jX)}(hnumber of packets processedh]hnumber of packets processed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMGhjubjX)}(hMark NAPI processing as complete. Should only be called if poll budget has not been completely consumed. Prefer over napi_complete().h]hMark NAPI processing as complete. Should only be called if poll budget has not been completely consumed. Prefer over napi_complete().}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMFhjubjX)}(h **Return**h]j)}(hjFh]hReturn}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMJhjubjX)}(h1false if device should avoid rearming interrupts.h]h1false if device should avoid rearming interrupts.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnapi_synchronize (C function)c.napi_synchronizehNtauh1hhjhhhNhNubh)}(hhh](h)}(h3void napi_synchronize (const struct napi_struct *n)h]h)}(h2void napi_synchronize(const struct napi_struct *n)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM^ubj)}(hnapi_synchronizeh]j%)}(hnapi_synchronizeh]hnapi_synchronize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM^ubj)}(h(const struct napi_struct *n)h]j)}(hconst struct napi_struct *nh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.napi_synchronizeasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hj0h]hn}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM^ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM^ubah}(h]j~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM^hjhhubjS)}(hhh]jX)}(hwait until NAPI is not runningh]hwait until NAPI is not running}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^hjbhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM^ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj}jxj}jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct napi_struct *n`` NAPI context **Description** Wait until NAPI is done being scheduled on this context. Waits till any outstanding processing completes but does not disable future activations.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMbhjubj)}(hhh]j)}(h-``const struct napi_struct *n`` NAPI context h](j)}(h``const struct napi_struct *n``h]j)}(hjh]hconst struct napi_struct *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM_hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMahjubjX)}(hWait until NAPI is done being scheduled on this context. Waits till any outstanding processing completes but does not disable future activations.h]hWait until NAPI is done being scheduled on this context. Waits till any outstanding processing completes but does not disable future activations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM`hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*napi_if_scheduled_mark_missed (C function)c.napi_if_scheduled_mark_missedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:bool napi_if_scheduled_mark_missed (struct napi_struct *n)h]h)}(h9bool napi_if_scheduled_mark_missed(struct napi_struct *n)h](j)}(hjTh]hbool}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMoubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhj3hMoubj)}(hnapi_if_scheduled_mark_missedh]j%)}(hnapi_if_scheduled_mark_missedh]hnapi_if_scheduled_mark_missed}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"hhhj3hMoubj)}(h(struct napi_struct *n)h]j)}(hstruct napi_struct *nh](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjHsbc.napi_if_scheduled_mark_missedasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hj0h]hn}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubah}(h]h ]h"]h$]h&]j<j=uh1jhj"hhhj3hMoubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj3hMoubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj3hMohjhhubjS)}(hhh]jX)}(h.if napi is running, set the NAPIF_STATE_MISSEDh]h.if napi is running, set the NAPIF_STATE_MISSED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMohjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj3hMoubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *n`` NAPI context **Description** If napi is running, set the NAPIF_STATE_MISSED, and return true if NAPI is scheduled.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMshjubj)}(hhh]j)}(h'``struct napi_struct *n`` NAPI context h](j)}(h``struct napi_struct *n``h]j)}(hj%h]hstruct napi_struct *n}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMqhjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMqhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMqhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMshjubjX)}(hUIf napi is running, set the NAPIF_STATE_MISSED, and return true if NAPI is scheduled.h]hUIf napi is running, set the NAPIF_STATE_MISSED, and return true if NAPI is scheduled.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_priv_flags (C enum)c.netdev_priv_flagshNtauh1hhjhhhNhNubh)}(hhh](h)}(hnetdev_priv_flagsh]h)}(henum netdev_priv_flagsh](h)}(hhh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMxubj)}(hnetdev_priv_flagsh]j%)}(hjh]hnetdev_priv_flags}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMxubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMxhjhhubjS)}(hhh]jX)}(h3:c:type:`struct net_device ` priv_flagsh](h)}(h(:c:type:`struct net_device `h]j)}(hjh]hstruct net_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]j')}jjsbc.netdev_priv_flagsasbj net_deviceuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhKhjubh priv_flags}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMxubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjhNhNubj})}(hX**Constants** ``IFF_802_1Q_VLAN`` 802.1Q VLAN device ``IFF_EBRIDGE`` Ethernet bridging device ``IFF_BONDING`` bonding master or slave ``IFF_ISATAP`` ISATAP interface (RFC4214) ``IFF_WAN_HDLC`` WAN HDLC device ``IFF_XMIT_DST_RELEASE`` dev_hard_start_xmit() is allowed to release skb->dst ``IFF_DONT_BRIDGE`` disallow bridging this ether dev ``IFF_DISABLE_NETPOLL`` disable netpoll at run-time ``IFF_MACVLAN_PORT`` device used as macvlan port ``IFF_BRIDGE_PORT`` device used as bridge port ``IFF_OVS_DATAPATH`` device used as Open vSwitch datapath port ``IFF_TX_SKB_SHARING`` The interface supports sharing skbs on transmit ``IFF_UNICAST_FLT`` Supports unicast filtering ``IFF_TEAM_PORT`` device used as team port ``IFF_SUPP_NOFCS`` device supports sending custom FCS ``IFF_LIVE_ADDR_CHANGE`` device supports hardware address change when it's running ``IFF_MACVLAN`` Macvlan device ``IFF_XMIT_DST_RELEASE_PERM`` IFF_XMIT_DST_RELEASE not taking into account underlying stacked devices ``IFF_L3MDEV_MASTER`` device is an L3 master device ``IFF_NO_QUEUE`` device can run without qdisc attached ``IFF_OPENVSWITCH`` device is a Open vSwitch master ``IFF_L3MDEV_SLAVE`` device is enslaved to an L3 master device ``IFF_TEAM`` device is a team device ``IFF_RXFH_CONFIGURED`` device has had Rx Flow indirection table configured ``IFF_PHONY_HEADROOM`` the headroom value is controlled by an external entity (i.e. the master device for bridged veth) ``IFF_MACSEC`` device is a MACsec device ``IFF_NO_RX_HANDLER`` device doesn't support the rx_handler hook ``IFF_FAILOVER`` device is a failover master device ``IFF_FAILOVER_SLAVE`` device is lower dev of a failover master device ``IFF_L3MDEV_RX_HANDLER`` only invoke the rx handler of L3 master device ``IFF_NO_ADDRCONF`` prevent ipv6 addrconf ``IFF_TX_SKB_NO_LINEAR`` device/driver is capable of xmitting frames with skb_headlen(skb) == 0 (data starts from frag0)h](jX)}(h **Constants**h]j)}(hj0h]h Constants}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj*ubj)}(hhh](j)}(h'``IFF_802_1Q_VLAN`` 802.1Q VLAN device h](j)}(h``IFF_802_1Q_VLAN``h]j)}(hjOh]hIFF_802_1Q_VLAN}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjIubj)}(hhh]jX)}(h802.1Q VLAN deviceh]h802.1Q VLAN device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h)``IFF_EBRIDGE`` Ethernet bridging device h](j)}(h``IFF_EBRIDGE``h]j)}(hjh]h IFF_EBRIDGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hEthernet bridging deviceh]hEthernet bridging device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h(``IFF_BONDING`` bonding master or slave h](j)}(h``IFF_BONDING``h]j)}(hjh]h IFF_BONDING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hbonding master or slaveh]hbonding master or slave}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h*``IFF_ISATAP`` ISATAP interface (RFC4214) h](j)}(h``IFF_ISATAP``h]j)}(hjh]h IFF_ISATAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hISATAP interface (RFC4214)h]hISATAP interface (RFC4214)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h!``IFF_WAN_HDLC`` WAN HDLC device h](j)}(h``IFF_WAN_HDLC``h]j)}(hj3h]h IFF_WAN_HDLC}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj-ubj)}(hhh]jX)}(hWAN HDLC deviceh]hWAN HDLC device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjFubj)}(hN``IFF_XMIT_DST_RELEASE`` dev_hard_start_xmit() is allowed to release skb->dst h](j)}(h``IFF_XMIT_DST_RELEASE``h]j)}(hjlh]hIFF_XMIT_DST_RELEASE}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjfubj)}(hhh]jX)}(h4dev_hard_start_xmit() is allowed to release skb->dsth]h4dev_hard_start_xmit() is allowed to release skb->dst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h5``IFF_DONT_BRIDGE`` disallow bridging this ether dev h](j)}(h``IFF_DONT_BRIDGE``h]j)}(hjh]hIFF_DONT_BRIDGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h disallow bridging this ether devh]h disallow bridging this ether dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h4``IFF_DISABLE_NETPOLL`` disable netpoll at run-time h](j)}(h``IFF_DISABLE_NETPOLL``h]j)}(hjh]hIFF_DISABLE_NETPOLL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hdisable netpoll at run-timeh]hdisable netpoll at run-time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h1``IFF_MACVLAN_PORT`` device used as macvlan port h](j)}(h``IFF_MACVLAN_PORT``h]j)}(hjh]hIFF_MACVLAN_PORT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hdevice used as macvlan porth]hdevice used as macvlan port}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjFubj)}(h/``IFF_BRIDGE_PORT`` device used as bridge port h](j)}(h``IFF_BRIDGE_PORT``h]j)}(hjQh]hIFF_BRIDGE_PORT}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjKubj)}(hhh]jX)}(hdevice used as bridge porth]hdevice used as bridge port}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjFubj)}(h?``IFF_OVS_DATAPATH`` device used as Open vSwitch datapath port h](j)}(h``IFF_OVS_DATAPATH``h]j)}(hjh]hIFF_OVS_DATAPATH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h)device used as Open vSwitch datapath porth]h)device used as Open vSwitch datapath port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hG``IFF_TX_SKB_SHARING`` The interface supports sharing skbs on transmit h](j)}(h``IFF_TX_SKB_SHARING``h]j)}(hjh]hIFF_TX_SKB_SHARING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h/The interface supports sharing skbs on transmith]h/The interface supports sharing skbs on transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h/``IFF_UNICAST_FLT`` Supports unicast filtering h](j)}(h``IFF_UNICAST_FLT``h]j)}(hjh]hIFF_UNICAST_FLT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hSupports unicast filteringh]hSupports unicast filtering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h+``IFF_TEAM_PORT`` device used as team port h](j)}(h``IFF_TEAM_PORT``h]j)}(hj5h]h IFF_TEAM_PORT}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj/ubj)}(hhh]jX)}(hdevice used as team porth]hdevice used as team port}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjFubj)}(h6``IFF_SUPP_NOFCS`` device supports sending custom FCS h](j)}(h``IFF_SUPP_NOFCS``h]j)}(hjnh]hIFF_SUPP_NOFCS}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhubj)}(hhh]jX)}(h"device supports sending custom FCSh]h"device supports sending custom FCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hS``IFF_LIVE_ADDR_CHANGE`` device supports hardware address change when it's running h](j)}(h``IFF_LIVE_ADDR_CHANGE``h]j)}(hjh]hIFF_LIVE_ADDR_CHANGE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h9device supports hardware address change when it's runningh]h;device supports hardware address change when it’s running}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h``IFF_MACVLAN`` Macvlan device h](j)}(h``IFF_MACVLAN``h]j)}(hjh]h IFF_MACVLAN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMacvlan deviceh]hMacvlan device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hf``IFF_XMIT_DST_RELEASE_PERM`` IFF_XMIT_DST_RELEASE not taking into account underlying stacked devices h](j)}(h``IFF_XMIT_DST_RELEASE_PERM``h]j)}(hjh]hIFF_XMIT_DST_RELEASE_PERM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hGIFF_XMIT_DST_RELEASE not taking into account underlying stacked devicesh]hGIFF_XMIT_DST_RELEASE not taking into account underlying stacked devices}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjFubj)}(h4``IFF_L3MDEV_MASTER`` device is an L3 master device h](j)}(h``IFF_L3MDEV_MASTER``h]j)}(hjTh]hIFF_L3MDEV_MASTER}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNubj)}(hhh]jX)}(hdevice is an L3 master deviceh]hdevice is an L3 master device}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjFubj)}(h7``IFF_NO_QUEUE`` device can run without qdisc attached h](j)}(h``IFF_NO_QUEUE``h]j)}(hjh]h IFF_NO_QUEUE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h%device can run without qdisc attachedh]h%device can run without qdisc attached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h4``IFF_OPENVSWITCH`` device is a Open vSwitch master h](j)}(h``IFF_OPENVSWITCH``h]j)}(hjh]hIFF_OPENVSWITCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hdevice is a Open vSwitch masterh]hdevice is a Open vSwitch master}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h?``IFF_L3MDEV_SLAVE`` device is enslaved to an L3 master device h](j)}(h``IFF_L3MDEV_SLAVE``h]j)}(hjh]hIFF_L3MDEV_SLAVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h)device is enslaved to an L3 master deviceh]h)device is enslaved to an L3 master device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h%``IFF_TEAM`` device is a team device h](j)}(h ``IFF_TEAM``h]j)}(hj8h]hIFF_TEAM}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj2ubj)}(hhh]jX)}(hdevice is a team deviceh]hdevice is a team device}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjFubj)}(hL``IFF_RXFH_CONFIGURED`` device has had Rx Flow indirection table configured h](j)}(h``IFF_RXFH_CONFIGURED``h]j)}(hjqh]hIFF_RXFH_CONFIGURED}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjkubj)}(hhh]jX)}(h3device has had Rx Flow indirection table configuredh]h3device has had Rx Flow indirection table configured}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hx``IFF_PHONY_HEADROOM`` the headroom value is controlled by an external entity (i.e. the master device for bridged veth) h](j)}(h``IFF_PHONY_HEADROOM``h]j)}(hjh]hIFF_PHONY_HEADROOM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h`the headroom value is controlled by an external entity (i.e. the master device for bridged veth)h]h`the headroom value is controlled by an external entity (i.e. the master device for bridged veth)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h)``IFF_MACSEC`` device is a MACsec device h](j)}(h``IFF_MACSEC``h]j)}(hjh]h IFF_MACSEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hdevice is a MACsec deviceh]hdevice is a MACsec device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hA``IFF_NO_RX_HANDLER`` device doesn't support the rx_handler hook h](j)}(h``IFF_NO_RX_HANDLER``h]j)}(hjh]hIFF_NO_RX_HANDLER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h*device doesn't support the rx_handler hookh]h,device doesn’t support the rx_handler hook}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjFubj)}(h4``IFF_FAILOVER`` device is a failover master device h](j)}(h``IFF_FAILOVER``h]j)}(hjVh]h IFF_FAILOVER}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjPubj)}(hhh]jX)}(h"device is a failover master deviceh]h"device is a failover master device}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjFubj)}(hG``IFF_FAILOVER_SLAVE`` device is lower dev of a failover master device h](j)}(h``IFF_FAILOVER_SLAVE``h]j)}(hjh]hIFF_FAILOVER_SLAVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h/device is lower dev of a failover master deviceh]h/device is lower dev of a failover master device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hI``IFF_L3MDEV_RX_HANDLER`` only invoke the rx handler of L3 master device h](j)}(h``IFF_L3MDEV_RX_HANDLER``h]j)}(hjh]hIFF_L3MDEV_RX_HANDLER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h.only invoke the rx handler of L3 master deviceh]h.only invoke the rx handler of L3 master device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h*``IFF_NO_ADDRCONF`` prevent ipv6 addrconf h](j)}(h``IFF_NO_ADDRCONF``h]j)}(hjh]hIFF_NO_ADDRCONF}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hprevent ipv6 addrconfh]hprevent ipv6 addrconf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(hx``IFF_TX_SKB_NO_LINEAR`` device/driver is capable of xmitting frames with skb_headlen(skb) == 0 (data starts from frag0)h](j)}(h``IFF_TX_SKB_NO_LINEAR``h]j)}(hj:h]hIFF_TX_SKB_NO_LINEAR}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj4ubj)}(hhh]jX)}(h_device/driver is capable of xmitting frames with skb_headlen(skb) == 0 (data starts from frag0)h]h_device/driver is capable of xmitting frames with skb_headlen(skb) == 0 (data starts from frag0)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubjX)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubjX)}(hThese are the :c:type:`struct net_device `, they are only set internally by drivers and used in the kernel. These flags are invisible to userspace; this means that the order of these flags can change during any kernel release.h](hThese are the }(hjhhhNhNubh)}(h(:c:type:`struct net_device `h]j)}(hjh]hstruct net_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj net_deviceuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubh, they are only set internally by drivers and used in the kernel. These flags are invisible to userspace; this means that the order of these flags can change during any kernel release.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjhhubjX)}(hYou should add bitfield booleans after either net_device::priv_flags (hotpath) or ::threaded (slowpath) instead of extending these flags.h]hYou should add bitfield booleans after either net_device::priv_flags (hotpath) or ::threaded (slowpath) instead of extending these flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnet_device (C struct) c.net_devicehNtauh1hhjhhhNhNubh)}(hhh](h)}(h net_deviceh]h)}(hstruct net_deviceh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h net_deviceh]j%)}(hjh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hThe DEVICE structure.h]hThe DEVICE structure.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj+hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjFjxjFjyjzj{uh1hhhhjhNhNubj})}(hXc**Definition**:: struct net_device { unsigned long priv_flags:32; unsigned long lltx:1; unsigned long netmem_tx:1; const struct net_device_ops *netdev_ops; const struct header_ops *header_ops; struct netdev_queue *_tx; netdev_features_t gso_partial_features; unsigned int real_num_tx_queues; unsigned int gso_max_size; unsigned int gso_ipv4_max_size; u16 gso_max_segs; s16 num_tc; unsigned int mtu; unsigned short needed_headroom; struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; #ifdef CONFIG_XPS; struct xps_dev_maps *xps_maps[XPS_MAPS_MAX]; #endif; #ifdef CONFIG_NETFILTER_EGRESS; struct nf_hook_entries *nf_hooks_egress; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_egress; #endif; union { struct pcpu_lstats __percpu *lstats; struct pcpu_sw_netstats __percpu *tstats; struct pcpu_dstats __percpu *dstats; }; unsigned long state; unsigned int flags; unsigned short hard_header_len; netdev_features_t features; struct inet6_dev *ip6_ptr; struct bpf_prog *xdp_prog; struct list_head ptype_specific; int ifindex; unsigned int real_num_rx_queues; struct netdev_rx_queue *_rx; unsigned int gro_max_size; unsigned int gro_ipv4_max_size; rx_handler_func_t *rx_handler; void *rx_handler_data; possible_net_t nd_net; #ifdef CONFIG_NETPOLL; struct netpoll_info *npinfo; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_ingress; #endif; char name[IFNAMSIZ]; struct netdev_name_node *name_node; struct dev_ifalias *ifalias; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct list_head ptype_all; struct { struct list_head upper; struct list_head lower; } adj_list; xdp_features_t xdp_features; const struct xdp_metadata_ops *xdp_metadata_ops; const struct xsk_tx_metadata_ops *xsk_tx_metadata_ops; unsigned short gflags; unsigned short needed_tailroom; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; netdev_features_t mangleid_features; unsigned int min_mtu; unsigned int max_mtu; unsigned short type; unsigned char min_header_len; unsigned char name_assign_type; int group; struct net_device_stats stats; struct net_device_core_stats __percpu *core_stats; atomic_t carrier_up_count; atomic_t carrier_down_count; #ifdef CONFIG_WIRELESS_EXT; const struct iw_handler_def *wireless_handlers; #endif; const struct ethtool_ops *ethtool_ops; #ifdef CONFIG_NET_L3_MASTER_DEV; const struct l3mdev_ops *l3mdev_ops; #endif; #if IS_ENABLED(CONFIG_IPV6); const struct ndisc_ops *ndisc_ops; #endif; #ifdef CONFIG_XFRM_OFFLOAD; const struct xfrmdev_ops *xfrmdev_ops; #endif; #if IS_ENABLED(CONFIG_TLS_DEVICE); const struct tlsdev_ops *tlsdev_ops; #endif; unsigned int operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned char perm_addr[MAX_ADDR_LEN]; unsigned char addr_assign_type; unsigned char addr_len; unsigned char upper_level; unsigned char lower_level; u8 threaded; unsigned short neigh_priv_len; unsigned short dev_id; unsigned short dev_port; int irq; u32 priv_len; spinlock_t addr_list_lock; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; #ifdef CONFIG_SYSFS; struct kset *queues_kset; #endif; #ifdef CONFIG_LOCKDEP; struct list_head unlink_list; #endif; unsigned int promiscuity; unsigned int allmulti; bool uc_promisc; #ifdef CONFIG_LOCKDEP; unsigned char nested_level; #endif; struct in_device *ip_ptr; struct hlist_head fib_nh_head; #if IS_ENABLED(CONFIG_VLAN_8021Q); struct vlan_info *vlan_info; #endif; #if IS_ENABLED(CONFIG_NET_DSA); struct dsa_port *dsa_ptr; #endif; #if IS_ENABLED(CONFIG_TIPC); struct tipc_bearer *tipc_ptr; #endif; #if IS_ENABLED(CONFIG_ATALK); void *atalk_ptr; #endif; #if IS_ENABLED(CONFIG_AX25); struct ax25_dev *ax25_ptr; #endif; #if IS_ENABLED(CONFIG_CFG80211); struct wireless_dev *ieee80211_ptr; #endif; #if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN); struct wpan_dev *ieee802154_ptr; #endif; #if IS_ENABLED(CONFIG_MPLS_ROUTING); struct mpls_dev *mpls_ptr; #endif; #if IS_ENABLED(CONFIG_MCTP); struct mctp_dev *mctp_ptr; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_dev *psp_dev; #endif; const unsigned char *dev_addr; unsigned int num_rx_queues; #define GRO_LEGACY_MAX_SIZE 65536u; #define GRO_MAX_SIZE (8 * 65535u); unsigned int xdp_zc_max_segs; struct netdev_queue *ingress_queue; #ifdef CONFIG_NETFILTER_INGRESS; struct nf_hook_entries *nf_hooks_ingress; #endif; unsigned char broadcast[MAX_ADDR_LEN]; #ifdef CONFIG_RFS_ACCEL; struct cpu_rmap *rx_cpu_rmap; #endif; struct hlist_node index_hlist; unsigned int num_tx_queues; struct Qdisc *qdisc; unsigned int tx_queue_len; spinlock_t tx_global_lock; struct xdp_dev_bulk_queue __percpu *xdp_bulkq; #ifdef CONFIG_NET_SCHED; unsigned long qdisc_hash[1 << ((4) - 1)]; #endif; struct timer_list watchdog_timer; int watchdog_timeo; u32 proto_down_reason; struct list_head todo_list; #ifdef CONFIG_PCPU_DEV_REFCNT; int __percpu *pcpu_refcnt; #else; refcount_t dev_refcnt; #endif; struct ref_tracker_dir refcnt_tracker; struct list_head link_watch_list; u8 reg_state; bool dismantle; bool moving_ns; bool rtnl_link_initializing; bool needs_free_netdev; void (*priv_destructor)(struct net_device *dev); void *ml_priv; enum netdev_ml_priv_type ml_priv_type; enum netdev_stat_type pcpu_stat_type:8; #if IS_ENABLED(CONFIG_GARP); struct garp_port *garp_port; #endif; #if IS_ENABLED(CONFIG_MRP); struct mrp_port *mrp_port; #endif; #if IS_ENABLED(CONFIG_NET_DROP_MONITOR); struct dm_hw_stat_delta *dm_private; #endif; struct device dev; const struct attribute_group *sysfs_groups[5]; const struct attribute_group *sysfs_rx_queue_group; const struct rtnl_link_ops *rtnl_link_ops; const struct netdev_stat_ops *stat_ops; const struct netdev_queue_mgmt_ops *queue_mgmt_ops; #define GSO_MAX_SEGS 65535u; #define GSO_LEGACY_MAX_SIZE 65536u; #define GSO_MAX_SIZE (8 * GSO_MAX_SEGS); #define TSO_LEGACY_MAX_SIZE 65536; #define TSO_MAX_SIZE UINT_MAX; unsigned int tso_max_size; #define TSO_MAX_SEGS U16_MAX; u16 tso_max_segs; #ifdef CONFIG_DCB; const struct dcbnl_rtnl_ops *dcbnl_ops; #endif; u8 prio_tc_map[TC_BITMASK + 1]; #if IS_ENABLED(CONFIG_FCOE); unsigned int fcoe_ddp_xid; #endif; #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO); struct netprio_map *priomap; #endif; struct phy_link_topology *link_topo; struct phy_device *phydev; struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; bool proto_down; bool irq_affinity_auto; bool rx_cpu_rmap_auto; unsigned long see_all_hwtstamp_requests:1; unsigned long change_proto_down:1; unsigned long netns_immutable:1; unsigned long fcoe_mtu:1; struct list_head net_notifier_list; #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; const struct udp_tunnel_nic_info *udp_tunnel_nic_info; struct udp_tunnel_nic *udp_tunnel_nic; struct netdev_config *cfg; struct netdev_config *cfg_pending; struct ethtool_netdev_state *ethtool; struct bpf_xdp_entity xdp_state[__MAX_XDP_MODE]; u8 dev_addr_shadow[MAX_ADDR_LEN]; netdevice_tracker linkwatch_dev_tracker; netdevice_tracker watchdog_dev_tracker; netdevice_tracker dev_registered_tracker; struct rtnl_hw_stats64 *offload_xstats_l3; struct devlink_port *devlink_port; #if IS_ENABLED(CONFIG_DPLL); struct dpll_pin *dpll_pin; #endif; #if IS_ENABLED(CONFIG_PAGE_POOL); struct hlist_head page_pools; #endif; struct dim_irq_moder *irq_moder; u64 max_pacing_offload_horizon; struct napi_config *napi_config; u32 num_napi_configs; u32 napi_defer_hard_irqs; unsigned long gro_flush_timeout; bool up; bool request_ops_lock; struct mutex lock; #if IS_ENABLED(CONFIG_NET_SHAPER); struct net_shaper_hierarchy *net_shaper_hierarchy; #endif; struct hlist_head neighbours[NEIGH_NR_TABLES]; struct hwtstamp_provider *hwprov; u8 priv[] ; }; **Members** ``priv_flags`` flags invisible to userspace defined as bits, see enum netdev_priv_flags for the definitions ``lltx`` device supports lockless Tx. Deprecated for real HW drivers. Mainly used by logical interfaces, such as bonding and tunnels ``netmem_tx`` device support netmem_tx. ``netdev_ops`` Includes several pointers to callbacks, if one wants to override the ndo_*() functions ``header_ops`` Includes callbacks for creating,parsing,caching,etc of Layer 2 headers. ``_tx`` Array of TX queues ``gso_partial_features`` value(s) from NETIF_F_GSO\* ``real_num_tx_queues`` Number of TX queues currently active in device ``gso_max_size`` Maximum size of generic segmentation offload ``gso_ipv4_max_size`` Maximum size of generic segmentation offload, for IPv4. ``gso_max_segs`` Maximum number of segments that can be passed to the NIC for GSO ``num_tc`` Number of traffic classes in the net device ``mtu`` Interface MTU value ``needed_headroom`` Extra headroom the hardware may need, but not in all cases can this be guaranteed ``tc_to_txq`` XXX: need comments on this one ``xps_maps`` XXX: need comments on this one ``nf_hooks_egress`` netfilter hooks executed for egress packets ``tcx_egress`` BPF & clsact qdisc specific data for egress processing ``{unnamed_union}`` anonymous ``lstats`` Loopback statistics: packets, bytes ``tstats`` Tunnel statistics: RX/TX packets, RX/TX bytes ``dstats`` Dummy statistics: RX/TX/drop packets, RX/TX bytes ``state`` Generic network queuing layer state, see netdev_state_t ``flags`` Interface flags (a la BSD) ``hard_header_len`` Maximum hardware header length. ``features`` Currently active device features ``ip6_ptr`` IPv6 specific data ``xdp_prog`` XDP sockets filter program pointer ``ptype_specific`` Device-specific, protocol-specific packet handlers ``ifindex`` interface index ``real_num_rx_queues`` Number of RX queues currently active in device ``_rx`` Array of RX queues ``gro_max_size`` Maximum size of aggregated packet in generic receive offload (GRO) ``gro_ipv4_max_size`` Maximum size of aggregated packet in generic receive offload (GRO), for IPv4. ``rx_handler`` handler for received packets ``rx_handler_data`` XXX: need comments on this one ``nd_net`` Network namespace this network device is inside protected by **lock** ``npinfo`` XXX: need comments on this one ``tcx_ingress`` BPF & clsact qdisc specific data for ingress processing ``name`` This is the first field of the "visible" part of this structure (i.e. as seen by users in the "Space.c" file). It is the name of the interface. ``name_node`` Name hashlist node ``ifalias`` SNMP alias ``mem_end`` Shared memory end ``mem_start`` Shared memory start ``base_addr`` Device I/O address ``dev_list`` The global list of network devices ``napi_list`` List entry used for polling NAPI devices ``unreg_list`` List entry when we are unregistering the device; see the function unregister_netdev ``close_list`` List entry used when we are closing the device ``ptype_all`` Device-specific packet handlers for all protocols ``adj_list`` Directly linked devices, like slaves for bonding ``xdp_features`` XDP capability supported by the device ``xdp_metadata_ops`` Includes pointers to XDP metadata callbacks. ``xsk_tx_metadata_ops`` Includes pointers to AF_XDP TX metadata callbacks. ``gflags`` Global flags ( kept as legacy ) ``needed_tailroom`` Extra tailroom the hardware may need, but not in all cases can this be guaranteed. Some cases also use LL_MAX_HEADER instead to allocate the skb ``hw_features`` User-changeable features ``wanted_features`` User-requested features ``vlan_features`` Mask of features inheritable by VLAN devices ``hw_enc_features`` Mask of features inherited by encapsulating devices This field indicates what encapsulation offloads the hardware is capable of doing, and drivers will need to set them appropriately. ``mpls_features`` Mask of features inheritable by MPLS ``mangleid_features`` Mask of features requiring MANGLEID, will be disabled together with the latter. ``min_mtu`` Interface Minimum MTU value ``max_mtu`` Interface Maximum MTU value ``type`` Interface hardware type ``min_header_len`` Minimum hardware header length ``name_assign_type`` network interface name assignment type ``group`` The group the device belongs to ``stats`` Statistics struct, which was left as a legacy, use rtnl_link_stats64 instead ``core_stats`` core networking counters, do not use this in drivers ``carrier_up_count`` Number of times the carrier has been up ``carrier_down_count`` Number of times the carrier has been down ``wireless_handlers`` List of functions to handle Wireless Extensions, instead of ioctl, see for details. ``ethtool_ops`` Management operations ``l3mdev_ops`` Layer 3 master device operations ``ndisc_ops`` Includes callbacks for different IPv6 neighbour discovery handling. Necessary for e.g. 6LoWPAN. ``xfrmdev_ops`` Transformation offload operations ``tlsdev_ops`` Transport Layer Security offload operations ``operstate`` RFC2863 operstate ``link_mode`` Mapping policy to operstate ``if_port`` Selectable AUI, TP, ... ``dma`` DMA channel ``perm_addr`` Permanent hw address ``addr_assign_type`` Hw address assignment type ``addr_len`` Hardware address length ``upper_level`` Maximum depth level of upper devices. ``lower_level`` Maximum depth level of lower devices. ``threaded`` napi threaded state. ``neigh_priv_len`` Used in neigh_alloc() ``dev_id`` Used to differentiate devices that share the same link layer address ``dev_port`` Used to differentiate devices that share the same function ``irq`` Device IRQ number ``priv_len`` Size of the ->priv flexible array ``addr_list_lock`` XXX: need comments on this one ``uc`` unicast mac addresses ``mc`` multicast mac addresses ``dev_addrs`` list of device hw addresses ``queues_kset`` Group of all Kobjects in the Tx and RX queues ``unlink_list`` As netif_addr_lock() can be called recursively, keep a list of interfaces to be deleted. ``promiscuity`` Number of times the NIC is told to work in promiscuous mode; if it becomes 0 the NIC will exit promiscuous mode ``allmulti`` Counter, enables or disables allmulticast mode ``uc_promisc`` Counter that indicates promiscuous mode has been enabled due to the need to listen to additional unicast addresses in a device that does not implement ndo_set_rx_mode() ``nested_level`` Used as a parameter of spin_lock_nested() of dev->addr_list_lock. ``ip_ptr`` IPv4 specific data ``fib_nh_head`` nexthops associated with this netdev ``vlan_info`` VLAN info ``dsa_ptr`` dsa specific data ``tipc_ptr`` TIPC specific data ``atalk_ptr`` AppleTalk link ``ax25_ptr`` AX.25 specific data ``ieee80211_ptr`` IEEE 802.11 specific data, assign before registering ``ieee802154_ptr`` IEEE 802.15.4 low-rate Wireless Personal Area Network device struct ``mpls_ptr`` mpls_dev struct pointer ``mctp_ptr`` MCTP specific data ``psp_dev`` PSP crypto device registered for this netdev ``dev_addr`` Hw address (before bcast, because most packets are unicast) ``num_rx_queues`` Number of RX queues allocated at register_netdev() time ``xdp_zc_max_segs`` Maximum number of segments supported by AF_XDP zero copy driver ``ingress_queue`` XXX: need comments on this one ``nf_hooks_ingress`` netfilter hooks executed for ingress packets ``broadcast`` hw bcast address ``rx_cpu_rmap`` CPU reverse-mapping for RX completion interrupts, indexed by RX queue number. Assigned by driver. This must only be set if the ndo_rx_flow_steer operation is defined ``index_hlist`` Device index hash chain ``num_tx_queues`` Number of TX queues allocated at alloc_netdev_mq() time ``qdisc`` Root qdisc from userspace point of view ``tx_queue_len`` Max frames per queue allowed ``tx_global_lock`` XXX: need comments on this one ``xdp_bulkq`` XDP device bulk queue ``qdisc_hash`` qdisc hash table ``watchdog_timer`` List of timers ``watchdog_timeo`` Represents the timeout that is used by the watchdog (see dev_watchdog()) ``proto_down_reason`` reason a netdev interface is held down ``todo_list`` Delayed register/unregister ``pcpu_refcnt`` Number of references to this device ``dev_refcnt`` Number of references to this device ``refcnt_tracker`` Tracker directory for tracked references to this device ``link_watch_list`` XXX: need comments on this one ``reg_state`` Register/unregister state machine ``dismantle`` Device is going to be freed ``moving_ns`` device is changing netns, protected by **lock** ``rtnl_link_initializing`` Device being created, suppress events ``needs_free_netdev`` Should unregister perform free_netdev? ``priv_destructor`` Called from unregister ``ml_priv`` Mid-layer private ``ml_priv_type`` Mid-layer private type ``pcpu_stat_type`` Type of device statistics which the core should allocate/free: none, lstats, tstats, dstats. none means the driver is handling statistics allocation/ freeing internally. ``garp_port`` GARP ``mrp_port`` MRP ``dm_private`` Drop monitor private ``dev`` Class/net/name entry ``sysfs_groups`` Space for optional device, statistics and wireless sysfs groups ``sysfs_rx_queue_group`` Space for optional per-rx queue attributes ``rtnl_link_ops`` Rtnl_link_ops ``stat_ops`` Optional ops for queue-aware statistics ``queue_mgmt_ops`` Optional ops for queue management ``tso_max_size`` Device (as in HW) limit on the max TSO request size ``tso_max_segs`` Device (as in HW) limit on the max TSO segment count ``dcbnl_ops`` Data Center Bridging netlink ops ``prio_tc_map`` XXX: need comments on this one ``fcoe_ddp_xid`` Max exchange id for FCoE LRO by ddp ``priomap`` XXX: need comments on this one ``link_topo`` Physical link topology tracking attached PHYs ``phydev`` Physical device may attach itself for hardware timestamping ``sfp_bus`` attached :c:type:`struct sfp_bus ` structure. ``qdisc_tx_busylock`` lockdep class annotating Qdisc->busylock spinlock ``proto_down`` protocol port state information can be sent to the switch driver and used to set the phys state of the switch port. ``irq_affinity_auto`` driver wants the core to store and re-assign the IRQ affinity. Set by netif_enable_irq_affinity(), then the driver must create a persistent napi by netif_napi_add_config() and finally bind the napi to IRQ (via netif_napi_set_irq()). ``rx_cpu_rmap_auto`` driver wants the core to manage the ARFS rmap. Set by calling netif_enable_cpu_rmap(). ``see_all_hwtstamp_requests`` device wants to see calls to ndo_hwtstamp_set() for all timestamp requests regardless of source, even if those aren't HWTSTAMP_SOURCE_NETDEV ``change_proto_down`` device supports setting carrier via IFLA_PROTO_DOWN ``netns_immutable`` interface can't change network namespaces ``fcoe_mtu`` device supports maximum FCoE MTU, 2158 bytes ``net_notifier_list`` List of per-net netdev notifier block that follow this device when it is moved to another network namespace. ``macsec_ops`` MACsec offloading ops ``udp_tunnel_nic_info`` static structure describing the UDP tunnel offload capabilities of the device ``udp_tunnel_nic`` UDP tunnel offload state ``cfg`` net_device queue-related configuration ``cfg_pending`` same as **cfg** but when device is being actively reconfigured includes any changes to the configuration requested by the user, but which may or may not be rejected. ``ethtool`` ethtool related state ``xdp_state`` stores info on attached XDP BPF programs ``dev_addr_shadow`` Copy of **dev_addr** to catch direct writes. ``linkwatch_dev_tracker`` refcount tracker used by linkwatch. ``watchdog_dev_tracker`` refcount tracker used by watchdog. ``dev_registered_tracker`` tracker for reference held while registered ``offload_xstats_l3`` L3 HW stats for this netdevice. ``devlink_port`` Pointer to related devlink port structure. Assigned by a driver before netdev registration using SET_NETDEV_DEVLINK_PORT macro. This pointer is static during the time netdevice is registered. ``dpll_pin`` Pointer to the SyncE source pin of a DPLL subsystem, where the clock is recovered. ``page_pools`` page pools created for this netdevice ``irq_moder`` dim parameters used if IS_ENABLED(CONFIG_DIMLIB). ``max_pacing_offload_horizon`` max EDT offload horizon in nsec. ``napi_config`` An array of napi_config structures containing per-NAPI settings. ``num_napi_configs`` number of allocated NAPI config structs, always >= max(num_rx_queues, num_tx_queues). ``napi_defer_hard_irqs`` If not zero, provides a counter that would allow to avoid NIC hard IRQ, on busy queues. ``gro_flush_timeout`` timeout for GRO layer in NAPI ``up`` copy of **state**'s IFF_UP, but safe to read with just **lock**. May report false negatives while the device is being opened or closed (**lock** does not protect .ndo_open, or .ndo_close). ``request_ops_lock`` request the core to run all **netdev_ops** and **ethtool_ops** under the **lock**. ``lock`` netdev-scope lock, protects a small selection of fields. Should always be taken using netdev_lock() / netdev_unlock() helpers. Drivers are free to use it for other protection. For the drivers that implement shaper or queue API, the scope of this lock is expanded to cover most ndo/queue/ethtool/sysfs operations. Drivers may opt-in to this behavior by setting **request_ops_lock**. **lock** protection mixes with rtnl_lock in multiple ways, fields are either: - simply protected by the instance **lock**; - double protected - writers hold both locks, readers hold either; - ops protected - protected by the lock held around the NDOs and other callbacks, that is the instance lock on devices for which netdev_need_ops_lock() returns true, otherwise by rtnl_lock; - double ops protected - always protected by rtnl_lock but for devices for which netdev_need_ops_lock() returns true - also the instance lock. Simply protects: **gro_flush_timeout**, **napi_defer_hard_irqs**, **napi_list**, **net_shaper_hierarchy**, **reg_state**, **threaded** Double protects: **up**, **moving_ns**, **nd_net**, **xdp_features** Double ops protects: **real_num_rx_queues**, **real_num_tx_queues** Also protects some fields in: struct napi_struct, struct netdev_queue, struct netdev_rx_queue Ordering: take after rtnl_lock. ``net_shaper_hierarchy`` data tracking the current shaper status see include/net/net_shapers.h ``neighbours`` List heads pointing to this device's neighbours' dev_list, one per address-family. ``hwprov`` Tracks which PTP performs hardware packet time stamping. ``priv`` Flexible array containing private datah](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubh:}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjJubjU)}(hX%struct net_device { unsigned long priv_flags:32; unsigned long lltx:1; unsigned long netmem_tx:1; const struct net_device_ops *netdev_ops; const struct header_ops *header_ops; struct netdev_queue *_tx; netdev_features_t gso_partial_features; unsigned int real_num_tx_queues; unsigned int gso_max_size; unsigned int gso_ipv4_max_size; u16 gso_max_segs; s16 num_tc; unsigned int mtu; unsigned short needed_headroom; struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; #ifdef CONFIG_XPS; struct xps_dev_maps *xps_maps[XPS_MAPS_MAX]; #endif; #ifdef CONFIG_NETFILTER_EGRESS; struct nf_hook_entries *nf_hooks_egress; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_egress; #endif; union { struct pcpu_lstats __percpu *lstats; struct pcpu_sw_netstats __percpu *tstats; struct pcpu_dstats __percpu *dstats; }; unsigned long state; unsigned int flags; unsigned short hard_header_len; netdev_features_t features; struct inet6_dev *ip6_ptr; struct bpf_prog *xdp_prog; struct list_head ptype_specific; int ifindex; unsigned int real_num_rx_queues; struct netdev_rx_queue *_rx; unsigned int gro_max_size; unsigned int gro_ipv4_max_size; rx_handler_func_t *rx_handler; void *rx_handler_data; possible_net_t nd_net; #ifdef CONFIG_NETPOLL; struct netpoll_info *npinfo; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_ingress; #endif; char name[IFNAMSIZ]; struct netdev_name_node *name_node; struct dev_ifalias *ifalias; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct list_head ptype_all; struct { struct list_head upper; struct list_head lower; } adj_list; xdp_features_t xdp_features; const struct xdp_metadata_ops *xdp_metadata_ops; const struct xsk_tx_metadata_ops *xsk_tx_metadata_ops; unsigned short gflags; unsigned short needed_tailroom; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; netdev_features_t mangleid_features; unsigned int min_mtu; unsigned int max_mtu; unsigned short type; unsigned char min_header_len; unsigned char name_assign_type; int group; struct net_device_stats stats; struct net_device_core_stats __percpu *core_stats; atomic_t carrier_up_count; atomic_t carrier_down_count; #ifdef CONFIG_WIRELESS_EXT; const struct iw_handler_def *wireless_handlers; #endif; const struct ethtool_ops *ethtool_ops; #ifdef CONFIG_NET_L3_MASTER_DEV; const struct l3mdev_ops *l3mdev_ops; #endif; #if IS_ENABLED(CONFIG_IPV6); const struct ndisc_ops *ndisc_ops; #endif; #ifdef CONFIG_XFRM_OFFLOAD; const struct xfrmdev_ops *xfrmdev_ops; #endif; #if IS_ENABLED(CONFIG_TLS_DEVICE); const struct tlsdev_ops *tlsdev_ops; #endif; unsigned int operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned char perm_addr[MAX_ADDR_LEN]; unsigned char addr_assign_type; unsigned char addr_len; unsigned char upper_level; unsigned char lower_level; u8 threaded; unsigned short neigh_priv_len; unsigned short dev_id; unsigned short dev_port; int irq; u32 priv_len; spinlock_t addr_list_lock; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; #ifdef CONFIG_SYSFS; struct kset *queues_kset; #endif; #ifdef CONFIG_LOCKDEP; struct list_head unlink_list; #endif; unsigned int promiscuity; unsigned int allmulti; bool uc_promisc; #ifdef CONFIG_LOCKDEP; unsigned char nested_level; #endif; struct in_device *ip_ptr; struct hlist_head fib_nh_head; #if IS_ENABLED(CONFIG_VLAN_8021Q); struct vlan_info *vlan_info; #endif; #if IS_ENABLED(CONFIG_NET_DSA); struct dsa_port *dsa_ptr; #endif; #if IS_ENABLED(CONFIG_TIPC); struct tipc_bearer *tipc_ptr; #endif; #if IS_ENABLED(CONFIG_ATALK); void *atalk_ptr; #endif; #if IS_ENABLED(CONFIG_AX25); struct ax25_dev *ax25_ptr; #endif; #if IS_ENABLED(CONFIG_CFG80211); struct wireless_dev *ieee80211_ptr; #endif; #if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN); struct wpan_dev *ieee802154_ptr; #endif; #if IS_ENABLED(CONFIG_MPLS_ROUTING); struct mpls_dev *mpls_ptr; #endif; #if IS_ENABLED(CONFIG_MCTP); struct mctp_dev *mctp_ptr; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_dev *psp_dev; #endif; const unsigned char *dev_addr; unsigned int num_rx_queues; #define GRO_LEGACY_MAX_SIZE 65536u; #define GRO_MAX_SIZE (8 * 65535u); unsigned int xdp_zc_max_segs; struct netdev_queue *ingress_queue; #ifdef CONFIG_NETFILTER_INGRESS; struct nf_hook_entries *nf_hooks_ingress; #endif; unsigned char broadcast[MAX_ADDR_LEN]; #ifdef CONFIG_RFS_ACCEL; struct cpu_rmap *rx_cpu_rmap; #endif; struct hlist_node index_hlist; unsigned int num_tx_queues; struct Qdisc *qdisc; unsigned int tx_queue_len; spinlock_t tx_global_lock; struct xdp_dev_bulk_queue __percpu *xdp_bulkq; #ifdef CONFIG_NET_SCHED; unsigned long qdisc_hash[1 << ((4) - 1)]; #endif; struct timer_list watchdog_timer; int watchdog_timeo; u32 proto_down_reason; struct list_head todo_list; #ifdef CONFIG_PCPU_DEV_REFCNT; int __percpu *pcpu_refcnt; #else; refcount_t dev_refcnt; #endif; struct ref_tracker_dir refcnt_tracker; struct list_head link_watch_list; u8 reg_state; bool dismantle; bool moving_ns; bool rtnl_link_initializing; bool needs_free_netdev; void (*priv_destructor)(struct net_device *dev); void *ml_priv; enum netdev_ml_priv_type ml_priv_type; enum netdev_stat_type pcpu_stat_type:8; #if IS_ENABLED(CONFIG_GARP); struct garp_port *garp_port; #endif; #if IS_ENABLED(CONFIG_MRP); struct mrp_port *mrp_port; #endif; #if IS_ENABLED(CONFIG_NET_DROP_MONITOR); struct dm_hw_stat_delta *dm_private; #endif; struct device dev; const struct attribute_group *sysfs_groups[5]; const struct attribute_group *sysfs_rx_queue_group; const struct rtnl_link_ops *rtnl_link_ops; const struct netdev_stat_ops *stat_ops; const struct netdev_queue_mgmt_ops *queue_mgmt_ops; #define GSO_MAX_SEGS 65535u; #define GSO_LEGACY_MAX_SIZE 65536u; #define GSO_MAX_SIZE (8 * GSO_MAX_SEGS); #define TSO_LEGACY_MAX_SIZE 65536; #define TSO_MAX_SIZE UINT_MAX; unsigned int tso_max_size; #define TSO_MAX_SEGS U16_MAX; u16 tso_max_segs; #ifdef CONFIG_DCB; const struct dcbnl_rtnl_ops *dcbnl_ops; #endif; u8 prio_tc_map[TC_BITMASK + 1]; #if IS_ENABLED(CONFIG_FCOE); unsigned int fcoe_ddp_xid; #endif; #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO); struct netprio_map *priomap; #endif; struct phy_link_topology *link_topo; struct phy_device *phydev; struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; bool proto_down; bool irq_affinity_auto; bool rx_cpu_rmap_auto; unsigned long see_all_hwtstamp_requests:1; unsigned long change_proto_down:1; unsigned long netns_immutable:1; unsigned long fcoe_mtu:1; struct list_head net_notifier_list; #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; const struct udp_tunnel_nic_info *udp_tunnel_nic_info; struct udp_tunnel_nic *udp_tunnel_nic; struct netdev_config *cfg; struct netdev_config *cfg_pending; struct ethtool_netdev_state *ethtool; struct bpf_xdp_entity xdp_state[__MAX_XDP_MODE]; u8 dev_addr_shadow[MAX_ADDR_LEN]; netdevice_tracker linkwatch_dev_tracker; netdevice_tracker watchdog_dev_tracker; netdevice_tracker dev_registered_tracker; struct rtnl_hw_stats64 *offload_xstats_l3; struct devlink_port *devlink_port; #if IS_ENABLED(CONFIG_DPLL); struct dpll_pin *dpll_pin; #endif; #if IS_ENABLED(CONFIG_PAGE_POOL); struct hlist_head page_pools; #endif; struct dim_irq_moder *irq_moder; u64 max_pacing_offload_horizon; struct napi_config *napi_config; u32 num_napi_configs; u32 napi_defer_hard_irqs; unsigned long gro_flush_timeout; bool up; bool request_ops_lock; struct mutex lock; #if IS_ENABLED(CONFIG_NET_SHAPER); struct net_shaper_hierarchy *net_shaper_hierarchy; #endif; struct hlist_head neighbours[NEIGH_NR_TABLES]; struct hwtstamp_provider *hwprov; u8 priv[] ; };h]hX%struct net_device { unsigned long priv_flags:32; unsigned long lltx:1; unsigned long netmem_tx:1; const struct net_device_ops *netdev_ops; const struct header_ops *header_ops; struct netdev_queue *_tx; netdev_features_t gso_partial_features; unsigned int real_num_tx_queues; unsigned int gso_max_size; unsigned int gso_ipv4_max_size; u16 gso_max_segs; s16 num_tc; unsigned int mtu; unsigned short needed_headroom; struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; #ifdef CONFIG_XPS; struct xps_dev_maps *xps_maps[XPS_MAPS_MAX]; #endif; #ifdef CONFIG_NETFILTER_EGRESS; struct nf_hook_entries *nf_hooks_egress; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_egress; #endif; union { struct pcpu_lstats __percpu *lstats; struct pcpu_sw_netstats __percpu *tstats; struct pcpu_dstats __percpu *dstats; }; unsigned long state; unsigned int flags; unsigned short hard_header_len; netdev_features_t features; struct inet6_dev *ip6_ptr; struct bpf_prog *xdp_prog; struct list_head ptype_specific; int ifindex; unsigned int real_num_rx_queues; struct netdev_rx_queue *_rx; unsigned int gro_max_size; unsigned int gro_ipv4_max_size; rx_handler_func_t *rx_handler; void *rx_handler_data; possible_net_t nd_net; #ifdef CONFIG_NETPOLL; struct netpoll_info *npinfo; #endif; #ifdef CONFIG_NET_XGRESS; struct bpf_mprog_entry *tcx_ingress; #endif; char name[IFNAMSIZ]; struct netdev_name_node *name_node; struct dev_ifalias *ifalias; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct list_head ptype_all; struct { struct list_head upper; struct list_head lower; } adj_list; xdp_features_t xdp_features; const struct xdp_metadata_ops *xdp_metadata_ops; const struct xsk_tx_metadata_ops *xsk_tx_metadata_ops; unsigned short gflags; unsigned short needed_tailroom; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; netdev_features_t mangleid_features; unsigned int min_mtu; unsigned int max_mtu; unsigned short type; unsigned char min_header_len; unsigned char name_assign_type; int group; struct net_device_stats stats; struct net_device_core_stats __percpu *core_stats; atomic_t carrier_up_count; atomic_t carrier_down_count; #ifdef CONFIG_WIRELESS_EXT; const struct iw_handler_def *wireless_handlers; #endif; const struct ethtool_ops *ethtool_ops; #ifdef CONFIG_NET_L3_MASTER_DEV; const struct l3mdev_ops *l3mdev_ops; #endif; #if IS_ENABLED(CONFIG_IPV6); const struct ndisc_ops *ndisc_ops; #endif; #ifdef CONFIG_XFRM_OFFLOAD; const struct xfrmdev_ops *xfrmdev_ops; #endif; #if IS_ENABLED(CONFIG_TLS_DEVICE); const struct tlsdev_ops *tlsdev_ops; #endif; unsigned int operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned char perm_addr[MAX_ADDR_LEN]; unsigned char addr_assign_type; unsigned char addr_len; unsigned char upper_level; unsigned char lower_level; u8 threaded; unsigned short neigh_priv_len; unsigned short dev_id; unsigned short dev_port; int irq; u32 priv_len; spinlock_t addr_list_lock; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; #ifdef CONFIG_SYSFS; struct kset *queues_kset; #endif; #ifdef CONFIG_LOCKDEP; struct list_head unlink_list; #endif; unsigned int promiscuity; unsigned int allmulti; bool uc_promisc; #ifdef CONFIG_LOCKDEP; unsigned char nested_level; #endif; struct in_device *ip_ptr; struct hlist_head fib_nh_head; #if IS_ENABLED(CONFIG_VLAN_8021Q); struct vlan_info *vlan_info; #endif; #if IS_ENABLED(CONFIG_NET_DSA); struct dsa_port *dsa_ptr; #endif; #if IS_ENABLED(CONFIG_TIPC); struct tipc_bearer *tipc_ptr; #endif; #if IS_ENABLED(CONFIG_ATALK); void *atalk_ptr; #endif; #if IS_ENABLED(CONFIG_AX25); struct ax25_dev *ax25_ptr; #endif; #if IS_ENABLED(CONFIG_CFG80211); struct wireless_dev *ieee80211_ptr; #endif; #if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN); struct wpan_dev *ieee802154_ptr; #endif; #if IS_ENABLED(CONFIG_MPLS_ROUTING); struct mpls_dev *mpls_ptr; #endif; #if IS_ENABLED(CONFIG_MCTP); struct mctp_dev *mctp_ptr; #endif; #if IS_ENABLED(CONFIG_INET_PSP); struct psp_dev *psp_dev; #endif; const unsigned char *dev_addr; unsigned int num_rx_queues; #define GRO_LEGACY_MAX_SIZE 65536u; #define GRO_MAX_SIZE (8 * 65535u); unsigned int xdp_zc_max_segs; struct netdev_queue *ingress_queue; #ifdef CONFIG_NETFILTER_INGRESS; struct nf_hook_entries *nf_hooks_ingress; #endif; unsigned char broadcast[MAX_ADDR_LEN]; #ifdef CONFIG_RFS_ACCEL; struct cpu_rmap *rx_cpu_rmap; #endif; struct hlist_node index_hlist; unsigned int num_tx_queues; struct Qdisc *qdisc; unsigned int tx_queue_len; spinlock_t tx_global_lock; struct xdp_dev_bulk_queue __percpu *xdp_bulkq; #ifdef CONFIG_NET_SCHED; unsigned long qdisc_hash[1 << ((4) - 1)]; #endif; struct timer_list watchdog_timer; int watchdog_timeo; u32 proto_down_reason; struct list_head todo_list; #ifdef CONFIG_PCPU_DEV_REFCNT; int __percpu *pcpu_refcnt; #else; refcount_t dev_refcnt; #endif; struct ref_tracker_dir refcnt_tracker; struct list_head link_watch_list; u8 reg_state; bool dismantle; bool moving_ns; bool rtnl_link_initializing; bool needs_free_netdev; void (*priv_destructor)(struct net_device *dev); void *ml_priv; enum netdev_ml_priv_type ml_priv_type; enum netdev_stat_type pcpu_stat_type:8; #if IS_ENABLED(CONFIG_GARP); struct garp_port *garp_port; #endif; #if IS_ENABLED(CONFIG_MRP); struct mrp_port *mrp_port; #endif; #if IS_ENABLED(CONFIG_NET_DROP_MONITOR); struct dm_hw_stat_delta *dm_private; #endif; struct device dev; const struct attribute_group *sysfs_groups[5]; const struct attribute_group *sysfs_rx_queue_group; const struct rtnl_link_ops *rtnl_link_ops; const struct netdev_stat_ops *stat_ops; const struct netdev_queue_mgmt_ops *queue_mgmt_ops; #define GSO_MAX_SEGS 65535u; #define GSO_LEGACY_MAX_SIZE 65536u; #define GSO_MAX_SIZE (8 * GSO_MAX_SEGS); #define TSO_LEGACY_MAX_SIZE 65536; #define TSO_MAX_SIZE UINT_MAX; unsigned int tso_max_size; #define TSO_MAX_SEGS U16_MAX; u16 tso_max_segs; #ifdef CONFIG_DCB; const struct dcbnl_rtnl_ops *dcbnl_ops; #endif; u8 prio_tc_map[TC_BITMASK + 1]; #if IS_ENABLED(CONFIG_FCOE); unsigned int fcoe_ddp_xid; #endif; #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO); struct netprio_map *priomap; #endif; struct phy_link_topology *link_topo; struct phy_device *phydev; struct sfp_bus *sfp_bus; struct lock_class_key *qdisc_tx_busylock; bool proto_down; bool irq_affinity_auto; bool rx_cpu_rmap_auto; unsigned long see_all_hwtstamp_requests:1; unsigned long change_proto_down:1; unsigned long netns_immutable:1; unsigned long fcoe_mtu:1; struct list_head net_notifier_list; #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; const struct udp_tunnel_nic_info *udp_tunnel_nic_info; struct udp_tunnel_nic *udp_tunnel_nic; struct netdev_config *cfg; struct netdev_config *cfg_pending; struct ethtool_netdev_state *ethtool; struct bpf_xdp_entity xdp_state[__MAX_XDP_MODE]; u8 dev_addr_shadow[MAX_ADDR_LEN]; netdevice_tracker linkwatch_dev_tracker; netdevice_tracker watchdog_dev_tracker; netdevice_tracker dev_registered_tracker; struct rtnl_hw_stats64 *offload_xstats_l3; struct devlink_port *devlink_port; #if IS_ENABLED(CONFIG_DPLL); struct dpll_pin *dpll_pin; #endif; #if IS_ENABLED(CONFIG_PAGE_POOL); struct hlist_head page_pools; #endif; struct dim_irq_moder *irq_moder; u64 max_pacing_offload_horizon; struct napi_config *napi_config; u32 num_napi_configs; u32 napi_defer_hard_irqs; unsigned long gro_flush_timeout; bool up; bool request_ops_lock; struct mutex lock; #if IS_ENABLED(CONFIG_NET_SHAPER); struct net_shaper_hierarchy *net_shaper_hierarchy; #endif; struct hlist_head neighbours[NEIGH_NR_TABLES]; struct hwtstamp_provider *hwprov; u8 priv[] ; };}hjksbah}(h]h ]h"]h$]h&]j<j=uh1jThZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjJubjX)}(h **Members**h]j)}(hj|h]hMembers}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM$hjJubj)}(hhh](j)}(hl``priv_flags`` flags invisible to userspace defined as bits, see enum netdev_priv_flags for the definitions h](j)}(h``priv_flags``h]j)}(hjh]h priv_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h\flags invisible to userspace defined as bits, see enum netdev_priv_flags for the definitionsh]h\flags invisible to userspace defined as bits, see enum netdev_priv_flags for the definitions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``lltx`` device supports lockless Tx. Deprecated for real HW drivers. Mainly used by logical interfaces, such as bonding and tunnels h](j)}(h``lltx``h]j)}(hjh]hlltx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h{device supports lockless Tx. Deprecated for real HW drivers. Mainly used by logical interfaces, such as bonding and tunnelsh]h{device supports lockless Tx. Deprecated for real HW drivers. Mainly used by logical interfaces, such as bonding and tunnels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``netmem_tx`` device support netmem_tx. h](j)}(h ``netmem_tx``h]j)}(hjh]h netmem_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj ubj)}(hhh]jX)}(hdevice support netmem_tx.h]hdevice support netmem_tx.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhjubj)}(hf``netdev_ops`` Includes several pointers to callbacks, if one wants to override the ndo_*() functions h](j)}(h``netdev_ops``h]j)}(hjHh]h netdev_ops}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM>hjBubj)}(hhh]jX)}(hVIncludes several pointers to callbacks, if one wants to override the ndo_*() functionsh]hVIncludes several pointers to callbacks, if one wants to override the ndo_*() functions}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM=hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hM>hjubj)}(hW``header_ops`` Includes callbacks for creating,parsing,caching,etc of Layer 2 headers. h](j)}(h``header_ops``h]j)}(hjh]h header_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMHhj|ubj)}(hhh]jX)}(hGIncludes callbacks for creating,parsing,caching,etc of Layer 2 headers.h]hGIncludes callbacks for creating,parsing,caching,etc of Layer 2 headers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMGhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMHhjubj)}(h``_tx`` Array of TX queues h](j)}(h``_tx``h]j)}(hjh]h_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hArray of TX queuesh]hArray of TX queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``gso_partial_features`` value(s) from NETIF_F_GSO\* h](j)}(h``gso_partial_features``h]j)}(hjh]hgso_partial_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM*hjubj)}(hhh]jX)}(hvalue(s) from NETIF_F_GSO\*h]hvalue(s) from NETIF_F_GSO*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM*hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM*hjubj)}(hF``real_num_tx_queues`` Number of TX queues currently active in device h](j)}(h``real_num_tx_queues``h]j)}(hj.h]hreal_num_tx_queues}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj(ubj)}(hhh]jX)}(h.Number of TX queues currently active in deviceh]h.Number of TX queues currently active in device}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubj)}(h>``gso_max_size`` Maximum size of generic segmentation offload h](j)}(h``gso_max_size``h]j)}(hjgh]h gso_max_size}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjaubj)}(hhh]jX)}(h,Maximum size of generic segmentation offloadh]h,Maximum size of generic segmentation offload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjubj)}(hN``gso_ipv4_max_size`` Maximum size of generic segmentation offload, for IPv4. h](j)}(h``gso_ipv4_max_size``h]j)}(hjh]hgso_ipv4_max_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h7Maximum size of generic segmentation offload, for IPv4.h]h7Maximum size of generic segmentation offload, for IPv4.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hR``gso_max_segs`` Maximum number of segments that can be passed to the NIC for GSO h](j)}(h``gso_max_segs``h]j)}(hjh]h gso_max_segs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h@Maximum number of segments that can be passed to the NIC for GSOh]h@Maximum number of segments that can be passed to the NIC for GSO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``num_tc`` Number of traffic classes in the net device h](j)}(h ``num_tc``h]j)}(hjh]hnum_tc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h+Number of traffic classes in the net deviceh]h+Number of traffic classes in the net device}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjubj)}(h``mtu`` Interface MTU value h](j)}(h``mtu``h]j)}(hjMh]hmtu}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMShjGubj)}(hhh]jX)}(hInterface MTU valueh]hInterface MTU value}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMShjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMShjubj)}(hf``needed_headroom`` Extra headroom the hardware may need, but not in all cases can this be guaranteed h](j)}(h``needed_headroom``h]j)}(hjh]hneeded_headroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM[hjubj)}(hhh]jX)}(hQExtra headroom the hardware may need, but not in all cases can this be guaranteedh]hQExtra headroom the hardware may need, but not in all cases can this be guaranteed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(h-``tc_to_txq`` XXX: need comments on this one h](j)}(h ``tc_to_txq``h]j)}(hjh]h tc_to_txq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``xps_maps`` XXX: need comments on this one h](j)}(h ``xps_maps``h]j)}(hjh]hxps_maps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h@``nf_hooks_egress`` netfilter hooks executed for egress packets h](j)}(h``nf_hooks_egress``h]j)}(hj2h]hnf_hooks_egress}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj,ubj)}(hhh]jX)}(h+netfilter hooks executed for egress packetsh]h+netfilter hooks executed for egress packets}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjubj)}(hF``tcx_egress`` BPF & clsact qdisc specific data for egress processing h](j)}(h``tcx_egress``h]j)}(hjkh]h tcx_egress}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjeubj)}(hhh]jX)}(h6BPF & clsact qdisc specific data for egress processingh]h6BPF & clsact qdisc specific data for egress processing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhKhjubj)}(hhh]jX)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h/``lstats`` Loopback statistics: packets, bytes h](j)}(h ``lstats``h]j)}(hjh]hlstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h#Loopback statistics: packets, bytesh]h#Loopback statistics: packets, bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``tstats`` Tunnel statistics: RX/TX packets, RX/TX bytes h](j)}(h ``tstats``h]j)}(hjh]htstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h-Tunnel statistics: RX/TX packets, RX/TX bytesh]h-Tunnel statistics: RX/TX packets, RX/TX bytes}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjubj)}(h=``dstats`` Dummy statistics: RX/TX/drop packets, RX/TX bytes h](j)}(h ``dstats``h]j)}(hjOh]hdstats}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjIubj)}(hhh]jX)}(h1Dummy statistics: RX/TX/drop packets, RX/TX bytesh]h1Dummy statistics: RX/TX/drop packets, RX/TX bytes}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjubj)}(hB``state`` Generic network queuing layer state, see netdev_state_t h](j)}(h ``state``h]j)}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h7Generic network queuing layer state, see netdev_state_th]h7Generic network queuing layer state, see netdev_state_t}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``flags`` Interface flags (a la BSD) h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMJhjubj)}(hhh]jX)}(hInterface flags (a la BSD)h]hInterface flags (a la BSD)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubj)}(h4``hard_header_len`` Maximum hardware header length. h](j)}(h``hard_header_len``h]j)}(hjh]hhard_header_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMWhjubj)}(hhh]jX)}(hMaximum hardware header length.h]hMaximum hardware header length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubj)}(h.``features`` Currently active device features h](j)}(h ``features``h]j)}(hj3h]hfeatures}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj-ubj)}(hhh]jX)}(h Currently active device featuresh]h Currently active device features}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjubj)}(h``ip6_ptr`` IPv6 specific data h](j)}(h ``ip6_ptr``h]j)}(hjlh]hip6_ptr}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjfubj)}(hhh]jX)}(hIPv6 specific datah]hIPv6 specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``xdp_prog`` XDP sockets filter program pointer h](j)}(h ``xdp_prog``h]j)}(hjh]hxdp_prog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h"XDP sockets filter program pointerh]h"XDP sockets filter program pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hF``ptype_specific`` Device-specific, protocol-specific packet handlers h](j)}(h``ptype_specific``h]j)}(hjh]hptype_specific}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h2Device-specific, protocol-specific packet handlersh]h2Device-specific, protocol-specific packet handlers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``ifindex`` interface index h](j)}(h ``ifindex``h]j)}(hjh]hifindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM.hjubj)}(hhh]jX)}(hinterface indexh]hinterface index}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hM.hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM.hjubj)}(hF``real_num_rx_queues`` Number of RX queues currently active in device h](j)}(h``real_num_rx_queues``h]j)}(hjPh]hreal_num_rx_queues}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjJubj)}(hhh]jX)}(h.Number of RX queues currently active in deviceh]h.Number of RX queues currently active in device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubj)}(h``_rx`` Array of RX queues h](j)}(h``_rx``h]j)}(hjh]h_rx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hArray of RX queuesh]hArray of RX queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hT``gro_max_size`` Maximum size of aggregated packet in generic receive offload (GRO) h](j)}(h``gro_max_size``h]j)}(hjh]h gro_max_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hBMaximum size of aggregated packet in generic receive offload (GRO)h]hBMaximum size of aggregated packet in generic receive offload (GRO)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hd``gro_ipv4_max_size`` Maximum size of aggregated packet in generic receive offload (GRO), for IPv4. h](j)}(h``gro_ipv4_max_size``h]j)}(hjh]hgro_ipv4_max_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMMaximum size of aggregated packet in generic receive offload (GRO), for IPv4.h]hMMaximum size of aggregated packet in generic receive offload (GRO), for IPv4.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``rx_handler`` handler for received packets h](j)}(h``rx_handler``h]j)}(hj6h]h rx_handler}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj0ubj)}(hhh]jX)}(hhandler for received packetsh]hhandler for received packets}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjubj)}(h3``rx_handler_data`` XXX: need comments on this one h](j)}(h``rx_handler_data``h]j)}(hjoh]hrx_handler_data}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjiubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hQ``nd_net`` Network namespace this network device is inside protected by **lock** h](j)}(h ``nd_net``h]j)}(hjh]hnd_net}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hENetwork namespace this network device is inside protected by **lock**h](h=Network namespace this network device is inside protected by }(hjhhhNhNubj)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``npinfo`` XXX: need comments on this one h](j)}(h ``npinfo``h]j)}(hjh]hnpinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``tcx_ingress`` BPF & clsact qdisc specific data for ingress processing h](j)}(h``tcx_ingress``h]j)}(hj)h]h tcx_ingress}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj#ubj)}(hhh]jX)}(h7BPF & clsact qdisc specific data for ingress processingh]h7BPF & clsact qdisc specific data for ingress processing}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubj)}(h``name`` This is the first field of the "visible" part of this structure (i.e. as seen by users in the "Space.c" file). It is the name of the interface. h](j)}(h``name``h]j)}(hjbh]hname}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj\ubj)}(hhh]jX)}(hThis is the first field of the "visible" part of this structure (i.e. as seen by users in the "Space.c" file). It is the name of the interface.h]hThis is the first field of the “visible” part of this structure (i.e. as seen by users in the “Space.c” file). It is the name of the interface.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhM hjubj)}(h!``name_node`` Name hashlist node h](j)}(h ``name_node``h]j)}(hjh]h name_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hName hashlist nodeh]hName hashlist node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``ifalias`` SNMP alias h](j)}(h ``ifalias``h]j)}(hjh]hifalias}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h SNMP aliash]h SNMP alias}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``mem_end`` Shared memory end h](j)}(h ``mem_end``h]j)}(hjh]hmem_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hShared memory endh]hShared memory end}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h"``mem_start`` Shared memory start h](j)}(h ``mem_start``h]j)}(hjGh]h mem_start}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjAubj)}(hhh]jX)}(hShared memory starth]hShared memory start}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubj)}(h!``base_addr`` Device I/O address h](j)}(h ``base_addr``h]j)}(hjh]h base_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjzubj)}(hhh]jX)}(hDevice I/O addressh]hDevice I/O address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``dev_list`` The global list of network devices h](j)}(h ``dev_list``h]j)}(hjh]hdev_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h"The global list of network devicesh]h"The global list of network devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``napi_list`` List entry used for polling NAPI devices h](j)}(h ``napi_list``h]j)}(hjh]h napi_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h(List entry used for polling NAPI devicesh]h(List entry used for polling NAPI devices}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hd``unreg_list`` List entry when we are unregistering the device; see the function unregister_netdev h](j)}(h``unreg_list``h]j)}(hj+h]h unreg_list}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj%ubj)}(hhh]jX)}(hTList entry when we are unregistering the device; see the function unregister_netdevh]hTList entry when we are unregistering the device; see the function unregister_netdev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjubj)}(h>``close_list`` List entry used when we are closing the device h](j)}(h``close_list``h]j)}(hjeh]h close_list}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj_ubj)}(hhh]jX)}(h.List entry used when we are closing the deviceh]h.List entry used when we are closing the device}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubj)}(h@``ptype_all`` Device-specific packet handlers for all protocols h](j)}(h ``ptype_all``h]j)}(hjh]h ptype_all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h1Device-specific packet handlers for all protocolsh]h1Device-specific packet handlers for all protocols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``adj_list`` Directly linked devices, like slaves for bonding h](j)}(h ``adj_list``h]j)}(hjh]hadj_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h0Directly linked devices, like slaves for bondingh]h0Directly linked devices, like slaves for bonding}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h8``xdp_features`` XDP capability supported by the device h](j)}(h``xdp_features``h]j)}(hjh]h xdp_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMKhj ubj)}(hhh]jX)}(h&XDP capability supported by the deviceh]h&XDP capability supported by the device}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMKhjubj)}(hB``xdp_metadata_ops`` Includes pointers to XDP metadata callbacks. h](j)}(h``xdp_metadata_ops``h]j)}(hjIh]hxdp_metadata_ops}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM?hjCubj)}(hhh]jX)}(h,Includes pointers to XDP metadata callbacks.h]h,Includes pointers to XDP metadata callbacks.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hM?hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hM?hjubj)}(hK``xsk_tx_metadata_ops`` Includes pointers to AF_XDP TX metadata callbacks. h](j)}(h``xsk_tx_metadata_ops``h]j)}(hjh]hxsk_tx_metadata_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM@hj|ubj)}(hhh]jX)}(h2Includes pointers to AF_XDP TX metadata callbacks.h]h2Includes pointers to AF_XDP TX metadata callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(h+``gflags`` Global flags ( kept as legacy ) h](j)}(h ``gflags``h]j)}(hjh]hgflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMLhjubj)}(hhh]jX)}(hGlobal flags ( kept as legacy )h]hGlobal flags ( kept as legacy )}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h``needed_tailroom`` Extra tailroom the hardware may need, but not in all cases can this be guaranteed. Some cases also use LL_MAX_HEADER instead to allocate the skb h](j)}(h``needed_tailroom``h]j)}(hjh]hneeded_tailroom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^hjubj)}(hhh]jX)}(hExtra tailroom the hardware may need, but not in all cases can this be guaranteed. Some cases also use LL_MAX_HEADER instead to allocate the skbh]hExtra tailroom the hardware may need, but not in all cases can this be guaranteed. Some cases also use LL_MAX_HEADER instead to allocate the skb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM\hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM^hjubj)}(h)``hw_features`` User-changeable features h](j)}(h``hw_features``h]j)}(hj.h]h hw_features}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj(ubj)}(hhh]jX)}(hUser-changeable featuresh]hUser-changeable features}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjubj)}(h,``wanted_features`` User-requested features h](j)}(h``wanted_features``h]j)}(hjgh]hwanted_features}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM!hjaubj)}(hhh]jX)}(hUser-requested featuresh]hUser-requested features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hM!hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM!hjubj)}(h?``vlan_features`` Mask of features inheritable by VLAN devices h](j)}(h``vlan_features``h]j)}(hjh]h vlan_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM"hjubj)}(hhh]jX)}(h,Mask of features inheritable by VLAN devicesh]h,Mask of features inheritable by VLAN devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h``hw_enc_features`` Mask of features inherited by encapsulating devices This field indicates what encapsulation offloads the hardware is capable of doing, and drivers will need to set them appropriately. h](j)}(h``hw_enc_features``h]j)}(hjh]hhw_enc_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM'hjubj)}(hhh]jX)}(hMask of features inherited by encapsulating devices This field indicates what encapsulation offloads the hardware is capable of doing, and drivers will need to set them appropriately.h]hMask of features inherited by encapsulating devices This field indicates what encapsulation offloads the hardware is capable of doing, and drivers will need to set them appropriately.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(h7``mpls_features`` Mask of features inheritable by MPLS h](j)}(h``mpls_features``h]j)}(hjh]h mpls_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM)hj ubj)}(hhh]jX)}(h$Mask of features inheritable by MPLSh]h$Mask of features inheritable by MPLS}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hM)hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hM)hjubj)}(hf``mangleid_features`` Mask of features requiring MANGLEID, will be disabled together with the latter. h](j)}(h``mangleid_features``h]j)}(hjLh]hmangleid_features}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM,hjFubj)}(hhh]jX)}(hOMask of features requiring MANGLEID, will be disabled together with the latter.h]hOMask of features requiring MANGLEID, will be disabled together with the latter.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM+hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM,hjubj)}(h(``min_mtu`` Interface Minimum MTU value h](j)}(h ``min_mtu``h]j)}(hjh]hmin_mtu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMThjubj)}(hhh]jX)}(hInterface Minimum MTU valueh]hInterface Minimum MTU value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h(``max_mtu`` Interface Maximum MTU value h](j)}(h ``max_mtu``h]j)}(hjh]hmax_mtu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMUhjubj)}(hhh]jX)}(hInterface Maximum MTU valueh]hInterface Maximum MTU value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(h!``type`` Interface hardware type h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMVhjubj)}(hhh]jX)}(hInterface hardware typeh]hInterface hardware type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMVhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMVhjubj)}(h2``min_header_len`` Minimum hardware header length h](j)}(h``min_header_len``h]j)}(hj1h]hmin_header_len}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMXhj+ubj)}(hhh]jX)}(hMinimum hardware header lengthh]hMinimum hardware header length}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMXhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMXhjubj)}(h<``name_assign_type`` network interface name assignment type h](j)}(h``name_assign_type``h]j)}(hjjh]hname_assign_type}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMnhjdubj)}(hhh]jX)}(h&network interface name assignment typeh]h&network interface name assignment type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubj)}(h*``group`` The group the device belongs to h](j)}(h ``group``h]j)}(hjh]hgroup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM/hjubj)}(hhh]jX)}(hThe group the device belongs toh]hThe group the device belongs to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(hW``stats`` Statistics struct, which was left as a legacy, use rtnl_link_stats64 instead h](j)}(h ``stats``h]j)}(hjh]hstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2hjubj)}(hhh]jX)}(hLStatistics struct, which was left as a legacy, use rtnl_link_stats64 insteadh]hLStatistics struct, which was left as a legacy, use rtnl_link_stats64 instead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubj)}(hD``core_stats`` core networking counters, do not use this in drivers h](j)}(h``core_stats``h]j)}(hjh]h core_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM5hjubj)}(hhh]jX)}(h4core networking counters, do not use this in driversh]h4core networking counters, do not use this in drivers}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM5hjubj)}(h=``carrier_up_count`` Number of times the carrier has been up h](j)}(h``carrier_up_count``h]j)}(hjPh]hcarrier_up_count}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM6hjJubj)}(hhh]jX)}(h'Number of times the carrier has been uph]h'Number of times the carrier has been up}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM6hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM6hjubj)}(hA``carrier_down_count`` Number of times the carrier has been down h](j)}(h``carrier_down_count``h]j)}(hjh]hcarrier_down_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM7hjubj)}(hhh]jX)}(h)Number of times the carrier has been downh]h)Number of times the carrier has been down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM7hjubj)}(h}``wireless_handlers`` List of functions to handle Wireless Extensions, instead of ioctl, see for details. h](j)}(h``wireless_handlers``h]j)}(hjh]hwireless_handlers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM;hjubj)}(hhh]jX)}(hfList of functions to handle Wireless Extensions, instead of ioctl, see for details.h]hfList of functions to handle Wireless Extensions, instead of ioctl, see for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubj)}(h&``ethtool_ops`` Management operations h](j)}(h``ethtool_ops``h]j)}(hjh]h ethtool_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMAhjubj)}(hhh]jX)}(hManagement operationsh]hManagement operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMAhjubj)}(h0``l3mdev_ops`` Layer 3 master device operations h](j)}(h``l3mdev_ops``h]j)}(hj5h]h l3mdev_ops}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMBhj/ubj)}(hhh]jX)}(h Layer 3 master device operationsh]h Layer 3 master device operations}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMBhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMBhjubj)}(hn``ndisc_ops`` Includes callbacks for different IPv6 neighbour discovery handling. Necessary for e.g. 6LoWPAN. h](j)}(h ``ndisc_ops``h]j)}(hjnh]h ndisc_ops}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMDhjhubj)}(hhh]jX)}(h_Includes callbacks for different IPv6 neighbour discovery handling. Necessary for e.g. 6LoWPAN.h]h_Includes callbacks for different IPv6 neighbour discovery handling. Necessary for e.g. 6LoWPAN.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMChjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubj)}(h2``xfrmdev_ops`` Transformation offload operations h](j)}(h``xfrmdev_ops``h]j)}(hjh]h xfrmdev_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMEhjubj)}(hhh]jX)}(h!Transformation offload operationsh]h!Transformation offload operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjubj)}(h;``tlsdev_ops`` Transport Layer Security offload operations h](j)}(h``tlsdev_ops``h]j)}(hjh]h tlsdev_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMFhjubj)}(hhh]jX)}(h+Transport Layer Security offload operationsh]h+Transport Layer Security offload operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubj)}(h ``operstate`` RFC2863 operstate h](j)}(h ``operstate``h]j)}(hjh]h operstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMOhjubj)}(hhh]jX)}(hRFC2863 operstateh]hRFC2863 operstate}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMOhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMOhjubj)}(h*``link_mode`` Mapping policy to operstate h](j)}(h ``link_mode``h]j)}(hjSh]h link_mode}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMPhjMubj)}(hhh]jX)}(hMapping policy to operstateh]hMapping policy to operstate}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMPhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMPhjubj)}(h$``if_port`` Selectable AUI, TP, ... h](j)}(h ``if_port``h]j)}(hjh]hif_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMQhjubj)}(hhh]jX)}(hSelectable AUI, TP, ...h]hSelectable AUI, TP, ...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(h``dma`` DMA channel h](j)}(h``dma``h]j)}(hjh]hdma}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMRhjubj)}(hhh]jX)}(h DMA channelh]h DMA channel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjubj)}(h#``perm_addr`` Permanent hw address h](j)}(h ``perm_addr``h]j)}(hjh]h perm_addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMbhjubj)}(hhh]jX)}(hPermanent hw addressh]hPermanent hw address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(h0``addr_assign_type`` Hw address assignment type h](j)}(h``addr_assign_type``h]j)}(hj7h]haddr_assign_type}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMchj1ubj)}(hhh]jX)}(hHw address assignment typeh]hHw address assignment type}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjLhMchjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMchjubj)}(h%``addr_len`` Hardware address length h](j)}(h ``addr_len``h]j)}(hjph]haddr_len}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMdhjjubj)}(hhh]jX)}(hHardware address lengthh]hHardware address length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h6``upper_level`` Maximum depth level of upper devices. h](j)}(h``upper_level``h]j)}(hjh]h upper_level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMehjubj)}(hhh]jX)}(h%Maximum depth level of upper devices.h]h%Maximum depth level of upper devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(h6``lower_level`` Maximum depth level of lower devices. h](j)}(h``lower_level``h]j)}(hjh]h lower_level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMfhjubj)}(hhh]jX)}(h%Maximum depth level of lower devices.h]h%Maximum depth level of lower devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h"``threaded`` napi threaded state. h](j)}(h ``threaded``h]j)}(hjh]hthreaded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMghjubj)}(hhh]jX)}(hnapi threaded state.h]hnapi threaded state.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hMghj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMghjubj)}(h)``neigh_priv_len`` Used in neigh_alloc() h](j)}(h``neigh_priv_len``h]j)}(hjTh]hneigh_priv_len}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhhjNubj)}(hhh]jX)}(hUsed in neigh_alloc()h]hUsed in neigh_alloc()}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMhhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhhjubj)}(hP``dev_id`` Used to differentiate devices that share the same link layer address h](j)}(h ``dev_id``h]j)}(hjh]hdev_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMjhjubj)}(hhh]jX)}(hDUsed to differentiate devices that share the same link layer addressh]hDUsed to differentiate devices that share the same link layer address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubj)}(hH``dev_port`` Used to differentiate devices that share the same function h](j)}(h ``dev_port``h]j)}(hjh]hdev_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMlhjubj)}(hhh]jX)}(h:Used to differentiate devices that share the same functionh]h:Used to differentiate devices that share the same function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjubj)}(h``irq`` Device IRQ number h](j)}(h``irq``h]j)}(hjh]hirq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hDevice IRQ numberh]hDevice IRQ number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``priv_len`` Size of the ->priv flexible array h](j)}(h ``priv_len``h]j)}(hj:h]hpriv_len}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMMhj4ubj)}(hhh]jX)}(h!Size of the ->priv flexible arrayh]h!Size of the ->priv flexible array}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMMhjubj)}(h2``addr_list_lock`` XXX: need comments on this one h](j)}(h``addr_list_lock``h]j)}(hjsh]haddr_list_lock}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMmhjmubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(h``uc`` unicast mac addresses h](j)}(h``uc``h]j)}(hjh]huc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMshjubj)}(hhh]jX)}(hunicast mac addressesh]hunicast mac addresses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h``mc`` multicast mac addresses h](j)}(h``mc``h]j)}(hjh]hmc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMthjubj)}(hhh]jX)}(hmulticast mac addressesh]hmulticast mac addresses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h*``dev_addrs`` list of device hw addresses h](j)}(h ``dev_addrs``h]j)}(hjh]h dev_addrs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMuhjubj)}(hhh]jX)}(hlist of device hw addressesh]hlist of device hw addresses}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hMuhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMuhjubj)}(h>``queues_kset`` Group of all Kobjects in the Tx and RX queues h](j)}(h``queues_kset``h]j)}(hjWh]h queues_kset}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMvhjQubj)}(hhh]jX)}(h-Group of all Kobjects in the Tx and RX queuesh]h-Group of all Kobjects in the Tx and RX queues}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMvhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMvhjubj)}(hi``unlink_list`` As netif_addr_lock() can be called recursively, keep a list of interfaces to be deleted. h](j)}(h``unlink_list``h]j)}(hjh]h unlink_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXAs netif_addr_lock() can be called recursively, keep a list of interfaces to be deleted.h]hXAs netif_addr_lock() can be called recursively, keep a list of interfaces to be deleted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``promiscuity`` Number of times the NIC is told to work in promiscuous mode; if it becomes 0 the NIC will exit promiscuous mode h](j)}(h``promiscuity``h]j)}(hjh]h promiscuity}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMyhjubj)}(hhh]jX)}(hoNumber of times the NIC is told to work in promiscuous mode; if it becomes 0 the NIC will exit promiscuous modeh]hoNumber of times the NIC is told to work in promiscuous mode; if it becomes 0 the NIC will exit promiscuous mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(h<``allmulti`` Counter, enables or disables allmulticast mode h](j)}(h ``allmulti``h]j)}(hjh]hallmulti}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMzhjubj)}(hhh]jX)}(h.Counter, enables or disables allmulticast modeh]h.Counter, enables or disables allmulticast mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(h``uc_promisc`` Counter that indicates promiscuous mode has been enabled due to the need to listen to additional unicast addresses in a device that does not implement ndo_set_rx_mode() h](j)}(h``uc_promisc``h]j)}(hj=h]h uc_promisc}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMrhj7ubj)}(hhh]jX)}(hCounter that indicates promiscuous mode has been enabled due to the need to listen to additional unicast addresses in a device that does not implement ndo_set_rx_mode()h]hCounter that indicates promiscuous mode has been enabled due to the need to listen to additional unicast addresses in a device that does not implement ndo_set_rx_mode()}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMohjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMrhjubj)}(hS``nested_level`` Used as a parameter of spin_lock_nested() of dev->addr_list_lock. h](j)}(h``nested_level``h]j)}(hjwh]h nested_level}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjqubj)}(hhh]jX)}(hAUsed as a parameter of spin_lock_nested() of dev->addr_list_lock.h]hAUsed as a parameter of spin_lock_nested() of dev->addr_list_lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``ip_ptr`` IPv4 specific data h](j)}(h ``ip_ptr``h]j)}(hjh]hip_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hIPv4 specific datah]hIPv4 specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``fib_nh_head`` nexthops associated with this netdev h](j)}(h``fib_nh_head``h]j)}(hjh]h fib_nh_head}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h$nexthops associated with this netdevh]h$nexthops associated with this netdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h``vlan_info`` VLAN info h](j)}(h ``vlan_info``h]j)}(hj#h]h vlan_info}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM|hjubj)}(hhh]jX)}(h VLAN infoh]h VLAN info}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hM|hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM|hjubj)}(h``dsa_ptr`` dsa specific data h](j)}(h ``dsa_ptr``h]j)}(hj\h]hdsa_ptr}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM}hjVubj)}(hhh]jX)}(hdsa specific datah]hdsa specific data}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhM}hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM}hjubj)}(h ``tipc_ptr`` TIPC specific data h](j)}(h ``tipc_ptr``h]j)}(hjh]htipc_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM~hjubj)}(hhh]jX)}(hTIPC specific datah]hTIPC specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubj)}(h``atalk_ptr`` AppleTalk link h](j)}(h ``atalk_ptr``h]j)}(hjh]h atalk_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hAppleTalk linkh]hAppleTalk link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``ax25_ptr`` AX.25 specific data h](j)}(h ``ax25_ptr``h]j)}(hjh]hax25_ptr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hAX.25 specific datah]hAX.25 specific data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``ieee80211_ptr`` IEEE 802.11 specific data, assign before registering h](j)}(h``ieee80211_ptr``h]j)}(hj@h]h ieee80211_ptr}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj:ubj)}(hhh]jX)}(h4IEEE 802.11 specific data, assign before registeringh]h4IEEE 802.11 specific data, assign before registering}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhjubj)}(hW``ieee802154_ptr`` IEEE 802.15.4 low-rate Wireless Personal Area Network device struct h](j)}(h``ieee802154_ptr``h]j)}(hjyh]hieee802154_ptr}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjsubj)}(hhh]jX)}(hCIEEE 802.15.4 low-rate Wireless Personal Area Network device structh]hCIEEE 802.15.4 low-rate Wireless Personal Area Network device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``mpls_ptr`` mpls_dev struct pointer h](j)}(h ``mpls_ptr``h]j)}(hjh]hmpls_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hmpls_dev struct pointerh]hmpls_dev struct pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``mctp_ptr`` MCTP specific data h](j)}(h ``mctp_ptr``h]j)}(hjh]hmctp_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMCTP specific datah]hMCTP specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h9``psp_dev`` PSP crypto device registered for this netdev h](j)}(h ``psp_dev``h]j)}(hj%h]hpsp_dev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h,PSP crypto device registered for this netdevh]h,PSP crypto device registered for this netdev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(hI``dev_addr`` Hw address (before bcast, because most packets are unicast) h](j)}(h ``dev_addr``h]j)}(hj^h]hdev_addr}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjXubj)}(hhh]jX)}(h;Hw address (before bcast, because most packets are unicast)h]h;Hw address (before bcast, because most packets are unicast)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(hJ``num_rx_queues`` Number of RX queues allocated at register_netdev() time h](j)}(h``num_rx_queues``h]j)}(hjh]h num_rx_queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h7Number of RX queues allocated at register_netdev() timeh]h7Number of RX queues allocated at register_netdev() time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hT``xdp_zc_max_segs`` Maximum number of segments supported by AF_XDP zero copy driver h](j)}(h``xdp_zc_max_segs``h]j)}(hjh]hxdp_zc_max_segs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h?Maximum number of segments supported by AF_XDP zero copy driverh]h?Maximum number of segments supported by AF_XDP zero copy driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``ingress_queue`` XXX: need comments on this one h](j)}(h``ingress_queue``h]j)}(hj h]h ingress_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubj)}(hB``nf_hooks_ingress`` netfilter hooks executed for ingress packets h](j)}(h``nf_hooks_ingress``h]j)}(hjEh]hnf_hooks_ingress}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj?ubj)}(hhh]jX)}(h,netfilter hooks executed for ingress packetsh]h,netfilter hooks executed for ingress packets}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjubj)}(h``broadcast`` hw bcast address h](j)}(h ``broadcast``h]j)}(hj~h]h broadcast}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjxubj)}(hhh]jX)}(hhw bcast addressh]hhw bcast address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``rx_cpu_rmap`` CPU reverse-mapping for RX completion interrupts, indexed by RX queue number. Assigned by driver. This must only be set if the ndo_rx_flow_steer operation is defined h](j)}(h``rx_cpu_rmap``h]j)}(hjh]h rx_cpu_rmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hCPU reverse-mapping for RX completion interrupts, indexed by RX queue number. Assigned by driver. This must only be set if the ndo_rx_flow_steer operation is definedh]hCPU reverse-mapping for RX completion interrupts, indexed by RX queue number. Assigned by driver. This must only be set if the ndo_rx_flow_steer operation is defined}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``index_hlist`` Device index hash chain h](j)}(h``index_hlist``h]j)}(hjh]h index_hlist}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hDevice index hash chainh]hDevice index hash chain}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hJ``num_tx_queues`` Number of TX queues allocated at alloc_netdev_mq() time h](j)}(h``num_tx_queues``h]j)}(hj*h]h num_tx_queues}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj$ubj)}(hhh]jX)}(h7Number of TX queues allocated at alloc_netdev_mq() timeh]h7Number of TX queues allocated at alloc_netdev_mq() time}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubj)}(h2``qdisc`` Root qdisc from userspace point of view h](j)}(h ``qdisc``h]j)}(hjch]hqdisc}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj]ubj)}(hhh]jX)}(h'Root qdisc from userspace point of viewh]h'Root qdisc from userspace point of view}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjubj)}(h.``tx_queue_len`` Max frames per queue allowed h](j)}(h``tx_queue_len``h]j)}(hjh]h tx_queue_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMax frames per queue allowedh]hMax frames per queue allowed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h2``tx_global_lock`` XXX: need comments on this one h](j)}(h``tx_global_lock``h]j)}(hjh]htx_global_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``xdp_bulkq`` XDP device bulk queue h](j)}(h ``xdp_bulkq``h]j)}(hjh]h xdp_bulkq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXDP device bulk queueh]hXDP device bulk queue}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(h ``qdisc_hash`` qdisc hash table h](j)}(h``qdisc_hash``h]j)}(hjGh]h qdisc_hash}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjAubj)}(hhh]jX)}(hqdisc hash tableh]hqdisc hash table}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjubj)}(h"``watchdog_timer`` List of timers h](j)}(h``watchdog_timer``h]j)}(hjh]hwatchdog_timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjzubj)}(hhh]jX)}(hList of timersh]hList of timers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h\``watchdog_timeo`` Represents the timeout that is used by the watchdog (see dev_watchdog()) h](j)}(h``watchdog_timeo``h]j)}(hjh]hwatchdog_timeo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hHRepresents the timeout that is used by the watchdog (see dev_watchdog())h]hHRepresents the timeout that is used by the watchdog (see dev_watchdog())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``proto_down_reason`` reason a netdev interface is held down h](j)}(h``proto_down_reason``h]j)}(hjh]hproto_down_reason}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h&reason a netdev interface is held downh]h&reason a netdev interface is held down}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``todo_list`` Delayed register/unregister h](j)}(h ``todo_list``h]j)}(hj,h]h todo_list}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj&ubj)}(hhh]jX)}(hDelayed register/unregisterh]hDelayed register/unregister}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjubj)}(h4``pcpu_refcnt`` Number of references to this device h](j)}(h``pcpu_refcnt``h]j)}(hjeh]h pcpu_refcnt}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj_ubj)}(hhh]jX)}(h#Number of references to this deviceh]h#Number of references to this device}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjubj)}(h3``dev_refcnt`` Number of references to this device h](j)}(h``dev_refcnt``h]j)}(hjh]h dev_refcnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h#Number of references to this deviceh]h#Number of references to this device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hK``refcnt_tracker`` Tracker directory for tracked references to this device h](j)}(h``refcnt_tracker``h]j)}(hjh]hrefcnt_tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h7Tracker directory for tracked references to this deviceh]h7Tracker directory for tracked references to this device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``link_watch_list`` XXX: need comments on this one h](j)}(h``link_watch_list``h]j)}(hjh]hlink_watch_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj ubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h0``reg_state`` Register/unregister state machine h](j)}(h ``reg_state``h]j)}(hjIh]h reg_state}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjCubj)}(hhh]jX)}(h!Register/unregister state machineh]h!Register/unregister state machine}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubj)}(h*``dismantle`` Device is going to be freed h](j)}(h ``dismantle``h]j)}(hjh]h dismantle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj|ubj)}(hhh]jX)}(hDevice is going to be freedh]hDevice is going to be freed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``moving_ns`` device is changing netns, protected by **lock** h](j)}(h ``moving_ns``h]j)}(hjh]h moving_ns}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM\ hjubj)}(hhh]jX)}(h/device is changing netns, protected by **lock**h](h'device is changing netns, protected by }(hjhhhNhNubj)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhM\ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM\ hjubj)}(hA``rtnl_link_initializing`` Device being created, suppress events h](j)}(h``rtnl_link_initializing``h]j)}(hjh]hrtnl_link_initializing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^ hjubj)}(hhh]jX)}(h%Device being created, suppress eventsh]h%Device being created, suppress events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM^ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^ hjubj)}(h=``needs_free_netdev`` Should unregister perform free_netdev? h](j)}(h``needs_free_netdev``h]j)}(hj;h]hneeds_free_netdev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj5ubj)}(hhh]jX)}(h&Should unregister perform free_netdev?h]h&Should unregister perform free_netdev?}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjubj)}(h+``priv_destructor`` Called from unregister h](j)}(h``priv_destructor``h]j)}(hjth]hpriv_destructor}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjnubj)}(hhh]jX)}(hCalled from unregisterh]hCalled from unregister}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``ml_priv`` Mid-layer private h](j)}(h ``ml_priv``h]j)}(hjh]hml_priv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMid-layer privateh]hMid-layer private}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``ml_priv_type`` Mid-layer private type h](j)}(h``ml_priv_type``h]j)}(hjh]h ml_priv_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMid-layer private typeh]hMid-layer private type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``pcpu_stat_type`` Type of device statistics which the core should allocate/free: none, lstats, tstats, dstats. none means the driver is handling statistics allocation/ freeing internally. h](j)}(h``pcpu_stat_type``h]j)}(hjh]hpcpu_stat_type}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hType of device statistics which the core should allocate/free: none, lstats, tstats, dstats. none means the driver is handling statistics allocation/ freeing internally.h]hType of device statistics which the core should allocate/free: none, lstats, tstats, dstats. none means the driver is handling statistics allocation/ freeing internally.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h``garp_port`` GARP h](j)}(h ``garp_port``h]j)}(hjYh]h garp_port}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjSubj)}(hhh]jX)}(hGARPh]hGARP}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjubj)}(h``mrp_port`` MRP h](j)}(h ``mrp_port``h]j)}(hjh]hmrp_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hMRPh]hMRP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``dm_private`` Drop monitor private h](j)}(h``dm_private``h]j)}(hjh]h dm_private}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hDrop monitor privateh]hDrop monitor private}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``dev`` Class/net/name entry h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hClass/net/name entryh]hClass/net/name entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hQ``sysfs_groups`` Space for optional device, statistics and wireless sysfs groups h](j)}(h``sysfs_groups``h]j)}(hj=h]h sysfs_groups}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj7ubj)}(hhh]jX)}(h?Space for optional device, statistics and wireless sysfs groupsh]h?Space for optional device, statistics and wireless sysfs groups}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(hD``sysfs_rx_queue_group`` Space for optional per-rx queue attributes h](j)}(h``sysfs_rx_queue_group``h]j)}(hjwh]hsysfs_rx_queue_group}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjqubj)}(hhh]jX)}(h*Space for optional per-rx queue attributesh]h*Space for optional per-rx queue attributes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``rtnl_link_ops`` Rtnl_link_ops h](j)}(h``rtnl_link_ops``h]j)}(hjh]h rtnl_link_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h Rtnl_link_opsh]h Rtnl_link_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``stat_ops`` Optional ops for queue-aware statistics h](j)}(h ``stat_ops``h]j)}(hjh]hstat_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h'Optional ops for queue-aware statisticsh]h'Optional ops for queue-aware statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``queue_mgmt_ops`` Optional ops for queue management h](j)}(h``queue_mgmt_ops``h]j)}(hj"h]hqueue_mgmt_ops}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h!Optional ops for queue managementh]h!Optional ops for queue management}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(hE``tso_max_size`` Device (as in HW) limit on the max TSO request size h](j)}(h``tso_max_size``h]j)}(hj[h]h tso_max_size}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjUubj)}(hhh]jX)}(h3Device (as in HW) limit on the max TSO request sizeh]h3Device (as in HW) limit on the max TSO request size}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubj)}(hF``tso_max_segs`` Device (as in HW) limit on the max TSO segment count h](j)}(h``tso_max_segs``h]j)}(hjh]h tso_max_segs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h4Device (as in HW) limit on the max TSO segment counth]h4Device (as in HW) limit on the max TSO segment count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``dcbnl_ops`` Data Center Bridging netlink ops h](j)}(h ``dcbnl_ops``h]j)}(hjh]h dcbnl_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h Data Center Bridging netlink opsh]h Data Center Bridging netlink ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``prio_tc_map`` XXX: need comments on this one h](j)}(h``prio_tc_map``h]j)}(hjh]h prio_tc_map}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``fcoe_ddp_xid`` Max exchange id for FCoE LRO by ddp h](j)}(h``fcoe_ddp_xid``h]j)}(hj?h]h fcoe_ddp_xid}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj9ubj)}(hhh]jX)}(h#Max exchange id for FCoE LRO by ddph]h#Max exchange id for FCoE LRO by ddp}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhjubj)}(h+``priomap`` XXX: need comments on this one h](j)}(h ``priomap``h]j)}(hjxh]hpriomap}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjrubj)}(hhh]jX)}(hXXX: need comments on this oneh]hXXX: need comments on this one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``link_topo`` Physical link topology tracking attached PHYs h](j)}(h ``link_topo``h]j)}(hjh]h link_topo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h-Physical link topology tracking attached PHYsh]h-Physical link topology tracking attached PHYs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``phydev`` Physical device may attach itself for hardware timestamping h](j)}(h ``phydev``h]j)}(hjh]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h;Physical device may attach itself for hardware timestampingh]h;Physical device may attach itself for hardware timestamping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``sfp_bus`` attached :c:type:`struct sfp_bus ` structure. h](j)}(h ``sfp_bus``h]j)}(hj$h]hsfp_bus}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h6attached :c:type:`struct sfp_bus ` structure.h](h attached }(hj=hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjGh]hstruct sfp_bus}(hjIhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj9hMhj=ubh structure.}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(hH``qdisc_tx_busylock`` lockdep class annotating Qdisc->busylock spinlock h](j)}(h``qdisc_tx_busylock``h]j)}(hjh]hqdisc_tx_busylock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjzubj)}(hhh]jX)}(h1lockdep class annotating Qdisc->busylock spinlockh]h1lockdep class annotating Qdisc->busylock spinlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``proto_down`` protocol port state information can be sent to the switch driver and used to set the phys state of the switch port. h](j)}(h``proto_down``h]j)}(hjh]h proto_down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hsprotocol port state information can be sent to the switch driver and used to set the phys state of the switch port.h]hsprotocol port state information can be sent to the switch driver and used to set the phys state of the switch port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``irq_affinity_auto`` driver wants the core to store and re-assign the IRQ affinity. Set by netif_enable_irq_affinity(), then the driver must create a persistent napi by netif_napi_add_config() and finally bind the napi to IRQ (via netif_napi_set_irq()). h](j)}(h``irq_affinity_auto``h]j)}(hjh]hirq_affinity_auto}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hdriver wants the core to store and re-assign the IRQ affinity. Set by netif_enable_irq_affinity(), then the driver must create a persistent napi by netif_napi_add_config() and finally bind the napi to IRQ (via netif_napi_set_irq()).h]hdriver wants the core to store and re-assign the IRQ affinity. Set by netif_enable_irq_affinity(), then the driver must create a persistent napi by netif_napi_add_config() and finally bind the napi to IRQ (via netif_napi_set_irq()).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hl``rx_cpu_rmap_auto`` driver wants the core to manage the ARFS rmap. Set by calling netif_enable_cpu_rmap(). h](j)}(h``rx_cpu_rmap_auto``h]j)}(hj-h]hrx_cpu_rmap_auto}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj'ubj)}(hhh]jX)}(hVdriver wants the core to manage the ARFS rmap. Set by calling netif_enable_cpu_rmap().h]hVdriver wants the core to manage the ARFS rmap. Set by calling netif_enable_cpu_rmap().}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubj)}(h``see_all_hwtstamp_requests`` device wants to see calls to ndo_hwtstamp_set() for all timestamp requests regardless of source, even if those aren't HWTSTAMP_SOURCE_NETDEV h](j)}(h``see_all_hwtstamp_requests``h]j)}(hjgh]hsee_all_hwtstamp_requests}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjaubj)}(hhh]jX)}(hdevice wants to see calls to ndo_hwtstamp_set() for all timestamp requests regardless of source, even if those aren't HWTSTAMP_SOURCE_NETDEVh]hdevice wants to see calls to ndo_hwtstamp_set() for all timestamp requests regardless of source, even if those aren’t HWTSTAMP_SOURCE_NETDEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhjubj)}(hJ``change_proto_down`` device supports setting carrier via IFLA_PROTO_DOWN h](j)}(h``change_proto_down``h]j)}(hjh]hchange_proto_down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h3device supports setting carrier via IFLA_PROTO_DOWNh]h3device supports setting carrier via IFLA_PROTO_DOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``netns_immutable`` interface can't change network namespaces h](j)}(h``netns_immutable``h]j)}(hjh]hnetns_immutable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h)interface can't change network namespacesh]h+interface can’t change network namespaces}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h:``fcoe_mtu`` device supports maximum FCoE MTU, 2158 bytes h](j)}(h ``fcoe_mtu``h]j)}(hjh]hfcoe_mtu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj ubj)}(hhh]jX)}(h,device supports maximum FCoE MTU, 2158 bytesh]h,device supports maximum FCoE MTU, 2158 bytes}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h``net_notifier_list`` List of per-net netdev notifier block that follow this device when it is moved to another network namespace. h](j)}(h``net_notifier_list``h]j)}(hjLh]hnet_notifier_list}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjFubj)}(hhh]jX)}(hlList of per-net netdev notifier block that follow this device when it is moved to another network namespace.h]hlList of per-net netdev notifier block that follow this device when it is moved to another network namespace.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubj)}(h%``macsec_ops`` MACsec offloading ops h](j)}(h``macsec_ops``h]j)}(hjh]h macsec_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hMACsec offloading opsh]hMACsec offloading ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hf``udp_tunnel_nic_info`` static structure describing the UDP tunnel offload capabilities of the device h](j)}(h``udp_tunnel_nic_info``h]j)}(hjh]hudp_tunnel_nic_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hMstatic structure describing the UDP tunnel offload capabilities of the deviceh]hMstatic structure describing the UDP tunnel offload capabilities of the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h,``udp_tunnel_nic`` UDP tunnel offload state h](j)}(h``udp_tunnel_nic``h]j)}(hjh]hudp_tunnel_nic}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hUDP tunnel offload stateh]hUDP tunnel offload state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h/``cfg`` net_device queue-related configuration h](j)}(h``cfg``h]j)}(hj2h]hcfg}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj,ubj)}(hhh]jX)}(h&net_device queue-related configurationh]h&net_device queue-related configuration}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhM hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjubj)}(h``cfg_pending`` same as **cfg** but when device is being actively reconfigured includes any changes to the configuration requested by the user, but which may or may not be rejected. h](j)}(h``cfg_pending``h]j)}(hjkh]h cfg_pending}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjeubj)}(hhh]j)}(hhh]j)}(hsame as **cfg** but when device is being actively reconfigured includes any changes to the configuration requested by the user, but which may or may not be rejected. h](j)}(h1same as **cfg** but when device is being activelyh](hsame as }(hjhhhNhNubj)}(h**cfg**h]hcfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" but when device is being actively}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hhh]jX)}(hsreconfigured includes any changes to the configuration requested by the user, but which may or may not be rejected.h]hsreconfigured includes any changes to the configuration requested by the user, but which may or may not be rejected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h"``ethtool`` ethtool related state h](j)}(h ``ethtool``h]j)}(hjh]hethtool}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hethtool related stateh]hethtool related state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h7``xdp_state`` stores info on attached XDP BPF programs h](j)}(h ``xdp_state``h]j)}(hjh]h xdp_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h(stores info on attached XDP BPF programsh]h(stores info on attached XDP BPF programs}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(hA``dev_addr_shadow`` Copy of **dev_addr** to catch direct writes. h](j)}(h``dev_addr_shadow``h]j)}(hjSh]hdev_addr_shadow}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjMubj)}(hhh]jX)}(h,Copy of **dev_addr** to catch direct writes.h](hCopy of }(hjlhhhNhNubj)}(h **dev_addr**h]hdev_addr}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh to catch direct writes.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h>``linkwatch_dev_tracker`` refcount tracker used by linkwatch. h](j)}(h``linkwatch_dev_tracker``h]j)}(hjh]hlinkwatch_dev_tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h#refcount tracker used by linkwatch.h]h#refcount tracker used by linkwatch.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``watchdog_dev_tracker`` refcount tracker used by watchdog. h](j)}(h``watchdog_dev_tracker``h]j)}(hjh]hwatchdog_dev_tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h"refcount tracker used by watchdog.h]h"refcount tracker used by watchdog.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hG``dev_registered_tracker`` tracker for reference held while registered h](j)}(h``dev_registered_tracker``h]j)}(hjh]hdev_registered_tracker}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj ubj)}(hhh]jX)}(h+tracker for reference held while registeredh]h+tracker for reference held while registered}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM hjubj)}(h6``offload_xstats_l3`` L3 HW stats for this netdevice. h](j)}(h``offload_xstats_l3``h]j)}(hjJh]hoffload_xstats_l3}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM!hjDubj)}(hhh]jX)}(hL3 HW stats for this netdevice.h]hL3 HW stats for this netdevice.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hM!hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hM!hjubj)}(h``devlink_port`` Pointer to related devlink port structure. Assigned by a driver before netdev registration using SET_NETDEV_DEVLINK_PORT macro. This pointer is static during the time netdevice is registered. h](j)}(h``devlink_port``h]j)}(hjh]h devlink_port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM&hj}ubj)}(hhh]jX)}(hPointer to related devlink port structure. Assigned by a driver before netdev registration using SET_NETDEV_DEVLINK_PORT macro. This pointer is static during the time netdevice is registered.h]hPointer to related devlink port structure. Assigned by a driver before netdev registration using SET_NETDEV_DEVLINK_PORT macro. This pointer is static during the time netdevice is registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM#hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(h```dpll_pin`` Pointer to the SyncE source pin of a DPLL subsystem, where the clock is recovered. h](j)}(h ``dpll_pin``h]j)}(hjh]hdpll_pin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM)hjubj)}(hhh]jX)}(hRPointer to the SyncE source pin of a DPLL subsystem, where the clock is recovered.h]hRPointer to the SyncE source pin of a DPLL subsystem, where the clock is recovered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(h5``page_pools`` page pools created for this netdevice h](j)}(h``page_pools``h]j)}(hjh]h page_pools}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h%page pools created for this netdeviceh]h%page pools created for this netdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubj)}(h@``irq_moder`` dim parameters used if IS_ENABLED(CONFIG_DIMLIB). h](j)}(h ``irq_moder``h]j)}(hj0h]h irq_moder}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj*ubj)}(hhh]jX)}(h1dim parameters used if IS_ENABLED(CONFIG_DIMLIB).h]h1dim parameters used if IS_ENABLED(CONFIG_DIMLIB).}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhM hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM hjubj)}(h@``max_pacing_offload_horizon`` max EDT offload horizon in nsec. h](j)}(h``max_pacing_offload_horizon``h]j)}(hjih]hmax_pacing_offload_horizon}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM+hjcubj)}(hhh]jX)}(h max EDT offload horizon in nsec.h]h max EDT offload horizon in nsec.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hM+hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM+hjubj)}(hQ``napi_config`` An array of napi_config structures containing per-NAPI settings. h](j)}(h``napi_config``h]j)}(hjh]h napi_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM-hjubj)}(hhh]jX)}(h@An array of napi_config structures containing per-NAPI settings.h]h@An array of napi_config structures containing per-NAPI settings.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjubj)}(hk``num_napi_configs`` number of allocated NAPI config structs, always >= max(num_rx_queues, num_tx_queues). h](j)}(h``num_napi_configs``h]j)}(hjh]hnum_napi_configs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM/hjubj)}(hhh]jX)}(hUnumber of allocated NAPI config structs, always >= max(num_rx_queues, num_tx_queues).h]hUnumber of allocated NAPI config structs, always >= max(num_rx_queues, num_tx_queues).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(hq``napi_defer_hard_irqs`` If not zero, provides a counter that would allow to avoid NIC hard IRQ, on busy queues. h](j)}(h``napi_defer_hard_irqs``h]j)}(hjh]hnapi_defer_hard_irqs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2hjubj)}(hhh]jX)}(hWIf not zero, provides a counter that would allow to avoid NIC hard IRQ, on busy queues.h]hWIf not zero, provides a counter that would allow to avoid NIC hard IRQ, on busy queues.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hM2hjubj)}(h4``gro_flush_timeout`` timeout for GRO layer in NAPI h](j)}(h``gro_flush_timeout``h]j)}(hjPh]hgro_flush_timeout}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0hjJubj)}(hhh]jX)}(htimeout for GRO layer in NAPIh]htimeout for GRO layer in NAPI}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM0hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehM0hjubj)}(h``up`` copy of **state**'s IFF_UP, but safe to read with just **lock**. May report false negatives while the device is being opened or closed (**lock** does not protect .ndo_open, or .ndo_close). h](j)}(h``up``h]j)}(hjh]hup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]j)}(hhh]j)}(hcopy of **state**'s IFF_UP, but safe to read with just **lock**. May report false negatives while the device is being opened or closed (**lock** does not protect .ndo_open, or .ndo_close). h](j)}(h@copy of **state**'s IFF_UP, but safe to read with just **lock**.h](hcopy of }(hjhhhNhNubj)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh(’s IFF_UP, but safe to read with just }(hjhhhNhNubj)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hhh]jX)}(h{May report false negatives while the device is being opened or closed (**lock** does not protect .ndo_open, or .ndo_close).h](hGMay report false negatives while the device is being opened or closed (}(hjhhhNhNubj)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, does not protect .ndo_open, or .ndo_close).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hh``request_ops_lock`` request the core to run all **netdev_ops** and **ethtool_ops** under the **lock**. h](j)}(h``request_ops_lock``h]j)}(hj#h]hrequest_ops_lock}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hRrequest the core to run all **netdev_ops** and **ethtool_ops** under the **lock**.h](hrequest the core to run all }(hj<hhhNhNubj)}(h**netdev_ops**h]h netdev_ops}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh and }(hj<hhhNhNubj)}(h**ethtool_ops**h]h ethtool_ops}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh under the }(hj<hhhNhNubj)}(h**lock**h]hlock}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hM hjubj)}(hXL``lock`` netdev-scope lock, protects a small selection of fields. Should always be taken using netdev_lock() / netdev_unlock() helpers. Drivers are free to use it for other protection. For the drivers that implement shaper or queue API, the scope of this lock is expanded to cover most ndo/queue/ethtool/sysfs operations. Drivers may opt-in to this behavior by setting **request_ops_lock**. **lock** protection mixes with rtnl_lock in multiple ways, fields are either: - simply protected by the instance **lock**; - double protected - writers hold both locks, readers hold either; - ops protected - protected by the lock held around the NDOs and other callbacks, that is the instance lock on devices for which netdev_need_ops_lock() returns true, otherwise by rtnl_lock; - double ops protected - always protected by rtnl_lock but for devices for which netdev_need_ops_lock() returns true - also the instance lock. Simply protects: **gro_flush_timeout**, **napi_defer_hard_irqs**, **napi_list**, **net_shaper_hierarchy**, **reg_state**, **threaded** Double protects: **up**, **moving_ns**, **nd_net**, **xdp_features** Double ops protects: **real_num_rx_queues**, **real_num_tx_queues** Also protects some fields in: struct napi_struct, struct netdev_queue, struct netdev_rx_queue Ordering: take after rtnl_lock. h](j)}(h``lock``h]j)}(hjh]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh](jX)}(hnetdev-scope lock, protects a small selection of fields. Should always be taken using netdev_lock() / netdev_unlock() helpers. Drivers are free to use it for other protection.h]hnetdev-scope lock, protects a small selection of fields. Should always be taken using netdev_lock() / netdev_unlock() helpers. Drivers are free to use it for other protection.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubjX)}(hFor the drivers that implement shaper or queue API, the scope of this lock is expanded to cover most ndo/queue/ethtool/sysfs operations. Drivers may opt-in to this behavior by setting **request_ops_lock**.h](hFor the drivers that implement shaper or queue API, the scope of this lock is expanded to cover most ndo/queue/ethtool/sysfs operations. Drivers may opt-in to this behavior by setting }(hjhhhNhNubj)}(h**request_ops_lock**h]hrequest_ops_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubjX)}(hM**lock** protection mixes with rtnl_lock in multiple ways, fields are either:h](j)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhE protection mixes with rtnl_lock in multiple ways, fields are either:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj4H)}(hhh](j9H)}(h+simply protected by the instance **lock**; h]jX)}(h*simply protected by the instance **lock**;h](h!simply protected by the instance }(hjhhhNhNubj)}(h**lock**h]hlock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh;}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hAdouble protected - writers hold both locks, readers hold either; h]jX)}(h@double protected - writers hold both locks, readers hold either;h]h@double protected - writers hold both locks, readers hold either;}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj'ubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hops protected - protected by the lock held around the NDOs and other callbacks, that is the instance lock on devices for which netdev_need_ops_lock() returns true, otherwise by rtnl_lock; h]jX)}(hops protected - protected by the lock held around the NDOs and other callbacks, that is the instance lock on devices for which netdev_need_ops_lock() returns true, otherwise by rtnl_lock;h]hops protected - protected by the lock held around the NDOs and other callbacks, that is the instance lock on devices for which netdev_need_ops_lock() returns true, otherwise by rtnl_lock;}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj@ubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hdouble ops protected - always protected by rtnl_lock but for devices for which netdev_need_ops_lock() returns true - also the instance lock. h]jX)}(hdouble ops protected - always protected by rtnl_lock but for devices for which netdev_need_ops_lock() returns true - also the instance lock.h]hdouble ops protected - always protected by rtnl_lock but for devices for which netdev_need_ops_lock() returns true - also the instance lock.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjYubah}(h]h ]h"]h$]h&]uh1j8Hhjubeh}(h]h ]h"]h$]h&]jIjw-uh1j3Hhj hM hjubj)}(hhh](j)}(hSimply protects: **gro_flush_timeout**, **napi_defer_hard_irqs**, **napi_list**, **net_shaper_hierarchy**, **reg_state**, **threaded** h](j)}(hSimply protects:h]hSimply protects:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj{ubj)}(hhh]jX)}(hu**gro_flush_timeout**, **napi_defer_hard_irqs**, **napi_list**, **net_shaper_hierarchy**, **reg_state**, **threaded**h](j)}(h**gro_flush_timeout**h]hgro_flush_timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**napi_defer_hard_irqs**h]hnapi_defer_hard_irqs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h **napi_list**h]h napi_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**net_shaper_hierarchy**h]hnet_shaper_hierarchy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h **reg_state**h]h reg_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h **threaded**h]hthreaded}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubj)}(hEDouble protects: **up**, **moving_ns**, **nd_net**, **xdp_features** h](j)}(hDouble protects:h]hDouble protects:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h3**up**, **moving_ns**, **nd_net**, **xdp_features**h](j)}(h**up**h]hup}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh, }(hj&hhhNhNubj)}(h **moving_ns**h]h moving_ns}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh, }hj&sbj)}(h **nd_net**h]hnd_net}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh, }hj&sbj)}(h**xdp_features**h]h xdp_features}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jWhj"hM hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM hjxubj)}(hDDouble ops protects: **real_num_rx_queues**, **real_num_tx_queues** h](j)}(hDouble ops protects:h]hDouble ops protects:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h.**real_num_rx_queues**, **real_num_tx_queues**h](j)}(h**real_num_rx_queues**h]hreal_num_rx_queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**real_num_tx_queues**h]hreal_num_tx_queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubj)}(h^Also protects some fields in: struct napi_struct, struct netdev_queue, struct netdev_rx_queue h](j)}(hAlso protects some fields in:h]hAlso protects some fields in:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h?struct napi_struct, struct netdev_queue, struct netdev_rx_queueh]h?struct napi_struct, struct netdev_queue, struct netdev_rx_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjxubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(hOrdering: take after rtnl_lock.h]hOrdering: take after rtnl_lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h```net_shaper_hierarchy`` data tracking the current shaper status see include/net/net_shapers.h h](j)}(h``net_shaper_hierarchy``h]j)}(hj"h]hnet_shaper_hierarchy}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]j)}(hhh]j)}(hFdata tracking the current shaper status see include/net/net_shapers.h h](j)}(h'data tracking the current shaper statush]h'data tracking the current shaper status}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7hM hj>ubj)}(hhh]jX)}(hsee include/net/net_shapers.hh]hsee include/net/net_shapers.h}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hM hjPubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM hjubj)}(hb``neighbours`` List heads pointing to this device's neighbours' dev_list, one per address-family. h](j)}(h``neighbours``h]j)}(hjh]h neighbours}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM5hjubj)}(hhh]jX)}(hRList heads pointing to this device's neighbours' dev_list, one per address-family.h]hVList heads pointing to this device’s neighbours’ dev_list, one per address-family.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM5hjubj)}(hD``hwprov`` Tracks which PTP performs hardware packet time stamping. h](j)}(h ``hwprov``h]j)}(hjh]hhwprov}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM6hjubj)}(hhh]jX)}(h8Tracks which PTP performs hardware packet time stamping.h]h8Tracks which PTP performs hardware packet time stamping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM6hjubj)}(h/``priv`` Flexible array containing private datah](j)}(h``priv``h]j)}(hjh]hpriv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMMhjubj)}(hhh]jX)}(h&Flexible array containing private datah]h&Flexible array containing private data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMMhjubeh}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubjX)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMQhjhhubj )}(hXActually, this whole structure is a big mistake. It mixes I/O data with strictly "high-level" data, and it has to know about almost every data structure used in the INET module. interface address info: FIXME: cleanup struct net_device such that network protocol info moves out. h](jX)}(hActually, this whole structure is a big mistake. It mixes I/O data with strictly "high-level" data, and it has to know about almost every data structure used in the INET module.h]hActually, this whole structure is a big mistake. It mixes I/O data with strictly “high-level” data, and it has to know about almost every data structure used in the INET module.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubjX)}(hinterface address info:h]hinterface address info:}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubjX)}(hKFIXME: cleanup struct net_device such that network protocol info moves out.h]hKFIXME: cleanup struct net_device such that network protocol info moves out.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubeh}(h]h ]h"]h$]h&]uh1j hjchMhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_priv (C function) c.netdev_privhNtauh1hhjhhhNhNubh)}(hhh](h)}(h1void * netdev_priv (const struct net_device *dev)h]h)}(h/void *netdev_priv(const struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhM ubj)}(h netdev_privh]j%)}(h netdev_privh]h netdev_priv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&modnameN classnameNjj!)}j$]j')}jjsb c.netdev_privasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h"access network device private datah]h"access network device private data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hs**Parameters** ``const struct net_device *dev`` network device **Description** Get network device private datah](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjh]hconst struct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubjX)}(hGet network device private datah]hGet network device private data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_napi_add (C function)c.netif_napi_addhNtauh1hhjhhhNhNubh)}(hhh](h)}(hnvoid netif_napi_add (struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct *, int))h]h)}(hlvoid netif_napi_add(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int))h](j)}(hvoidh]hvoid}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFhhhjXhM ubj)}(hnetif_napi_addh]j%)}(hnetif_napi_addh]hnetif_napi_add}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjFhhhjXhM ubj)}(hY(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int))h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjmsbc.netif_napi_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netif_napi_addasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnapih]hnapi}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h%int (*poll)(struct napi_struct*, int)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj;)}(hjmh]h(}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj%)}(hpollh]hpoll}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj;)}(hjmh]h(}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.netif_napi_addasbuh1hhjeubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj;)}(hjdh]h,}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj;)}(hjh]h)}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjFhhhjXhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBhhhjXhM ubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhM hj?hhubjS)}(hhh]jX)}(hinitialize a NAPI contexth]hinitialize a NAPI context}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj_hhubah}(h]h ]h"]h$]h&]uh1jRhj?hhhjXhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1hhhhjhNhNubj})}(hX0**Parameters** ``struct net_device *dev`` network device ``struct napi_struct *napi`` NAPI context ``int (*poll)(struct napi_struct *, int)`` polling function **Description** netif_napi_add() must be used to initialize a NAPI context prior to calling *any* of the other NAPI-related functions.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj~ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h*``struct napi_struct *napi`` NAPI context h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h<``int (*poll)(struct napi_struct *, int)`` polling function h](j)}(h*``int (*poll)(struct napi_struct *, int)``h]j)}(hjh]h&int (*poll)(struct napi_struct *, int)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjubj)}(hhh]jX)}(hpolling functionh]hpolling function}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hM hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM hjubeh}(h]h ]h"]h$]h&]uh1jhj~ubjX)}(h**Description**h]j)}(hjPh]h Description}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj~ubjX)}(hvnetif_napi_add() must be used to initialize a NAPI context prior to calling *any* of the other NAPI-related functions.h](hLnetif_napi_add() must be used to initialize a NAPI context prior to calling }(hjfhhhNhNubjz)}(h*any*h]hany}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjfubh% of the other NAPI-related functions.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"netif_napi_add_config (C function)c.netif_napi_add_confighNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid netif_napi_add_config (struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct *, int), int index)h]h)}(h~void netif_napi_add_config(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int), int index)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0 ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM0 ubj)}(hnetif_napi_add_configh]j%)}(hnetif_napi_add_configh]hnetif_napi_add_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM0 ubj)}(hd(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int), int index)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.netif_napi_add_configasbuh1hhjubj)}(h h]h }(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj0 hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj= hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjR ubj)}(h h]h }(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjt hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjv modnameN classnameNjj!)}j$]j c.netif_napi_add_configasbuh1hhjR ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjR ubj%)}(hnapih]hnapi}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjR ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h%int (*poll)(struct napi_struct*, int)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hjmh]h(}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hpollh]hpoll}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubj;)}(hjh]h)}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj;)}(hjmh]h(}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubh)}(hjh]hstruct}(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjB hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj? ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjD modnameN classnameNjj!)}j$]j c.netif_napi_add_configasbuh1hhj ubj;)}(hj>h]h*}(hj` hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj;)}(hjdh]h,}(hjm hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj)}(h h]h }(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj;)}(hjh]h)}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int indexh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hindexh]hindex}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM0 ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM0 ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM0 hjhhubjS)}(hhh]jX)}(h0initialize a NAPI context with persistent configh]h0initialize a NAPI context with persistent config}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0 hj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM0 ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``struct napi_struct *napi`` NAPI context ``int (*poll)(struct napi_struct *, int)`` polling function ``int index`` the NAPI indexh](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4 hj ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj5 h]hstruct net_device *dev}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1 hj/ ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJ hM1 hjK ubah}(h]h ]h"]h$]h&]uh1jhj/ ubeh}(h]h ]h"]h$]h&]uh1jhjJ hM1 hj, ubj)}(h*``struct napi_struct *napi`` NAPI context h](j)}(h``struct napi_struct *napi``h]j)}(hjn h]hstruct napi_struct *napi}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2 hjh ubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM2 hj ubah}(h]h ]h"]h$]h&]uh1jhjh ubeh}(h]h ]h"]h$]h&]uh1jhj hM2 hj, ubj)}(h<``int (*poll)(struct napi_struct *, int)`` polling function h](j)}(h*``int (*poll)(struct napi_struct *, int)``h]j)}(hj h]h&int (*poll)(struct napi_struct *, int)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM3 hj ubj)}(hhh]jX)}(hpolling functionh]hpolling function}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM3 hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM3 hj, ubj)}(h``int index`` the NAPI indexh](j)}(h ``int index``h]j)}(hj h]h int index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM5 hj ubj)}(hhh]jX)}(hthe NAPI indexh]hthe NAPI index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4 hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM5 hj, ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_napi_add_tx (C function)c.netif_napi_add_txhNtauh1hhjhhhNhNubh)}(hhh](h)}(hqvoid netif_napi_add_tx (struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct *, int))h]h)}(hovoid netif_napi_add_tx(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int))h](j)}(hvoidh]hvoid}(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM@ ubj)}(h h]h }(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6 hhhjH hM@ ubj)}(hnetif_napi_add_txh]j%)}(hnetif_napi_add_txh]hnetif_napi_add_tx}(hj[ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6 hhhjH hM@ ubj)}(hY(struct net_device *dev, struct napi_struct *napi, int (*poll)(struct napi_struct*, int))h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjs ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj] sbc.netif_napi_add_txasbuh1hhjs ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjs ubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo ubj)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.netif_napi_add_txasbuh1hhj ubj)}(h h]h }(hj% hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj3 hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hnapih]hnapi}(hj@ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo ubj)}(h%int (*poll)(struct napi_struct*, int)h](j)}(hinth]hint}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjU ubj;)}(hjmh]h(}(hju hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubj%)}(hpollh]hpoll}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjU ubj;)}(hjh]h)}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubj;)}(hjmh]h(}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubh)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjU ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjU ubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.netif_napi_add_txasbuh1hhjU ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubj;)}(hjdh]h,}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjU ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubj;)}(hjh]h)}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjU ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjo ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj6 hhhjH hM@ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2 hhhjH hM@ ubah}(h]j- ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjH hM@ hj/ hhubjS)}(hhh]jX)}(h0initialize a NAPI context to be used for Tx onlyh]h0initialize a NAPI context to be used for Tx only}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM@ hjOhhubah}(h]h ]h"]h$]h&]uh1jRhj/ hhhjH hM@ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1hhhhjhNhNubj})}(hXm**Parameters** ``struct net_device *dev`` network device ``struct napi_struct *napi`` NAPI context ``int (*poll)(struct napi_struct *, int)`` polling function **Description** This variant of netif_napi_add() should be used from drivers using NAPI to exclusively poll a TX queue. This will avoid we add it into napi_hash[], thus polluting this hash table.h](jX)}(h**Parameters**h]j)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMD hjnubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMA hjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMA hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMA hjubj)}(h*``struct napi_struct *napi`` NAPI context h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMB hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMB hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMB hjubj)}(h<``int (*poll)(struct napi_struct *, int)`` polling function h](j)}(h*``int (*poll)(struct napi_struct *, int)``h]j)}(hjh]h&int (*poll)(struct napi_struct *, int)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMC hjubj)}(hhh]jX)}(hpolling functionh]hpolling function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMC hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMC hjubeh}(h]h ]h"]h$]h&]uh1jhjnubjX)}(h**Description**h]j)}(hj@h]h Description}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhME hjnubjX)}(hThis variant of netif_napi_add() should be used from drivers using NAPI to exclusively poll a TX queue. This will avoid we add it into napi_hash[], thus polluting this hash table.h]hThis variant of netif_napi_add() should be used from drivers using NAPI to exclusively poll a TX queue. This will avoid we add it into napi_hash[], thus polluting this hash table.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMD hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__netif_napi_del (C function)c.__netif_napi_delhNtauh1hhjhhhNhNubh)}(hhh](h)}(h0void __netif_napi_del (struct napi_struct *napi)h]h)}(h/void __netif_napi_del(struct napi_struct *napi)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMS ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMS ubj)}(h__netif_napi_delh]j%)}(h__netif_napi_delh]h__netif_napi_del}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMS ubj)}(h(struct napi_struct *napi)h]j)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__netif_napi_delasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hnapih]hnapi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMS ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj}hhhjhMS ubah}(h]jxah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMS hjzhhubjS)}(hhh]jX)}(hremove a NAPI contexth]hremove a NAPI context}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMS hjBhhubah}(h]h ]h"]h$]h&]uh1jRhjzhhhjhMS ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj]jxj]jyjzj{uh1hhhhjhNhNubj})}(hX **Parameters** ``struct napi_struct *napi`` NAPI context **Description** Warning: caller must observe RCU grace period before freeing memory containing **napi**. Drivers might want to call this helper to combine all the needed RCU grace periods into a single one.h](jX)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMW hjaubj)}(hhh]j)}(h*``struct napi_struct *napi`` NAPI context h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMT hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMT hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMT hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMV hjaubjX)}(hWarning: caller must observe RCU grace period before freeing memory containing **napi**. Drivers might want to call this helper to combine all the needed RCU grace periods into a single one.h](hOWarning: caller must observe RCU grace period before freeing memory containing }(hjhhhNhNubj)}(h**napi**h]hnapi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhg. Drivers might want to call this helper to combine all the needed RCU grace periods into a single one.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMU hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_napi_del (C function)c.netif_napi_delhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_napi_del (struct napi_struct *napi)h]h)}(h-void netif_napi_del(struct napi_struct *napi)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMh ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj&hMh ubj)}(hnetif_napi_delh]j%)}(hnetif_napi_delh]hnetif_napi_del}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj&hMh ubj)}(h(struct napi_struct *napi)h]j)}(hstruct napi_struct *napih](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubh)}(hhh]j%)}(h napi_structh]h napi_struct}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]j')}jj;sbc.netif_napi_delasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjQubj%)}(hnapih]hnapi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj&hMh ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj&hMh ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj&hMh hj hhubjS)}(hhh]jX)}(hremove a NAPI contexth]hremove a NAPI context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMh hjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj&hMh ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct napi_struct *napi`` NAPI context **Description** netif_napi_del() removes a NAPI context from the network device NAPI listh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMl hjubj)}(hhh]j)}(h*``struct napi_struct *napi`` NAPI context h](j)}(h``struct napi_struct *napi``h]j)}(hjh]hstruct napi_struct *napi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMi hjubj)}(hhh]jX)}(h NAPI contexth]h NAPI context}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMi hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMi hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMk hjubj )}(hInetif_napi_del() removes a NAPI context from the network device NAPI listh]jX)}(hjlh]hInetif_napi_del() removes a NAPI context from the network device NAPI list}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMj hjjubah}(h]h ]h"]h$]h&]uh1j hj{hMj hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_start_queue (C function)c.netif_start_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void netif_start_queue (struct net_device *dev)h]h)}(h.void netif_start_queue(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetif_start_queueh]j%)}(hnetif_start_queueh]hnetif_start_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netif_start_queueasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hallow transmith]hallow transmit}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Allow upper layers to call the device hard_start_xmit routine.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj~ubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj~ubj )}(h>Allow upper layers to call the device hard_start_xmit routine.h]jX)}(hjh]h>Allow upper layers to call the device hard_start_xmit routine.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_wake_queue (C function)c.netif_wake_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_wake_queue (struct net_device *dev)h]h)}(h-void netif_wake_queue(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhj:hM0ubj)}(hnetif_wake_queueh]j%)}(hnetif_wake_queueh]hnetif_wake_queue}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj(hhhj:hM0ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjOsbc.netif_wake_queueasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjaubah}(h]h ]h"]h$]h&]j<j=uh1jhj(hhhj:hM0ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$hhhj:hM0ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hM0hj!hhubjS)}(hhh]jX)}(hrestart transmith]hrestart transmit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0hjhhubah}(h]h ]h"]h$]h&]uh1jRhj!hhhj:hM0ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Allow upper layers to call the device hard_start_xmit routine. Used for flow control when transmit resources are available.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4hjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj-h]hstruct net_device *dev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1hj'ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM1hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM1hj$ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM3hjubj )}(h{Allow upper layers to call the device hard_start_xmit routine. Used for flow control when transmit resources are available.h]jX)}(h{Allow upper layers to call the device hard_start_xmit routine. Used for flow control when transmit resources are available.h]h{Allow upper layers to call the device hard_start_xmit routine. Used for flow control when transmit resources are available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2hj~ubah}(h]h ]h"]h$]h&]uh1j hjhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_stop_queue (C function)c.netif_stop_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_stop_queue (struct net_device *dev)h]h)}(h-void netif_stop_queue(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMRubj)}(hnetif_stop_queueh]j%)}(hnetif_stop_queueh]hnetif_stop_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMRubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.netif_stop_queueasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMRubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMRhjhhubjS)}(hhh]jX)}(hstop transmitted packetsh]hstop transmitted packets}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMRhjthhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Stop upper layers calling the device hard_start_xmit routine. Used for flow control when transmit resources are unavailable.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMVhjubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMShjubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMUhjubj )}(h|Stop upper layers calling the device hard_start_xmit routine. Used for flow control when transmit resources are unavailable.h]jX)}(h|Stop upper layers calling the device hard_start_xmit routine. Used for flow control when transmit resources are unavailable.h]h|Stop upper layers calling the device hard_start_xmit routine. Used for flow control when transmit resources are unavailable.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMThj ubah}(h]h ]h"]h$]h&]uh1j hjhMThjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_queue_stopped (C function)c.netif_queue_stoppedhNtauh1hhjhhhNhNubh)}(hhh](h)}(h7bool netif_queue_stopped (const struct net_device *dev)h]h)}(h6bool netif_queue_stopped(const struct net_device *dev)h](j)}(hjTh]hbool}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMeubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhjOhMeubj)}(hnetif_queue_stoppedh]j%)}(hnetif_queue_stoppedh]hnetif_queue_stopped}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj>hhhjOhMeubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjdsbc.netif_queue_stoppedasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjvubah}(h]h ]h"]h$]h&]j<j=uh1jhj>hhhjOhMeubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj:hhhjOhMeubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhMehj7hhubjS)}(hhh]jX)}(h%test if transmit queue is flowblockedh]h%test if transmit queue is flowblocked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMehjhhubah}(h]h ]h"]h$]h&]uh1jRhj7hhhjOhMeubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device **Description** Test if transmit queue on device is currently unable to send.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMihj8ubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hj]h]hconst struct net_device *dev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMfhjWubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMfhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMfhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhhj8ubj )}(h=Test if transmit queue on device is currently unable to send.h]jX)}(hjh]h=Test if transmit queue on device is currently unable to send.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMghjubah}(h]h ]h"]h$]h&]uh1j hjhMghj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+netdev_queue_set_dql_min_limit (C function) c.netdev_queue_set_dql_min_limithNtauh1hhjhhhNhNubh)}(hhh](h)}(h\void netdev_queue_set_dql_min_limit (struct netdev_queue *dev_queue, unsigned int min_limit)h]h)}(h[void netdev_queue_set_dql_min_limit(struct netdev_queue *dev_queue, unsigned int min_limit)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetdev_queue_set_dql_min_limith]j%)}(hnetdev_queue_set_dql_min_limith]hnetdev_queue_set_dql_min_limit}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h8(struct netdev_queue *dev_queue, unsigned int min_limit)h](j)}(hstruct netdev_queue *dev_queueh](h)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h netdev_queueh]h netdev_queue}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}jj sb c.netdev_queue_set_dql_min_limitasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h dev_queueh]h dev_queue}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int min_limith](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h min_limith]h min_limit}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hset dql minimum limith]hset dql minimum limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(hXR**Parameters** ``struct netdev_queue *dev_queue`` pointer to transmit queue ``unsigned int min_limit`` dql minimum limit **Description** Forces xmit_more() to return true until the minimum threshold defined by **min_limit** is reached (or until the tx queue is empty). Warning: to be use with care, misuse will impact the latency.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh](j)}(h=``struct netdev_queue *dev_queue`` pointer to transmit queue h](j)}(h"``struct netdev_queue *dev_queue``h]j)}(hj8h]hstruct netdev_queue *dev_queue}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj2ubj)}(hhh]jX)}(hpointer to transmit queueh]hpointer to transmit queue}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubj)}(h-``unsigned int min_limit`` dql minimum limit h](j)}(h``unsigned int min_limit``h]j)}(hjqh]hunsigned int min_limit}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjkubj)}(hhh]jX)}(hdql minimum limith]hdql minimum limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubjX)}(hForces xmit_more() to return true until the minimum threshold defined by **min_limit** is reached (or until the tx queue is empty). Warning: to be use with care, misuse will impact the latency.h](hIForces xmit_more() to return true until the minimum threshold defined by }(hjhhhNhNubj)}(h **min_limit**h]h min_limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhk is reached (or until the tx queue is empty). Warning: to be use with care, misuse will impact the latency.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-netdev_txq_bql_enqueue_prefetchw (C function)"c.netdev_txq_bql_enqueue_prefetchwhNtauh1hhjhhhNhNubh)}(hhh](h)}(hFvoid netdev_txq_bql_enqueue_prefetchw (struct netdev_queue *dev_queue)h]h)}(hEvoid netdev_txq_bql_enqueue_prefetchw(struct netdev_queue *dev_queue)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h netdev_txq_bql_enqueue_prefetchwh]j%)}(h netdev_txq_bql_enqueue_prefetchwh]h netdev_txq_bql_enqueue_prefetchw}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h (struct netdev_queue *dev_queue)h]j)}(hstruct netdev_queue *dev_queueh](h)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(h netdev_queueh]h netdev_queue}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]j')}jj&sb"c.netdev_txq_bql_enqueue_prefetchwasbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(h dev_queueh]h dev_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hprefetch bql data for writeh]hprefetch bql data for write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct netdev_queue *dev_queue`` pointer to transmit queue **Description** BQL enabled drivers might use this helper in their ndo_start_xmit(), to give appropriate hint to the CPU.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]j)}(h=``struct netdev_queue *dev_queue`` pointer to transmit queue h](j)}(h"``struct netdev_queue *dev_queue``h]j)}(hjh]hstruct netdev_queue *dev_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hpointer to transmit queueh]hpointer to transmit queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubjX)}(hiBQL enabled drivers might use this helper in their ndo_start_xmit(), to give appropriate hint to the CPU.h]hiBQL enabled drivers might use this helper in their ndo_start_xmit(), to give appropriate hint to the CPU.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.netdev_txq_bql_complete_prefetchw (C function)#c.netdev_txq_bql_complete_prefetchwhNtauh1hhjhhhNhNubh)}(hhh](h)}(hGvoid netdev_txq_bql_complete_prefetchw (struct netdev_queue *dev_queue)h]h)}(hFvoid netdev_txq_bql_complete_prefetchw(struct netdev_queue *dev_queue)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h!netdev_txq_bql_complete_prefetchwh]j%)}(h!netdev_txq_bql_complete_prefetchwh]h!netdev_txq_bql_complete_prefetchw}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h (struct netdev_queue *dev_queue)h]j)}(hstruct netdev_queue *dev_queueh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h netdev_queueh]h netdev_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb#c.netdev_txq_bql_complete_prefetchwasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h dev_queueh]h dev_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhjhMubah}(h]jwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjyhhubjS)}(hhh]jX)}(hprefetch bql data for writeh]hprefetch bql data for write}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct netdev_queue *dev_queue`` pointer to transmit queue **Description** BQL enabled drivers might use this helper in their TX completion path, to give appropriate hint to the CPU.h](jX)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubj)}(hhh]j)}(h=``struct netdev_queue *dev_queue`` pointer to transmit queue h](j)}(h"``struct netdev_queue *dev_queue``h]j)}(hjh]hstruct netdev_queue *dev_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(hpointer to transmit queueh]hpointer to transmit queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubjX)}(hkBQL enabled drivers might use this helper in their TX completion path, to give appropriate hint to the CPU.h]hkBQL enabled drivers might use this helper in their TX completion path, to give appropriate hint to the CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!netdev_tx_sent_queue (C function)c.netdev_tx_sent_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hNvoid netdev_tx_sent_queue (struct netdev_queue *dev_queue, unsigned int bytes)h]h)}(hMvoid netdev_tx_sent_queue(struct netdev_queue *dev_queue, unsigned int bytes)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hnetdev_tx_sent_queueh]j%)}(hnetdev_tx_sent_queueh]hnetdev_tx_sent_queue}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h4(struct netdev_queue *dev_queue, unsigned int bytes)h](j)}(hstruct netdev_queue *dev_queueh](h)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(h netdev_queueh]h netdev_queue}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbmodnameN classnameNjj!)}j$]j')}jj(sbc.netdev_tx_sent_queueasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(h dev_queueh]h dev_queue}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubj)}(hunsigned int bytesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hbytesh]hbytes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h5report the number of bytes queued to a given tx queueh]h5report the number of bytes queued to a given tx queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct netdev_queue *dev_queue`` network device queue ``unsigned int bytes`` number of bytes queued to the device queue **Description** Report the number of bytes queued for sending/completion to the network device hardware queue. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj2ubj)}(hhh](j)}(h8``struct netdev_queue *dev_queue`` network device queue h](j)}(h"``struct netdev_queue *dev_queue``h]j)}(hjWh]hstruct netdev_queue *dev_queue}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubj)}(hhh]jX)}(hnetwork device queueh]hnetwork device queue}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjNubj)}(hB``unsigned int bytes`` number of bytes queued to the device queue h](j)}(h``unsigned int bytes``h]j)}(hjh]hunsigned int bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubj)}(hhh]jX)}(h*number of bytes queued to the device queueh]h*number of bytes queued to the device queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjNubeh}(h]h ]h"]h$]h&]uh1jhj2ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj2ubj )}(hXReport the number of bytes queued for sending/completion to the network device hardware queue. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h]jX)}(hXReport the number of bytes queued for sending/completion to the network device hardware queue. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h](h_Report the number of bytes queued for sending/completion to the network device hardware queue. }(hjhhhNhNubj)}(h **bytes**h]hbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhR should be a good approximation and should exactly match netdev_completed_queue() }(hjhhhNhNubj)}(h **bytes**h]hbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This is typically called once per packet, from ndo_start_xmit().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjubah}(h]h ]h"]h$]h&]uh1j hj hMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_sent_queue (C function)c.netdev_sent_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hCvoid netdev_sent_queue (struct net_device *dev, unsigned int bytes)h]h)}(hBvoid netdev_sent_queue(struct net_device *dev, unsigned int bytes)h](j)}(hvoidh]hvoid}(hj> hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj: hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj: hhhjL hMubj)}(hnetdev_sent_queueh]j%)}(hnetdev_sent_queueh]hnetdev_sent_queue}(hj_ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj: hhhjL hMubj)}(h,(struct net_device *dev, unsigned int bytes)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjw ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jja sbc.netdev_sent_queueasbuh1hhjw ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjw ubj%)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjs ubj)}(hunsigned int bytesh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hbytesh]hbytes}(hj%!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjs ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj: hhhjL hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6 hhhjL hMubah}(h]j1 ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjL hMhj3 hhubjS)}(hhh]jX)}(h-report the number of bytes queued to hardwareh]h-report the number of bytes queued to hardware}(hjO!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjL!hhubah}(h]h ]h"]h$]h&]uh1jRhj3 hhhjL hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjg!jxjg!jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device ``unsigned int bytes`` number of bytes queued to the hardware device queue **Description** Report the number of bytes queued for sending/completion to the network device hardware queue#0. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h](jX)}(h**Parameters**h]j)}(hjq!h]h Parameters}(hjs!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo!ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjk!ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj!h]hstruct net_device *dev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj!ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj!ubj)}(hK``unsigned int bytes`` number of bytes queued to the hardware device queue h](j)}(h``unsigned int bytes``h]j)}(hj!h]hunsigned int bytes}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj!ubj)}(hhh]jX)}(h3number of bytes queued to the hardware device queueh]h3number of bytes queued to the hardware device queue}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjk!ubjX)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjk!ubj )}(hXReport the number of bytes queued for sending/completion to the network device hardware queue#0. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h]jX)}(hXReport the number of bytes queued for sending/completion to the network device hardware queue#0. **bytes** should be a good approximation and should exactly match netdev_completed_queue() **bytes**. This is typically called once per packet, from ndo_start_xmit().h](haReport the number of bytes queued for sending/completion to the network device hardware queue#0. }(hj"hhhNhNubj)}(h **bytes**h]hbytes}(hj&"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhR should be a good approximation and should exactly match netdev_completed_queue() }(hj"hhhNhNubj)}(h **bytes**h]hbytes}(hj8"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhB. This is typically called once per packet, from ndo_start_xmit().}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj"ubah}(h]h ]h"]h$]h&]uh1j hjP"hMhjk!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&netdev_tx_completed_queue (C function)c.netdev_tx_completed_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hfvoid netdev_tx_completed_queue (struct netdev_queue *dev_queue, unsigned int pkts, unsigned int bytes)h]h)}(hevoid netdev_tx_completed_queue(struct netdev_queue *dev_queue, unsigned int pkts, unsigned int bytes)h](j)}(hvoidh]hvoid}(hjw"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs"hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs"hhhj"hM ubj)}(hnetdev_tx_completed_queueh]j%)}(hnetdev_tx_completed_queueh]hnetdev_tx_completed_queue}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjs"hhhj"hM ubj)}(hG(struct netdev_queue *dev_queue, unsigned int pkts, unsigned int bytes)h](j)}(hstruct netdev_queue *dev_queueh](h)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(h netdev_queueh]h netdev_queue}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jj"sbc.netdev_tx_completed_queueasbuh1hhj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(h dev_queueh]h dev_queue}(hj #hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(hunsigned int pktsh](j)}(hunsignedh]hunsigned}(hj&#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"#ubj)}(h h]h }(hj4#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"#ubj)}(hinth]hint}(hjB#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"#ubj)}(h h]h }(hjP#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"#ubj%)}(hpktsh]hpkts}(hj^#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubj)}(hunsigned int bytesh](j)}(hunsignedh]hunsigned}(hjw#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs#ubj)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs#ubj%)}(hbytesh]hbytes}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj"ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjs"hhhj"hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjo"hhhj"hM ubah}(h]jj"ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"hM hjl"hhubjS)}(hhh]jX)}(h0report number of packets/bytes at TX completion.h]h0report number of packets/bytes at TX completion.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj#hhubah}(h]h ]h"]h$]h&]uh1jRhjl"hhhj"hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#jxj#jyjzj{uh1hhhhjhNhNubj})}(hXs**Parameters** ``struct netdev_queue *dev_queue`` network device queue ``unsigned int pkts`` number of packets (currently ignored) ``unsigned int bytes`` number of bytes dequeued from the device queue **Description** Must be called at most once per TX completion round (and not per individual packet), so that BQL can adjust its limits appropriately.h](jX)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj#ubj)}(hhh](j)}(h8``struct netdev_queue *dev_queue`` network device queue h](j)}(h"``struct netdev_queue *dev_queue``h]j)}(hj$h]hstruct netdev_queue *dev_queue}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj$ubj)}(hhh]jX)}(hnetwork device queueh]hnetwork device queue}(hj3$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/$hM hj0$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj/$hM hj$ubj)}(h<``unsigned int pkts`` number of packets (currently ignored) h](j)}(h``unsigned int pkts``h]j)}(hjS$h]hunsigned int pkts}(hjU$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjM$ubj)}(hhh]jX)}(h%number of packets (currently ignored)h]h%number of packets (currently ignored)}(hjl$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjh$hMhji$ubah}(h]h ]h"]h$]h&]uh1jhjM$ubeh}(h]h ]h"]h$]h&]uh1jhjh$hMhj$ubj)}(hF``unsigned int bytes`` number of bytes dequeued from the device queue h](j)}(h``unsigned int bytes``h]j)}(hj$h]hunsigned int bytes}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj$ubj)}(hhh]jX)}(h.number of bytes dequeued from the device queueh]h.number of bytes dequeued from the device queue}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj$ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjX)}(h**Description**h]j)}(hj$h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj#ubj )}(hMust be called at most once per TX completion round (and not per individual packet), so that BQL can adjust its limits appropriately.h]jX)}(hMust be called at most once per TX completion round (and not per individual packet), so that BQL can adjust its limits appropriately.h]hMust be called at most once per TX completion round (and not per individual packet), so that BQL can adjust its limits appropriately.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$hMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netdev_completed_queue (C function)c.netdev_completed_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h[void netdev_completed_queue (struct net_device *dev, unsigned int pkts, unsigned int bytes)h]h)}(hZvoid netdev_completed_queue(struct net_device *dev, unsigned int pkts, unsigned int bytes)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM-ubj)}(h h]h }(hj%%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj$%hM-ubj)}(hnetdev_completed_queueh]j%)}(hnetdev_completed_queueh]hnetdev_completed_queue}(hj7%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3%ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj%hhhj$%hM-ubj)}(h?(struct net_device *dev, unsigned int pkts, unsigned int bytes)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjS%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjO%ubj)}(h h]h }(hj`%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjO%ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjq%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjn%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjs%modnameN classnameNjj!)}j$]j')}jj9%sbc.netdev_completed_queueasbuh1hhjO%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjO%ubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjO%ubj%)}(hdevh]hdev}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjK%ubj)}(hunsigned int pktsh](j)}(hunsignedh]hunsigned}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj%)}(hpktsh]hpkts}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjK%ubj)}(hunsigned int bytesh](j)}(hunsignedh]hunsigned}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj$&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj)}(hinth]hint}(hj2&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj@&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&ubj%)}(hbytesh]hbytes}(hjN&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjK%ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj%hhhj$%hM-ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%hhhj$%hM-ubah}(h]j %ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$%hM-hj %hhubjS)}(hhh]jX)}(h,report bytes and packets completed by deviceh]h,report bytes and packets completed by device}(hjx&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM-hju&hhubah}(h]h ]h"]h$]h&]uh1jRhj %hhhj$%hM-ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device ``unsigned int pkts`` actual number of packets sent over the medium ``unsigned int bytes`` actual number of bytes sent over the medium **Description** Report the number of bytes and packets transmitted by the network device hardware queue over the physical medium, **bytes** must exactly match the **bytes** amount passed to netdev_sent_queue()h](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1hj&ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj&h]hstruct net_device *dev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM.hj&ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hM.hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM.hj&ubj)}(hD``unsigned int pkts`` actual number of packets sent over the medium h](j)}(h``unsigned int pkts``h]j)}(hj&h]hunsigned int pkts}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM/hj&ubj)}(hhh]jX)}(h-actual number of packets sent over the mediumh]h-actual number of packets sent over the medium}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hM/hj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hM/hj&ubj)}(hC``unsigned int bytes`` actual number of bytes sent over the medium h](j)}(h``unsigned int bytes``h]j)}(hj+'h]hunsigned int bytes}(hj-'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)'ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM0hj%'ubj)}(hhh]jX)}(h+actual number of bytes sent over the mediumh]h+actual number of bytes sent over the medium}(hjD'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@'hM0hjA'ubah}(h]h ]h"]h$]h&]uh1jhj%'ubeh}(h]h ]h"]h$]h&]uh1jhj@'hM0hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubjX)}(h**Description**h]j)}(hjf'h]h Description}(hjh'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd'ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2hj&ubj )}(hReport the number of bytes and packets transmitted by the network device hardware queue over the physical medium, **bytes** must exactly match the **bytes** amount passed to netdev_sent_queue()h]jX)}(hReport the number of bytes and packets transmitted by the network device hardware queue over the physical medium, **bytes** must exactly match the **bytes** amount passed to netdev_sent_queue()h](hrReport the number of bytes and packets transmitted by the network device hardware queue over the physical medium, }(hj'hhhNhNubj)}(h **bytes**h]hbytes}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh must exactly match the }(hj'hhhNhNubj)}(h **bytes**h]hbytes}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh% amount passed to netdev_sent_queue()}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM1hj|'ubah}(h]h ]h"]h$]h&]uh1j hj'hM1hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%netdev_tx_reset_subqueue (C function)c.netdev_tx_reset_subqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hEvoid netdev_tx_reset_subqueue (const struct net_device *dev, u32 qid)h]h)}(hDvoid netdev_tx_reset_subqueue(const struct net_device *dev, u32 qid)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMEubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj'hMEubj)}(hnetdev_tx_reset_subqueueh]j%)}(hnetdev_tx_reset_subqueueh]hnetdev_tx_reset_subqueue}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj'hMEubj)}(h'(const struct net_device *dev, u32 qid)h](j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj#(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hjh]hstruct}(hj1(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj>(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjO(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjL(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQ(modnameN classnameNjj!)}j$]j')}jj'sbc.netdev_tx_reset_subqueueasbuh1hhj(ubj)}(h h]h }(hjo(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hj}(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hdevh]hdev}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubj)}(hu32 qidh](h)}(hhh]j%)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]jk(c.netdev_tx_reset_subqueueasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj%)}(hqidh]hqid}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj'hMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj'hhhj'hMEubah}(h]j'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMEhj'hhubjS)}(hhh]jX)}(h/reset the BQL stats and state of a netdev queueh]h/reset the BQL stats and state of a netdev queue}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMEhj(hhubah}(h]h ]h"]h$]h&]uh1jRhj'hhhj'hMEubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhjhNhNubj})}(hr**Parameters** ``const struct net_device *dev`` network device ``u32 qid`` stack index of the queue to reseth](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj )hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMIhj)ubj)}(hhh](j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hj=)h]hconst struct net_device *dev}(hj?)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMFhj7)ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjV)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjR)hMFhjS)ubah}(h]h ]h"]h$]h&]uh1jhj7)ubeh}(h]h ]h"]h$]h&]uh1jhjR)hMFhj4)ubj)}(h-``u32 qid`` stack index of the queue to reseth](j)}(h ``u32 qid``h]j)}(hjv)h]hu32 qid}(hjx)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMHhjp)ubj)}(hhh]jX)}(h!stack index of the queue to reseth]h!stack index of the queue to reset}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMGhj)ubah}(h]h ]h"]h$]h&]uh1jhjp)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMHhj4)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_reset_queue (C function)c.netdev_reset_queuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h6void netdev_reset_queue (struct net_device *dev_queue)h]h)}(h5void netdev_reset_queue(struct net_device *dev_queue)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMPubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hhhj)hMPubj)}(hnetdev_reset_queueh]j%)}(hnetdev_reset_queueh]hnetdev_reset_queue}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj)hhhj)hMPubj)}(h(struct net_device *dev_queue)h]j)}(hstruct net_device *dev_queueh](h)}(hjh]hstruct}(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj *ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj *ubh)}(hhh]j%)}(h net_deviceh]h net_deviceX}(hj+*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-*modnameN classnameNjj!)}j$]j')}jj)sbc.netdev_reset_queueasbuh1hhj *ubj)}(h h]h }(hjK*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj *ubj;)}(hj>h]h*}(hjY*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj *ubj%)}(h dev_queueh]h dev_queue}(hjf*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj *ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhj)hhhj)hMPubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj)hhhj)hMPubah}(h]j)ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMPhj)hhubjS)}(hhh]jX)}(h5reset the packets and bytes count of a network deviceh]h5reset the packets and bytes count of a network device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMPhj*hhubah}(h]h ]h"]h$]h&]uh1jRhj)hhhj)hMPubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj*jxj*jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev_queue`` network device **Description** Reset the bytes and packet count of a network device and clear the software flow control OFF bit for this network deviceh](jX)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMThj*ubj)}(hhh]j)}(h0``struct net_device *dev_queue`` network device h](j)}(h ``struct net_device *dev_queue``h]j)}(hj*h]hstruct net_device *dev_queue}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMQhj*ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMQhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMQhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubjX)}(h**Description**h]j)}(hj +h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj +ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMShj*ubj )}(hxReset the bytes and packet count of a network device and clear the software flow control OFF bit for this network deviceh]jX)}(hxReset the bytes and packet count of a network device and clear the software flow control OFF bit for this network deviceh]hxReset the bytes and packet count of a network device and clear the software flow control OFF bit for this network device}(hj&+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMRhj"+ubah}(h]h ]h"]h$]h&]uh1j hj4+hMRhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetdev_cap_txqueue (C function)c.netdev_cap_txqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h@u16 netdev_cap_txqueue (struct net_device *dev, u16 queue_index)h]h)}(h?u16 netdev_cap_txqueue(struct net_device *dev, u16 queue_index)h](h)}(hhh]j%)}(hu16h]hu16}(hj^+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`+modnameN classnameNjj!)}j$]j')}jnetdev_cap_txqueuesbc.netdev_cap_txqueueasbuh1hhjW+hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM\ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW+hhhj+hM\ubj)}(hnetdev_cap_txqueueh]j%)}(hj|+h]hnetdev_cap_txqueue}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjW+hhhj+hM\ubj)}(h)(struct net_device *dev, u16 queue_index)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+modnameN classnameNjj!)}j$]jz+c.netdev_cap_txqueueasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubj%)}(hdevh]hdev}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubj)}(hu16 queue_indexh](h)}(hhh]j%)}(hu16h]hu16}(hj ,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj",modnameN classnameNjj!)}j$]jz+c.netdev_cap_txqueueasbuh1hhj,ubj)}(h h]h }(hj>,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj%)}(h queue_indexh]h queue_index}(hjL,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjW+hhhj+hM\ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjS+hhhj+hM\ubah}(h]jN+ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj+hM\hjP+hhubjS)}(hhh]jX)}(h0check if selected tx queue exceeds device queuesh]h0check if selected tx queue exceeds device queues}(hjv,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM\hjs,hhubah}(h]h ]h"]h$]h&]uh1jRhjP+hhhj+hM\ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``u16 queue_index`` given tx queue index **Description** Returns 0 if given tx queue index >= number of device tx queues, otherwise returns the originally passed tx queue index.h](jX)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM`hj,ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj,h]hstruct net_device *dev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM]hj,ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hM]hj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hM]hj,ubj)}(h)``u16 queue_index`` given tx queue index h](j)}(h``u16 queue_index``h]j)}(hj,h]hu16 queue_index}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^hj,ubj)}(hhh]jX)}(hgiven tx queue indexh]hgiven tx queue index}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hM^hj-ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj-hM^hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hj+-h]h Description}(hj--hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)-ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM`hj,ubj )}(hxReturns 0 if given tx queue index >= number of device tx queues, otherwise returns the originally passed tx queue index.h]jX)}(hxReturns 0 if given tx queue index >= number of device tx queues, otherwise returns the originally passed tx queue index.h]hxReturns 0 if given tx queue index >= number of device tx queues, otherwise returns the originally passed tx queue index.}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM_hjA-ubah}(h]h ]h"]h$]h&]uh1j hjS-hM_hj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_running (C function)c.netif_runninghNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool netif_running (const struct net_device *dev)h]h)}(h0bool netif_running(const struct net_device *dev)h](j)}(hjTh]hbool}(hjz-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv-hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMpubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv-hhhj-hMpubj)}(h netif_runningh]j%)}(h netif_runningh]h netif_running}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjv-hhhj-hMpubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jj-sbc.netif_runningasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hdevh]hdev}(hj*.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubah}(h]h ]h"]h$]h&]j<j=uh1jhjv-hhhj-hMpubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjr-hhhj-hMpubah}(h]jm-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj-hMphjo-hhubjS)}(hhh]jX)}(h test if uph]h test if up}(hjT.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMphjQ.hhubah}(h]h ]h"]h$]h&]uh1jRhjo-hhhj-hMpubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjl.jxjl.jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device **Description** Test if the device has been brought up.h](jX)}(h**Parameters**h]j)}(hjv.h]h Parameters}(hjx.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMthjp.ubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hj.h]hconst struct net_device *dev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMqhj.ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMqhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMqhj.ubah}(h]h ]h"]h$]h&]uh1jhjp.ubjX)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMshjp.ubj )}(h'Test if the device has been brought up.h]jX)}(hj.h]h'Test if the device has been brought up.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMrhj.ubah}(h]h ]h"]h$]h&]uh1j hj.hMrhjp.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!netif_start_subqueue (C function)c.netif_start_subqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hCvoid netif_start_subqueue (struct net_device *dev, u16 queue_index)h]h)}(hBvoid netif_start_subqueue(struct net_device *dev, u16 queue_index)h](j)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj-/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhj,/hMubj)}(hnetif_start_subqueueh]j%)}(hnetif_start_subqueueh]hnetif_start_subqueue}(hj?/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj/hhhj,/hMubj)}(h)(struct net_device *dev, u16 queue_index)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj[/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjW/ubj)}(h h]h }(hjh/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW/ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjy/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{/modnameN classnameNjj!)}j$]j')}jjA/sbc.netif_start_subqueueasbuh1hhjW/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW/ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjW/ubj%)}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjS/ubj)}(hu16 queue_indexh](h)}(hhh]j%)}(hu16h]hu16}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j/c.netif_start_subqueueasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj%)}(h queue_indexh]h queue_index}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjS/ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj/hhhj,/hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhj,/hMubah}(h]j/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,/hMhj/hhubjS)}(hhh]jX)}(h!allow sending packets on subqueueh]h!allow sending packets on subqueue}(hj&0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj#0hhubah}(h]h ]h"]h$]h&]uh1jRhj/hhhj,/hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>0jxj>0jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``u16 queue_index`` sub queue index **Description** Start individual transmit queue of a device with multiple transmit queues.h](jX)}(h**Parameters**h]j)}(hjH0h]h Parameters}(hjJ0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjB0ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjg0h]hstruct net_device *dev}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhja0ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|0hMhj}0ubah}(h]h ]h"]h$]h&]uh1jhja0ubeh}(h]h ]h"]h$]h&]uh1jhj|0hMhj^0ubj)}(h$``u16 queue_index`` sub queue index h](j)}(h``u16 queue_index``h]j)}(hj0h]hu16 queue_index}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj0ubj)}(hhh]jX)}(hsub queue indexh]hsub queue index}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj^0ubeh}(h]h ]h"]h$]h&]uh1jhjB0ubjX)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjB0ubjX)}(hJStart individual transmit queue of a device with multiple transmit queues.h]hJStart individual transmit queue of a device with multiple transmit queues.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjB0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_stop_subqueue (C function)c.netif_stop_subqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid netif_stop_subqueue (struct net_device *dev, u16 queue_index)h]h)}(hAvoid netif_stop_subqueue(struct net_device *dev, u16 queue_index)h](j)}(hvoidh]hvoid}(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj/1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1hhhj.1hMubj)}(hnetif_stop_subqueueh]j%)}(hnetif_stop_subqueueh]hnetif_stop_subqueue}(hjA1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=1ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj1hhhj.1hMubj)}(h)(struct net_device *dev, u16 queue_index)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj]1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjY1ubj)}(h h]h }(hjj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjY1ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj{1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjx1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}1modnameN classnameNjj!)}j$]j')}jjC1sbc.netif_stop_subqueueasbuh1hhjY1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjY1ubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjY1ubj%)}(hdevh]hdev}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjY1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjU1ubj)}(hu16 queue_indexh](h)}(hhh]j%)}(hu16h]hu16}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j1c.netif_stop_subqueueasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj%)}(h queue_indexh]h queue_index}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjU1ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj1hhhj.1hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1hhhj.1hMubah}(h]j1ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.1hMhj1hhubjS)}(hhh]jX)}(h stop sending packets on subqueueh]h stop sending packets on subqueue}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj%2hhubah}(h]h ]h"]h$]h&]uh1jRhj1hhhj.1hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@2jxj@2jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``u16 queue_index`` sub queue index **Description** Stop individual transmit queue of a device with multiple transmit queues.h](jX)}(h**Parameters**h]j)}(hjJ2h]h Parameters}(hjL2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH2ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjD2ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hji2h]hstruct net_device *dev}(hjk2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg2ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjc2ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjc2ubeh}(h]h ]h"]h$]h&]uh1jhj~2hMhj`2ubj)}(h$``u16 queue_index`` sub queue index h](j)}(h``u16 queue_index``h]j)}(hj2h]hu16 queue_index}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj2ubj)}(hhh]jX)}(hsub queue indexh]hsub queue index}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj`2ubeh}(h]h ]h"]h$]h&]uh1jhjD2ubjX)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjD2ubjX)}(hIStop individual transmit queue of a device with multiple transmit queues.h]hIStop individual transmit queue of a device with multiple transmit queues.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjD2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%__netif_subqueue_stopped (C function)c.__netif_subqueue_stoppedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hMbool __netif_subqueue_stopped (const struct net_device *dev, u16 queue_index)h]h)}(hLbool __netif_subqueue_stopped(const struct net_device *dev, u16 queue_index)h](j)}(hjTh]hbool}(hj"3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj03hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhj/3hMubj)}(h__netif_subqueue_stoppedh]j%)}(h__netif_subqueue_stoppedh]h__netif_subqueue_stopped}(hjB3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhj/3hMubj)}(h/(const struct net_device *dev, u16 queue_index)h](j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj^3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZ3ubj)}(h h]h }(hjk3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZ3ubh)}(hjh]hstruct}(hjy3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZ3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZ3ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]j')}jjD3sbc.__netif_subqueue_stoppedasbuh1hhjZ3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZ3ubj;)}(hj>h]h*}(hj3hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZ3ubj%)}(hdevh]hdev}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZ3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjV3ubj)}(hu16 queue_indexh](h)}(hhh]j%)}(hu16h]hu16}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]j3c.__netif_subqueue_stoppedasbuh1hhj3ubj)}(h h]h }(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj%)}(h queue_indexh]h queue_index}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjV3ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhj/3hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3hhhj/3hMubah}(h]j3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj/3hMhj3hhubjS)}(hhh]jX)}(htest status of subqueueh]htest status of subqueue}(hjD4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjA4hhubah}(h]h ]h"]h$]h&]uh1jRhj3hhhj/3hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj\4jxj\4jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device ``u16 queue_index`` sub queue index **Description** Check individual transmit queue of a device with multiple transmit queues.h](jX)}(h**Parameters**h]j)}(hjf4h]h Parameters}(hjh4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd4ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`4ubj)}(hhh](j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hj4h]hconst struct net_device *dev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj4ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj|4ubj)}(h$``u16 queue_index`` sub queue index h](j)}(h``u16 queue_index``h]j)}(hj4h]hu16 queue_index}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj4ubj)}(hhh]jX)}(hsub queue indexh]hsub queue index}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj|4ubeh}(h]h ]h"]h$]h&]uh1jhj`4ubjX)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`4ubjX)}(hJCheck individual transmit queue of a device with multiple transmit queues.h]hJCheck individual transmit queue of a device with multiple transmit queues.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_subqueue_stopped (C function)c.netif_subqueue_stoppedhNtauh1hhjhhhNhNubh)}(hhh](h)}(hObool netif_subqueue_stopped (const struct net_device *dev, struct sk_buff *skb)h]h)}(hNbool netif_subqueue_stopped(const struct net_device *dev, struct sk_buff *skb)h](j)}(hjTh]hbool}(hj>5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:5hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjL5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:5hhhjK5hMubj)}(hnetif_subqueue_stoppedh]j%)}(hnetif_subqueue_stoppedh]hnetif_subqueue_stopped}(hj^5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZ5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:5hhhjK5hMubj)}(h3(const struct net_device *dev, struct sk_buff *skb)h](j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjz5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjv5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv5ubh)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjv5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv5ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jj`5sbc.netif_subqueue_stoppedasbuh1hhjv5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv5ubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjv5ubj%)}(hdevh]hdev}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjr5ubj)}(hstruct sk_buff *skbh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hsk_buffh]hsk_buff}(hj%6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'6modnameN classnameNjj!)}j$]j5c.netif_subqueue_stoppedasbuh1hhj6ubj)}(h h]h }(hjC6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hjQ6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hskbh]hskb}(hj^6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjr5ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj:5hhhjK5hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj65hhhjK5hMubah}(h]j15ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjK5hMhj35hhubjS)}(hhh]jX)}(htest status of subqueueh]htest status of subqueue}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6hhubah}(h]h ]h"]h$]h&]uh1jRhj35hhhjK5hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj6jxj6jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device ``struct sk_buff *skb`` sub queue buffer pointer **Description** Check individual transmit queue of a device with multiple transmit queues.h](jX)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6ubj)}(hhh](j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hj6h]hconst struct net_device *dev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(h1``struct sk_buff *skb`` sub queue buffer pointer h](j)}(h``struct sk_buff *skb``h]j)}(hj7h]hstruct sk_buff *skb}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6ubj)}(hhh]jX)}(hsub queue buffer pointerh]hsub queue buffer pointer}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubjX)}(h**Description**h]j)}(hj=7h]h Description}(hj?7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;7ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6ubjX)}(hJCheck individual transmit queue of a device with multiple transmit queues.h]hJCheck individual transmit queue of a device with multiple transmit queues.}(hjS7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_wake_subqueue (C function)c.netif_wake_subqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(hBvoid netif_wake_subqueue (struct net_device *dev, u16 queue_index)h]h)}(hAvoid netif_wake_subqueue(struct net_device *dev, u16 queue_index)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~7hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~7hhhj7hMubj)}(hnetif_wake_subqueueh]j%)}(hnetif_wake_subqueueh]hnetif_wake_subqueue}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj~7hhhj7hMubj)}(h)(struct net_device *dev, u16 queue_index)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jj7sbc.netif_wake_subqueueasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hj 8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hdevh]hdev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubj)}(hu16 queue_indexh](h)}(hhh]j%)}(hu16h]hu16}(hj48hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj18ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj68modnameN classnameNjj!)}j$]j7c.netif_wake_subqueueasbuh1hhj-8ubj)}(h h]h }(hjR8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-8ubj%)}(h queue_indexh]h queue_index}(hj`8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj~7hhhj7hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjz7hhhj7hMubah}(h]ju7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj7hMhjw7hhubjS)}(hhh]jX)}(h!allow sending packets on subqueueh]h!allow sending packets on subqueue}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8hhubah}(h]h ]h"]h$]h&]uh1jRhjw7hhhj7hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device ``u16 queue_index`` sub queue index **Description** Resume individual transmit queue of a device with multiple transmit queues.h](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8ubj)}(hhh](j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj8h]hstruct net_device *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8ubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubj)}(h$``u16 queue_index`` sub queue index h](j)}(h``u16 queue_index``h]j)}(hj9h]hu16 queue_index}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8ubj)}(hhh]jX)}(hsub queue indexh]hsub queue index}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hj?9h]h Description}(hjA9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=9ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8ubjX)}(hKResume individual transmit queue of a device with multiple transmit queues.h]hKResume individual transmit queue of a device with multiple transmit queues.}(hjU9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!netif_attr_test_mask (C function)c.netif_attr_test_maskhNtauh1hhjhhhNhNubh)}(hhh](h)}(h\bool netif_attr_test_mask (unsigned long j, const unsigned long *mask, unsigned int nr_bits)h]h)}(h[bool netif_attr_test_mask(unsigned long j, const unsigned long *mask, unsigned int nr_bits)h](j)}(hjTh]hbool}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhj9hMubj)}(hnetif_attr_test_maskh]j%)}(hnetif_attr_test_maskh]hnetif_attr_test_mask}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9hhhj9hMubj)}(hB(unsigned long j, const unsigned long *mask, unsigned int nr_bits)h](j)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj)}(hlongh]hlong}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj%)}(hjh]hj}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubj)}(hconst unsigned long *maskh](h)}(hjh]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj :ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj :ubj)}(hunsignedh]hunsigned}(hj,:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj :ubj)}(h h]h }(hj::hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj :ubj)}(hlongh]hlong}(hjH:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj :ubj)}(h h]h }(hjV:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj :ubj;)}(hj>h]h*}(hjd:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj :ubj%)}(hmaskh]hmask}(hjq:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj :ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubj)}(hunsigned int nr_bitsh](j)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj%)}(hnr_bitsh]hnr_bits}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj9hhhj9hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|9hhhj9hMubah}(h]jw9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9hMhjy9hhubjS)}(hhh]jX)}(h$Test a CPU or Rx queue set in a maskh]h$Test a CPU or Rx queue set in a mask}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj:hhubah}(h]h ]h"]h$]h&]uh1jRhjy9hhhj9hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;jxj;jyjzj{uh1hhhhjhNhNubj})}(hX **Parameters** ``unsigned long j`` CPU/Rx queue index ``const unsigned long *mask`` bitmask of all cpus/rx queues ``unsigned int nr_bits`` number of bits in the bitmask **Description** Test if a CPU or Rx queue index is set in a mask of all CPU/Rx queues.h](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj;ubj)}(hhh](j)}(h'``unsigned long j`` CPU/Rx queue index h](j)}(h``unsigned long j``h]j)}(hj-;h]hunsigned long j}(hj/;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj';ubj)}(hhh]jX)}(hCPU/Rx queue indexh]hCPU/Rx queue index}(hjF;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB;hMhjC;ubah}(h]h ]h"]h$]h&]uh1jhj';ubeh}(h]h ]h"]h$]h&]uh1jhjB;hMhj$;ubj)}(h<``const unsigned long *mask`` bitmask of all cpus/rx queues h](j)}(h``const unsigned long *mask``h]j)}(hjf;h]hconst unsigned long *mask}(hjh;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`;ubj)}(hhh]jX)}(hbitmask of all cpus/rx queuesh]hbitmask of all cpus/rx queues}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{;hMhj|;ubah}(h]h ]h"]h$]h&]uh1jhj`;ubeh}(h]h ]h"]h$]h&]uh1jhj{;hMhj$;ubj)}(h7``unsigned int nr_bits`` number of bits in the bitmask h](j)}(h``unsigned int nr_bits``h]j)}(hj;h]hunsigned int nr_bits}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj;ubj)}(hhh]jX)}(hnumber of bits in the bitmaskh]hnumber of bits in the bitmask}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj$;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj;ubjX)}(hFTest if a CPU or Rx queue index is set in a mask of all CPU/Rx queues.h]hFTest if a CPU or Rx queue index is set in a mask of all CPU/Rx queues.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#netif_attr_test_online (C function)c.netif_attr_test_onlinehNtauh1hhjhhhNhNubh)}(hhh](h)}(hebool netif_attr_test_online (unsigned long j, const unsigned long *online_mask, unsigned int nr_bits)h]h)}(hdbool netif_attr_test_online(unsigned long j, const unsigned long *online_mask, unsigned int nr_bits)h](j)}(hjTh]hbool}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj-<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<hhhj,<hMubj)}(hnetif_attr_test_onlineh]j%)}(hnetif_attr_test_onlineh]hnetif_attr_test_online}(hj?<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj<hhhj,<hMubj)}(hI(unsigned long j, const unsigned long *online_mask, unsigned int nr_bits)h](j)}(hunsigned long jh](j)}(hunsignedh]hunsigned}(hj[<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW<ubj)}(h h]h }(hji<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW<ubj)}(hlongh]hlong}(hjw<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW<ubj%)}(hj9h]hj}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjW<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjS<ubj)}(h const unsigned long *online_maskh](h)}(hjh]hconst}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(hlongh]hlong}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(h online_maskh]h online_mask}(hj =hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjS<ubj)}(hunsigned int nr_bitsh](j)}(hunsignedh]hunsigned}(hj$=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj =ubj)}(h h]h }(hj2=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj =ubj)}(hinth]hint}(hj@=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj =ubj)}(h h]h }(hjN=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj =ubj%)}(hnr_bitsh]hnr_bits}(hj\=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj =ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjS<ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj<hhhj,<hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj<hhhj,<hMubah}(h]j<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,<hMhj<hhubjS)}(hhh]jX)}(hTest for online CPU/Rx queueh]hTest for online CPU/Rx queue}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=hhubah}(h]h ]h"]h$]h&]uh1jRhj<hhhj,<hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj=jxj=jyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``unsigned long j`` CPU/Rx queue index ``const unsigned long *online_mask`` bitmask for CPUs/Rx queues that are online ``unsigned int nr_bits`` number of bits in the bitmask **Return** true if a CPU/Rx queue is online.h](jX)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=ubj)}(hhh](j)}(h'``unsigned long j`` CPU/Rx queue index h](j)}(h``unsigned long j``h]j)}(hj=h]hunsigned long j}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=ubj)}(hhh]jX)}(hCPU/Rx queue indexh]hCPU/Rx queue index}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhj=ubj)}(hP``const unsigned long *online_mask`` bitmask for CPUs/Rx queues that are online h](j)}(h$``const unsigned long *online_mask``h]j)}(hj>h]h const unsigned long *online_mask}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=ubj)}(hhh]jX)}(h*bitmask for CPUs/Rx queues that are onlineh]h*bitmask for CPUs/Rx queues that are online}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj=ubj)}(h7``unsigned int nr_bits`` number of bits in the bitmask h](j)}(h``unsigned int nr_bits``h]j)}(hj9>h]hunsigned int nr_bits}(hj;>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj3>ubj)}(hhh]jX)}(hnumber of bits in the bitmaskh]hnumber of bits in the bitmask}(hjR>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjN>hMhjO>ubah}(h]h ]h"]h$]h&]uh1jhj3>ubeh}(h]h ]h"]h$]h&]uh1jhjN>hMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=ubjX)}(h **Return**h]j)}(hjt>h]hReturn}(hjv>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr>ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=ubjX)}(h!true if a CPU/Rx queue is online.h]h!true if a CPU/Rx queue is online.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_attrmask_next (C function)c.netif_attrmask_nexthNtauh1hhjhhhNhNubh)}(hhh](h)}(hYunsigned int netif_attrmask_next (int n, const unsigned long *srcp, unsigned int nr_bits)h]h)}(hXunsigned int netif_attrmask_next(int n, const unsigned long *srcp, unsigned int nr_bits)h](j)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhj>hMubj)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhj>hMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>hhhj>hMubj)}(hnetif_attrmask_nexth]j%)}(hnetif_attrmask_nexth]hnetif_attrmask_next}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj>hhhj>hMubj)}(h8(int n, const unsigned long *srcp, unsigned int nr_bits)h](j)}(hint nh](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hj0h]hn}(hj.?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ?ubj)}(hconst unsigned long *srcph](h)}(hjh]hconst}(hjF?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjB?ubj)}(h h]h }(hjS?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB?ubj)}(hunsignedh]hunsigned}(hja?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB?ubj)}(h h]h }(hjo?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB?ubj)}(hlongh]hlong}(hj}?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB?ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjB?ubj%)}(hsrcph]hsrcp}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjB?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ?ubj)}(hunsigned int nr_bitsh](j)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hnr_bitsh]hnr_bits}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ?ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj>hhhj>hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj>hhhj>hMubah}(h]j>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>hMhj>hhubjS)}(hhh]jX)}(h1get the next CPU/Rx queue in a cpu/Rx queues maskh]h1get the next CPU/Rx queue in a cpu/Rx queues mask}(hj!@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj@hhubah}(h]h ]h"]h$]h&]uh1jRhj>hhhj>hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9@jxj9@jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``int n`` CPU/Rx queue index ``const unsigned long *srcp`` the cpumask/Rx queue mask pointer ``unsigned int nr_bits`` number of bits in the bitmask **Return** next (after n) CPU/Rx queue index in the mask; >= nr_bits if no further CPUs/Rx queues set.h](jX)}(h**Parameters**h]j)}(hjC@h]h Parameters}(hjE@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA@ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=@ubj)}(hhh](j)}(h``int n`` CPU/Rx queue index h](j)}(h ``int n``h]j)}(hjb@h]hint n}(hjd@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj\@ubj)}(hhh]jX)}(hCPU/Rx queue indexh]hCPU/Rx queue index}(hj{@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw@hMhjx@ubah}(h]h ]h"]h$]h&]uh1jhj\@ubeh}(h]h ]h"]h$]h&]uh1jhjw@hMhjY@ubj)}(h@``const unsigned long *srcp`` the cpumask/Rx queue mask pointer h](j)}(h``const unsigned long *srcp``h]j)}(hj@h]hconst unsigned long *srcp}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj@ubj)}(hhh]jX)}(h!the cpumask/Rx queue mask pointerh]h!the cpumask/Rx queue mask pointer}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjY@ubj)}(h7``unsigned int nr_bits`` number of bits in the bitmask h](j)}(h``unsigned int nr_bits``h]j)}(hj@h]hunsigned int nr_bits}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj@ubj)}(hhh]jX)}(hnumber of bits in the bitmaskh]hnumber of bits in the bitmask}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjY@ubeh}(h]h ]h"]h$]h&]uh1jhj=@ubjX)}(h **Return**h]j)}(hjAh]hReturn}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=@ubjX)}(h[next (after n) CPU/Rx queue index in the mask; >= nr_bits if no further CPUs/Rx queues set.h]h[next (after n) CPU/Rx queue index in the mask; >= nr_bits if no further CPUs/Rx queues set.}(hj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj=@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$netif_attrmask_next_and (C function)c.netif_attrmask_next_andhNtauh1hhjhhhNhNubh)}(hhh](h)}(hqint netif_attrmask_next_and (int n, const unsigned long *src1p, const unsigned long *src2p, unsigned int nr_bits)h]h)}(hpint netif_attrmask_next_and(int n, const unsigned long *src1p, const unsigned long *src2p, unsigned int nr_bits)h](j)}(hinth]hint}(hjTAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPAhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjcAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPAhhhjbAhMubj)}(hnetif_attrmask_next_andh]j%)}(hnetif_attrmask_next_andh]hnetif_attrmask_next_and}(hjuAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqAubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPAhhhjbAhMubj)}(hU(int n, const unsigned long *src1p, const unsigned long *src2p, unsigned int nr_bits)h](j)}(hint nh](j)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj%)}(hj0h]hn}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hconst unsigned long *src1ph](h)}(hjh]hconst}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj)}(hunsignedh]hunsigned}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj)}(hlongh]hlong}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj;)}(hj>h]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubj%)}(hsrc1ph]hsrc1p}(hj%BhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hconst unsigned long *src2ph](h)}(hjh]hconst}(hj>BhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:Bubj)}(h h]h }(hjKBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:Bubj)}(hunsignedh]hunsigned}(hjYBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Bubj)}(h h]h }(hjgBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:Bubj)}(hlongh]hlong}(hjuBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Bubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:Bubj;)}(hj>h]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:Bubj%)}(hsrc2ph]hsrc2p}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:Bubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hunsigned int nr_bitsh](j)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj%)}(hnr_bitsh]hnr_bits}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubeh}(h]h ]h"]h$]h&]j<j=uh1jhjPAhhhjbAhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLAhhhjbAhMubah}(h]jGAah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjbAhMhjIAhhubjS)}(hhh]jX)}(h.get the next CPU/Rx queue in \*src1p & \*src2ph]h.get the next CPU/Rx queue in *src1p & *src2p}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjChhubah}(h]h ]h"]h$]h&]uh1jRhjIAhhhjbAhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1Cjxj1Cjyjzj{uh1hhhhjhNhNubj})}(hXp**Parameters** ``int n`` CPU/Rx queue index ``const unsigned long *src1p`` the first CPUs/Rx queues mask pointer ``const unsigned long *src2p`` the second CPUs/Rx queues mask pointer ``unsigned int nr_bits`` number of bits in the bitmask **Return** next (after n) CPU/Rx queue index set in both masks; >= nr_bits if no further CPUs/Rx queues set in both.h](jX)}(h**Parameters**h]j)}(hj;Ch]h Parameters}(hj=ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Cubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj5Cubj)}(hhh](j)}(h``int n`` CPU/Rx queue index h](j)}(h ``int n``h]j)}(hjZCh]hint n}(hj\ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjTCubj)}(hhh]jX)}(hCPU/Rx queue indexh]hCPU/Rx queue index}(hjsChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjoChMhjpCubah}(h]h ]h"]h$]h&]uh1jhjTCubeh}(h]h ]h"]h$]h&]uh1jhjoChMhjQCubj)}(hE``const unsigned long *src1p`` the first CPUs/Rx queues mask pointer h](j)}(h``const unsigned long *src1p``h]j)}(hjCh]hconst unsigned long *src1p}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjCubj)}(hhh]jX)}(h%the first CPUs/Rx queues mask pointerh]h%the first CPUs/Rx queues mask pointer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjQCubj)}(hF``const unsigned long *src2p`` the second CPUs/Rx queues mask pointer h](j)}(h``const unsigned long *src2p``h]j)}(hjCh]hconst unsigned long *src2p}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjCubj)}(hhh]jX)}(h&the second CPUs/Rx queues mask pointerh]h&the second CPUs/Rx queues mask pointer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM hjQCubj)}(h7``unsigned int nr_bits`` number of bits in the bitmask h](j)}(h``unsigned int nr_bits``h]j)}(hjDh]hunsigned int nr_bits}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hjCubj)}(hhh]jX)}(hnumber of bits in the bitmaskh]hnumber of bits in the bitmask}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjQCubeh}(h]h ]h"]h$]h&]uh1jhj5CubjX)}(h **Return**h]j)}(hj@Dh]hReturn}(hjBDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Dubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj5CubjX)}(hinext (after n) CPU/Rx queue index set in both masks; >= nr_bits if no further CPUs/Rx queues set in both.h]hinext (after n) CPU/Rx queue index set in both masks; >= nr_bits if no further CPUs/Rx queues set in both.}(hjVDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM hj5Cubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h netif_is_multiqueue (C function)c.netif_is_multiqueuehNtauh1hhjhhhNhNubh)}(hhh](h)}(h7bool netif_is_multiqueue (const struct net_device *dev)h]h)}(h6bool netif_is_multiqueue(const struct net_device *dev)h](j)}(hjTh]hbool}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhjDhM2ubj)}(hnetif_is_multiqueueh]j%)}(hnetif_is_multiqueueh]hnetif_is_multiqueue}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDhhhjDhM2ubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]j')}jjDsbc.netif_is_multiqueueasbuh1hhjDubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hj(EhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hdevh]hdev}(hj5EhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubah}(h]h ]h"]h$]h&]j<j=uh1jhjDhhhjDhM2ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj}DhhhjDhM2ubah}(h]jxDah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjDhM2hjzDhhubjS)}(hhh]jX)}(h+test if device has multiple transmit queuesh]h+test if device has multiple transmit queues}(hj_EhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM2hj\Ehhubah}(h]h ]h"]h$]h&]uh1jRhjzDhhhjDhM2ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwEjxjwEjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device **Description** Check if device has multiple transmit queuesh](jX)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM6hj{Eubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjEh]hconst struct net_device *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM3hjEubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhM3hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM3hjEubah}(h]h ]h"]h$]h&]uh1jhj{EubjX)}(h**Description**h]j)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM5hj{EubjX)}(h,Check if device has multiple transmit queuesh]h,Check if device has multiple transmit queues}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM4hj{Eubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_hold (C function) c.dev_holdhNtauh1hhjhhhNhNubh)}(hhh](h)}(h&void dev_hold (struct net_device *dev)h]h)}(h%void dev_hold(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^ubj)}(h h]h }(hj/FhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFhhhj.FhM^ubj)}(hdev_holdh]j%)}(hdev_holdh]hdev_hold}(hjAFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=Fubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjFhhhj.FhM^ubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj]FhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYFubj)}(h h]h }(hjjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYFubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj{FhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxFubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}FmodnameN classnameNjj!)}j$]j')}jjCFsb c.dev_holdasbuh1hhjYFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYFubj;)}(hj>h]h*}(hjFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYFubj%)}(hdevh]hdev}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYFubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUFubah}(h]h ]h"]h$]h&]j<j=uh1jhjFhhhj.FhM^ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjFhhhj.FhM^ubah}(h]jFah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.FhM^hjFhhubjS)}(hhh]jX)}(hget reference to deviceh]hget reference to device}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM^hjFhhubah}(h]h ]h"]h$]h&]uh1jRhjFhhhj.FhM^ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjFjxjFjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Hold reference to device to keep it from being freed. Try using netdev_hold() instead.h](jX)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMbhjFubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj!Gh]hstruct net_device *dev}(hj#GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM_hjGubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj:GhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6GhM_hj7Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj6GhM_hjGubah}(h]h ]h"]h$]h&]uh1jhjFubjX)}(h**Description**h]j)}(hj\Gh]h Description}(hj^GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZGubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMahjFubjX)}(hVHold reference to device to keep it from being freed. Try using netdev_hold() instead.h]hVHold reference to device to keep it from being freed. Try using netdev_hold() instead.}(hjrGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM`hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hdev_put (C function) c.dev_puthNtauh1hhjhhhNhNubh)}(hhh](h)}(h%void dev_put (struct net_device *dev)h]h)}(h$void dev_put(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhjGhMjubj)}(hdev_puth]j%)}(hdev_puth]hdev_put}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhjGhMjubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]j')}jjGsb c.dev_putasbuh1hhjGubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hj*HhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hdevh]hdev}(hj7HhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubah}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhjGhMjubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGhhhjGhMjubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGhMjhjGhhubjS)}(hhh]jX)}(hrelease reference to deviceh]hrelease reference to device}(hjaHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMjhj^Hhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhjGhMjubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjyHjxjyHjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device **Description** Release reference to device to allow it to be freed. Try using netdev_put() instead.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMnhj}Hubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjHh]hstruct net_device *dev}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMkhjHubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMkhjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMkhjHubah}(h]h ]h"]h$]h&]uh1jhj}HubjX)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMmhj}HubjX)}(hTRelease reference to device to allow it to be freed. Try using netdev_put() instead.h]hTRelease reference to device to allow it to be freed. Try using netdev_put() instead.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMlhj}Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlinkwatch_sync_dev (C function)c.linkwatch_sync_devhNtauh1hhjhhhNhNubh)}(hhh](h)}(h0void linkwatch_sync_dev (struct net_device *dev)h]h)}(h/void linkwatch_sync_dev(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj"IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj1IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIhhhj0IhMubj)}(hlinkwatch_sync_devh]j%)}(hlinkwatch_sync_devh]hlinkwatch_sync_dev}(hjCIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?Iubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjIhhhj0IhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj_IhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[Iubj)}(h h]h }(hjlIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Iubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj}IhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j')}jjEIsbc.linkwatch_sync_devasbuh1hhj[Iubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Iubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[Iubj%)}(hdevh]hdev}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[Iubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjWIubah}(h]h ]h"]h$]h&]j<j=uh1jhjIhhhj0IhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjIhhhj0IhMubah}(h]jIah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0IhMhjIhhubjS)}(hhh]jX)}(h#sync linkwatch for the given deviceh]h#sync linkwatch for the given device}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhj0IhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjIjxjIjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``struct net_device *dev`` network device to sync linkwatch for **Description** Sync linkwatch for the given device, removing it from the pending work list (if queued).h](jX)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjIubj)}(hhh]j)}(h@``struct net_device *dev`` network device to sync linkwatch for h](j)}(h``struct net_device *dev``h]j)}(hj#Jh]hstruct net_device *dev}(hj%JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Jubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjJubj)}(hhh]jX)}(h$network device to sync linkwatch forh]h$network device to sync linkwatch for}(hjh]h*}(hjFKhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hdevh]hdev}(hjSKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubah}(h]h ]h"]h$]h&]j<j=uh1jhjJhhhjJhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjJhhhjJhMubah}(h]jJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhMhjJhhubjS)}(hhh]jX)}(htest if carrier presenth]htest if carrier present}(hj}KhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjzKhhubah}(h]h ]h"]h$]h&]uh1jRhjJhhhjJhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhjhNhNubj})}(hy**Parameters** ``const struct net_device *dev`` network device **Description** Check if carrier is present on deviceh](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjKubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjKh]hconst struct net_device *dev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjKubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubjX)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjKubjX)}(h%Check if carrier is present on deviceh]h%Check if carrier is present on device}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_dormant_on (C function)c.netif_dormant_onhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_dormant_on (struct net_device *dev)h]h)}(h-void netif_dormant_on(struct net_device *dev)h](j)}(hvoidh]hvoid}(hj>LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:LhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjMLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:LhhhjLLhMubj)}(hnetif_dormant_onh]j%)}(hnetif_dormant_onh]hnetif_dormant_on}(hj_LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[Lubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:LhhhjLLhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj{LhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwLubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j')}jjaLsbc.netif_dormant_onasbuh1hhjwLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwLubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwLubj%)}(hdevh]hdev}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsLubah}(h]h ]h"]h$]h&]j<j=uh1jhj:LhhhjLLhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6LhhhjLLhMubah}(h]j1Lah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjLLhMhj3LhhubjS)}(hhh]jX)}(hmark device as dormant.h]hmark device as dormant.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjLhhubah}(h]h ]h"]h$]h&]uh1jRhj3LhhhjLLhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMjxjMjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device **Description** Mark device as dormant (as per RFC2863). The dormant state indicates that the relevant interface is not actually in a condition to pass packets (i.e., it is not 'up') but is in a "pending" state, waiting for some external event. For "on- demand" interfaces, this new state identifies the situation where the interface is waiting for events to place it in the up state.h](jX)}(h**Parameters**h]j)}(hj Mh]h Parameters}(hj"MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjMubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj?Mh]hstruct net_device *dev}(hjAMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Mubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj9Mubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjXMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjTMhMhjUMubah}(h]h ]h"]h$]h&]uh1jhj9Mubeh}(h]h ]h"]h$]h&]uh1jhjTMhMhj6Mubah}(h]h ]h"]h$]h&]uh1jhjMubjX)}(h**Description**h]j)}(hjzMh]h Description}(hj|MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxMubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjMubjX)}(h(Mark device as dormant (as per RFC2863).h]h(Mark device as dormant (as per RFC2863).}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjMubjX)}(hXHThe dormant state indicates that the relevant interface is not actually in a condition to pass packets (i.e., it is not 'up') but is in a "pending" state, waiting for some external event. For "on- demand" interfaces, this new state identifies the situation where the interface is waiting for events to place it in the up state.h]hXTThe dormant state indicates that the relevant interface is not actually in a condition to pass packets (i.e., it is not ‘up’) but is in a “pending” state, waiting for some external event. For “on- demand” interfaces, this new state identifies the situation where the interface is waiting for events to place it in the up state.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_dormant_off (C function)c.netif_dormant_offhNtauh1hhjhhhNhNubh)}(hhh](h)}(h/void netif_dormant_off (struct net_device *dev)h]h)}(h.void netif_dormant_off(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhhjMhMubj)}(hnetif_dormant_offh]j%)}(hnetif_dormant_offh]hnetif_dormant_off}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjMhhhjMhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj)NhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&Nubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj+NmodnameN classnameNjj!)}j$]j')}jjMsbc.netif_dormant_offasbuh1hhjNubj)}(h h]h }(hjINhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNubj;)}(hj>h]h*}(hjWNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNubj%)}(hdevh]hdev}(hjdNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjNubah}(h]h ]h"]h$]h&]j<j=uh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjMhMubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhMhjMhhubjS)}(hhh]jX)}(hset device as not dormant.h]hset device as not dormant.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhjMhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNjxjNjyjzj{uh1hhhhjhNhNubj})}(hm**Parameters** ``struct net_device *dev`` network device **Description** Device is not in dormant state.h](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjNh]hstruct net_device *dev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubjX)}(h**Description**h]j)}(hj Oh]h Description}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNubjX)}(hDevice is not in dormant state.h]hDevice is not in dormant state.}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_dormant (C function)c.netif_dormanthNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool netif_dormant (const struct net_device *dev)h]h)}(h0bool netif_dormant(const struct net_device *dev)h](j)}(hjTh]hbool}(hjOOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKOhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj]OhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKOhhhj\OhMubj)}(h netif_dormanth]j%)}(h netif_dormanth]h netif_dormant}(hjoOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKOhhhj\OhMubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjOmodnameN classnameNjj!)}j$]j')}jjqOsbc.netif_dormantasbuh1hhjOubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjOhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hdevh]hdev}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubah}(h]h ]h"]h$]h&]j<j=uh1jhjKOhhhj\OhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGOhhhj\OhMubah}(h]jBOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\OhMhjDOhhubjS)}(hhh]jX)}(htest if device is dormanth]htest if device is dormant}(hj)PhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj&Phhubah}(h]h ]h"]h$]h&]uh1jRhjDOhhhj\OhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjAPjxjAPjyjzj{uh1hhhhjhNhNubj})}(ho**Parameters** ``const struct net_device *dev`` network device **Description** Check if device is dormant.h](jX)}(h**Parameters**h]j)}(hjKPh]h Parameters}(hjMPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIPubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjEPubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjjPh]hconst struct net_device *dev}(hjlPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhPubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjdPubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhMhjPubah}(h]h ]h"]h$]h&]uh1jhjdPubeh}(h]h ]h"]h$]h&]uh1jhjPhMhjaPubah}(h]h ]h"]h$]h&]uh1jhjEPubjX)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjEPubjX)}(hCheck if device is dormant.h]hCheck if device is dormant.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjEPubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_testing_on (C function)c.netif_testing_onhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void netif_testing_on (struct net_device *dev)h]h)}(h-void netif_testing_on(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjPhMubj)}(hnetif_testing_onh]j%)}(hnetif_testing_onh]hnetif_testing_on}(hj QhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjPhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj'QhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#Qubj)}(h h]h }(hj4QhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Qubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjEQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGQmodnameN classnameNjj!)}j$]j')}jj Qsbc.netif_testing_onasbuh1hhj#Qubj)}(h h]h }(hjeQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Qubj;)}(hj>h]h*}(hjsQhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#Qubj%)}(hdevh]hdev}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#Qubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjQubah}(h]h ]h"]h$]h&]j<j=uh1jhjPhhhjPhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjPhhhjPhMubah}(h]jPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjPhMhjPhhubjS)}(hhh]jX)}(hmark device as under test.h]hmark device as under test.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1jRhjPhhhjPhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjQjxjQjyjzj{uh1hhhhjhNhNubj})}(hX4**Parameters** ``struct net_device *dev`` network device **Description** Mark device as under test (as per RFC2863). The testing state indicates that some test(s) must be performed on the interface. After completion, of the test, the interface state will change to up, dormant, or down, as appropriate.h](jX)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjQh]hstruct net_device *dev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjRhMhjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubjX)}(h**Description**h]j)}(hj&Rh]h Description}(hj(RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Rubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjQubjX)}(h+Mark device as under test (as per RFC2863).h]h+Mark device as under test (as per RFC2863).}(hjh]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hdevh]hdev}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubah}(h]h ]h"]h$]h&]j<j=uh1jhjvRhhhjRhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrRhhhjRhMubah}(h]jmRah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMhjoRhhubjS)}(hhh]jX)}(hset device as not under test.h]hset device as not under test.}(hj:ShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj7Shhubah}(h]h ]h"]h$]h&]uh1jRhjoRhhhjRhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjRSjxjRSjyjzj{uh1hhhhjhNhNubj})}(hm**Parameters** ``struct net_device *dev`` network device **Description** Device is not in testing state.h](jX)}(h**Parameters**h]j)}(hj\Sh]h Parameters}(hj^ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZSubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVSubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hj{Sh]hstruct net_device *dev}(hj}ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjySubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjuSubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShMhjSubah}(h]h ]h"]h$]h&]uh1jhjuSubeh}(h]h ]h"]h$]h&]uh1jhjShMhjrSubah}(h]h ]h"]h$]h&]uh1jhjVSubjX)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVSubjX)}(hDevice is not in testing state.h]hDevice is not in testing state.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_testing (C function)c.netif_testinghNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool netif_testing (const struct net_device *dev)h]h)}(h0bool netif_testing(const struct net_device *dev)h](j)}(hjTh]hbool}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjShhhjThMubj)}(h netif_testingh]j%)}(h netif_testingh]h netif_testing}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjShhhjThMubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hj7ThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3Tubj)}(h h]h }(hjDThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3Tubh)}(hjh]hstruct}(hjRThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3Tubj)}(h h]h }(hj_ThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3Tubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjpThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmTubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjrTmodnameN classnameNjj!)}j$]j')}jjTsbc.netif_testingasbuh1hhj3Tubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3Tubj;)}(hj>h]h*}(hjThhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3Tubj%)}(hdevh]hdev}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3Tubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/Tubah}(h]h ]h"]h$]h&]j<j=uh1jhjShhhjThMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjShhhjThMubah}(h]jSah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThMhjShhubjS)}(hhh]jX)}(htest if device is under testh]htest if device is under test}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjThhubah}(h]h ]h"]h$]h&]uh1jRhjShhhjThMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjTjxjTjyjzj{uh1hhhhjhNhNubj})}(hq**Parameters** ``const struct net_device *dev`` network device **Description** Check if device is under testh](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjTubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjUh]hconst struct net_device *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjUubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hj/UhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+UhMhj,Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj+UhMhj Uubah}(h]h ]h"]h$]h&]uh1jhjTubjX)}(h**Description**h]j)}(hjQUh]h Description}(hjSUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOUubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjTubjX)}(hCheck if device is under testh]hCheck if device is under test}(hjgUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_oper_up (C function)c.netif_oper_uphNtauh1hhjhhhNhNubh)}(hhh](h)}(h1bool netif_oper_up (const struct net_device *dev)h]h)}(h0bool netif_oper_up(const struct net_device *dev)h](j)}(hjTh]hbool}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjUhMubj)}(h netif_oper_uph]j%)}(h netif_oper_uph]h netif_oper_up}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjUhhhjUhMubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj VhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj VmodnameN classnameNjj!)}j$]j')}jjUsbc.netif_oper_upasbuh1hhjUubj)}(h h]h }(hj+VhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hj9VhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hdevh]hdev}(hjFVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubah}(h]h ]h"]h$]h&]j<j=uh1jhjUhhhjUhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUhhhjUhMubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjUhMhjUhhubjS)}(hhh]jX)}(htest if device is operationalh]htest if device is operational}(hjpVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjmVhhubah}(h]h ]h"]h$]h&]uh1jRhjUhhhjUhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjVjxjVjyjzj{uh1hhhhjhNhNubj})}(hs**Parameters** ``const struct net_device *dev`` network device **Description** Check if carrier is operationalh](jX)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjVh]hconst struct net_device *dev}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjVubah}(h]h ]h"]h$]h&]uh1jhjVubjX)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVubjX)}(hCheck if carrier is operationalh]hCheck if carrier is operational}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!netif_device_present (C function)c.netif_device_presenthNtauh1hhjhhhNhNubh)}(hhh](h)}(h8bool netif_device_present (const struct net_device *dev)h]h)}(h7bool netif_device_present(const struct net_device *dev)h](j)}(hjTh]hbool}(hj1WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-WhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj?WhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-Whhhj>WhMubj)}(hnetif_device_presenth]j%)}(hnetif_device_presenth]hnetif_device_present}(hjQWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-Whhhj>WhMubj)}(h(const struct net_device *dev)h]j)}(hconst struct net_device *devh](h)}(hjh]hconst}(hjmWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiWubj)}(h h]h }(hjzWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiWubh)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiWubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjWmodnameN classnameNjj!)}j$]j')}jjSWsbc.netif_device_presentasbuh1hhjiWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiWubj;)}(hj>h]h*}(hjWhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiWubj%)}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeWubah}(h]h ]h"]h$]h&]j<j=uh1jhj-Whhhj>WhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj)Whhhj>WhMubah}(h]j$Wah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj>WhMhj&WhhubjS)}(hhh]jX)}(his device available or removedh]his device available or removed}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhj&Whhhj>WhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#Xjxj#Xjyjzj{uh1hhhhjhNhNubj})}(h**Parameters** ``const struct net_device *dev`` network device **Description** Check if device has not been removed from system.h](jX)}(h**Parameters**h]j)}(hj-Xh]h Parameters}(hj/XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Xubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj'Xubj)}(hhh]j)}(h0``const struct net_device *dev`` network device h](j)}(h ``const struct net_device *dev``h]j)}(hjLXh]hconst struct net_device *dev}(hjNXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJXubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjFXubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjeXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjaXhMhjbXubah}(h]h ]h"]h$]h&]uh1jhjFXubeh}(h]h ]h"]h$]h&]uh1jhjaXhMhjCXubah}(h]h ]h"]h$]h&]uh1jhj'XubjX)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj'XubjX)}(h1Check if device has not been removed from system.h]h1Check if device has not been removed from system.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj'Xubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnetif_tx_lock (C function)c.netif_tx_lockhNtauh1hhjhhhNhNubh)}(hhh](h)}(h+void netif_tx_lock (struct net_device *dev)h]h)}(h*void netif_tx_lock(struct net_device *dev)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhjXhMubj)}(h netif_tx_lockh]j%)}(h netif_tx_lockh]h netif_tx_lock}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXhhhjXhMubj)}(h(struct net_device *dev)h]j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj YhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj'YhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$Yubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj)YmodnameN classnameNjj!)}j$]j')}jjXsbc.netif_tx_lockasbuh1hhjYubj)}(h h]h }(hjGYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjUYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hdevh]hdev}(hjbYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjYubah}(h]h ]h"]h$]h&]j<j=uh1jhjXhhhjXhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXhhhjXhMubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhMhjXhhubjS)}(hhh]jX)}(h!grab network device transmit lockh]h!grab network device transmit lock}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhjXhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjYjxjYjyjzj{uh1hhhhjhNhNubj})}(hn**Parameters** ``struct net_device *dev`` network device **Description** Get network device transmit lockh](jX)}(h**Parameters**h]j)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYubj)}(hhh]j)}(h*``struct net_device *dev`` network device h](j)}(h``struct net_device *dev``h]j)}(hjYh]hstruct net_device *dev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYubj)}(hhh]jX)}(hnetwork deviceh]hnetwork device}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubjX)}(h**Description**h]j)}(hjZh]h Description}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYubjX)}(h Get network device transmit lockh]h Get network device transmit lock}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_uc_sync (C function)c.__dev_uc_synchNtauh1hhjhhhNhNubh)}(hhh](h)}(hint __dev_uc_sync (struct net_device *dev, int (*sync)(struct net_device *, const unsigned char *), int (*unsync)(struct net_device *, const unsigned char *))h]h)}(hint __dev_uc_sync(struct net_device *dev, int (*sync)(struct net_device*, const unsigned char*), int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hinth]hint}(hjMZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIZhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM|ubj)}(h h]h }(hj\ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIZhhhj[ZhM|ubj)}(h __dev_uc_synch]j%)}(h __dev_uc_synch]h __dev_uc_sync}(hjnZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjIZhhhj[ZhM|ubj)}(h(struct net_device *dev, int (*sync)(struct net_device*, const unsigned char*), int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]j')}jjpZsbc.__dev_uc_syncasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj%)}(hdevh]hdev}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(h5int (*sync)(struct net_device*, const unsigned char*)h](j)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj [hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj;)}(hjmh]h(}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj;)}(hj>h]h*}(hj%[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj%)}(hsynch]hsync}(hj2[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubj;)}(hjh]h)}(hj@[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj;)}(hjmh]h(}(hjM[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubh)}(hjh]hstruct}(hjZ[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjg[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjx[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hju[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjz[modnameN classnameNjj!)}j$]jZc.__dev_uc_syncasbuh1hhjZubj;)}(hj>h]h*}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj;)}(hjdh]h,}(hj[hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hjh]hconst}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj)}(hunsignedh]hunsigned}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj)}(hcharh]hchar}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj;)}(hjh]h)}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(h7int (*unsync)(struct net_device*, const unsigned char*)h](j)}(hinth]hint}(hj(\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$\ubj)}(h h]h }(hj6\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$\ubj;)}(hjmh]h(}(hjD\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj;)}(hj>h]h*}(hjQ\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj%)}(hunsynch]hunsync}(hj^\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$\ubj;)}(hjh]h)}(hjl\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj;)}(hjmh]h(}(hjy\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubh)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$\ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]jZc.__dev_uc_syncasbuh1hhj$\ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj;)}(hjdh]h,}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$\ubh)}(hjh]hconst}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$\ubj)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$\ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$\ubj)}(hcharh]hchar}(hj!]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$\ubj;)}(hj>h]h*}(hj/]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubj;)}(hjh]h)}(hj<]hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubeh}(h]h ]h"]h$]h&]j<j=uh1jhjIZhhhj[ZhM|ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjEZhhhj[ZhM|ubah}(h]j@Zah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[ZhM|hjBZhhubjS)}(hhh]jX)}(h!Synchronize device's unicast listh]h#Synchronize device’s unicast list}(hje]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM|hjb]hhubah}(h]h ]h"]h$]h&]uh1jRhjBZhhhj[ZhM|ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj}]jxj}]jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to sync ``int (*sync)(struct net_device *, const unsigned char *)`` function to call if address should be added ``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed **Description** Add newly added addresses to the interface, and release addresses that have been deleted.h](jX)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj]ubj)}(hhh](j)}(h*``struct net_device *dev`` device to sync h](j)}(h``struct net_device *dev``h]j)}(hj]h]hstruct net_device *dev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM}hj]ubj)}(hhh]jX)}(hdevice to synch]hdevice to sync}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hM}hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM}hj]ubj)}(hh``int (*sync)(struct net_device *, const unsigned char *)`` function to call if address should be added h](j)}(h;``int (*sync)(struct net_device *, const unsigned char *)``h]j)}(hj]h]h7int (*sync)(struct net_device *, const unsigned char *)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhM~hj]ubj)}(hhh]jX)}(h+function to call if address should be addedh]h+function to call if address should be added}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hM~hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hM~hj]ubj)}(hl``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed h](j)}(h=``int (*unsync)(struct net_device *, const unsigned char *)``h]j)}(hj^h]h9int (*unsync)(struct net_device *, const unsigned char *)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj^ubj)}(hhh]jX)}(h-function to call if address should be removedh]h-function to call if address should be removed}(hj1^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-^hMhj.^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj-^hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]ubjX)}(h**Description**h]j)}(hjS^h]h Description}(hjU^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ^ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj]ubj )}(hYAdd newly added addresses to the interface, and release addresses that have been deleted.h]jX)}(hYAdd newly added addresses to the interface, and release addresses that have been deleted.h]hYAdd newly added addresses to the interface, and release addresses that have been deleted.}(hjm^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhji^ubah}(h]h ]h"]h$]h&]uh1j hj{^hMhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_uc_unsync (C function)c.__dev_uc_unsynchNtauh1hhjhhhNhNubh)}(hhh](h)}(hhvoid __dev_uc_unsync (struct net_device *dev, int (*unsync)(struct net_device *, const unsigned char *))h]h)}(hevoid __dev_uc_unsync(struct net_device *dev, int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhj^hMubj)}(h__dev_uc_unsynch]j%)}(h__dev_uc_unsynch]h__dev_uc_unsync}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhj^hMubj)}(hQ(struct net_device *dev, int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j')}jj^sbc.__dev_uc_unsyncasbuh1hhj^ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hj+_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hdevh]hdev}(hj8_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubj)}(h7int (*unsync)(struct net_device*, const unsigned char*)h](j)}(hinth]hint}(hjQ_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM_ubj)}(h h]h }(hj__hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM_ubj;)}(hjmh]h(}(hjm_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj;)}(hj>h]h*}(hjz_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj%)}(hunsynch]hunsync}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM_ubj;)}(hjh]h)}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj;)}(hjmh]h(}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubh)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjM_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM_ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj_modnameN classnameNjj!)}j$]j_c.__dev_uc_unsyncasbuh1hhjM_ubj;)}(hj>h]h*}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj;)}(hjdh]h,}(hj_hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM_ubh)}(hjh]hconst}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjM_ubj)}(h h]h }(hj `hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM_ubj)}(hunsignedh]hunsigned}(hj.`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM_ubj)}(h h]h }(hj<`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM_ubj)}(hcharh]hchar}(hjJ`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM_ubj;)}(hj>h]h*}(hjX`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubj;)}(hjh]h)}(hje`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhj^hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhj^hMubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^hMhj^hhubjS)}(hhh]jX)}(h)Remove synchronized addresses from deviceh]h)Remove synchronized addresses from device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`hhubah}(h]h ]h"]h$]h&]uh1jRhj^hhhj^hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`jxj`jyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to sync ``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed **Description** Remove all addresses that were added to the device by dev_uc_sync().h](jX)}(h**Parameters**h]j)}(hj`h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubj)}(hhh](j)}(h*``struct net_device *dev`` device to sync h](j)}(h``struct net_device *dev``h]j)}(hj`h]hstruct net_device *dev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubj)}(hhh]jX)}(hdevice to synch]hdevice to sync}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj`ubj)}(hl``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed h](j)}(h=``int (*unsync)(struct net_device *, const unsigned char *)``h]j)}(hjah]h9int (*unsync)(struct net_device *, const unsigned char *)}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjaubj)}(hhh]jX)}(h-function to call if address should be removedh]h-function to call if address should be removed}(hj!ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjX)}(h**Description**h]j)}(hjCah]h Description}(hjEahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAaubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj`ubj )}(hDRemove all addresses that were added to the device by dev_uc_sync().h]jX)}(hj[ah]hDRemove all addresses that were added to the device by dev_uc_sync().}(hj]ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjYaubah}(h]h ]h"]h$]h&]uh1j hjjahMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__dev_mc_sync (C function)c.__dev_mc_synchNtauh1hhjhhhNhNubh)}(hhh](h)}(hint __dev_mc_sync (struct net_device *dev, int (*sync)(struct net_device *, const unsigned char *), int (*unsync)(struct net_device *, const unsigned char *))h]h)}(hint __dev_mc_sync(struct net_device *dev, int (*sync)(struct net_device*, const unsigned char*), int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjahhhjahMubj)}(h __dev_mc_synch]j%)}(h __dev_mc_synch]h __dev_mc_sync}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjahhhjahMubj)}(h(struct net_device *dev, int (*sync)(struct net_device*, const unsigned char*), int (*unsync)(struct net_device*, const unsigned char*))h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j')}jjasbc.__dev_mc_syncasbuh1hhjaubj)}(h h]h }(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjaubj%)}(hdevh]hdev}(hj'bhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjaubj)}(h5int (*sync)(struct net_device*, const unsigned char*)h](j)}(hinth]hint}(hj@bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh]h*}(hjibhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjh]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjh]h*}(hjGchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjh]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubj%)}(hunsynch]hunsync}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhcubj;)}(hjh]h)}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubj;)}(hjmh]h(}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubh)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhcubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]jbc.__dev_mc_syncasbuh1hhjhcubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubj;)}(hjdh]h,}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubj)}(h h]h }(hj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhcubh)}(hjh]hconst}(hj.dhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhcubj)}(h h]h }(hj;dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhcubj)}(hunsignedh]hunsigned}(hjIdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhcubj)}(h h]h }(hjWdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhcubj)}(hcharh]hchar}(hjedhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhcubj;)}(hj>h]h*}(hjsdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubj;)}(hjh]h)}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjaubeh}(h]h ]h"]h$]h&]j<j=uh1jhjahhhjahMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjahMubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahMhjahhubjS)}(hhh]jX)}(h#Synchronize device's multicast listh]h%Synchronize device’s multicast list}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjdhhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjahMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to sync ``int (*sync)(struct net_device *, const unsigned char *)`` function to call if address should be added ``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed **Description** Add newly added addresses to the interface, and release addresses that have been deleted.h](jX)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjdubj)}(hhh](j)}(h*``struct net_device *dev`` device to sync h](j)}(h``struct net_device *dev``h]j)}(hjdh]hstruct net_device *dev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjdubj)}(hhh]jX)}(hdevice to synch]hdevice to sync}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjdubj)}(hh``int (*sync)(struct net_device *, const unsigned char *)`` function to call if address should be added h](j)}(h;``int (*sync)(struct net_device *, const unsigned char *)``h]j)}(hj#eh]h7int (*sync)(struct net_device *, const unsigned char *)}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!eubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjeubj)}(hhh]jX)}(h+function to call if address should be addedh]h+function to call if address should be added}(hjfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCfmodnameN classnameNjj!)}j$]j')}jj fsbc.__dev_mc_unsyncasbuh1hhjfubj)}(h h]h }(hjafhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hj>h]h*}(hjofhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hdevh]hdev}(hj|fhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubj)}(h7int (*unsync)(struct net_device*, const unsigned char*)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj;)}(hjmh]h(}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj;)}(hj>h]h*}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj%)}(hunsynch]hunsync}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubj;)}(hjh]h)}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj;)}(hjmh]h(}(hjfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubh)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]j]fc.__dev_mc_unsyncasbuh1hhjfubj;)}(hj>h]h*}(hj/ghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj;)}(hjdh]h,}(hjh]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubj;)}(hjh]h)}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjfubeh}(h]h ]h"]h$]h&]j<j=uh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjehhhjehMubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehMhjehhubjS)}(hhh]jX)}(h)Remove synchronized addresses from deviceh]h)Remove synchronized addresses from device}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjghhubah}(h]h ]h"]h$]h&]uh1jRhjehhhjehMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjgjxjgjyjzj{uh1hhhhjhNhNubj})}(hX**Parameters** ``struct net_device *dev`` device to sync ``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed **Description** Remove all addresses that were added to the device by dev_mc_sync().h](jX)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubj)}(hhh](j)}(h*``struct net_device *dev`` device to sync h](j)}(h``struct net_device *dev``h]j)}(hjhh]hstruct net_device *dev}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhj hubj)}(hhh]jX)}(hdevice to synch]hdevice to sync}(hj,hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hhMhj)hubah}(h]h ]h"]h$]h&]uh1jhj hubeh}(h]h ]h"]h$]h&]uh1jhj(hhMhj hubj)}(hl``int (*unsync)(struct net_device *, const unsigned char *)`` function to call if address should be removed h](j)}(h=``int (*unsync)(struct net_device *, const unsigned char *)``h]j)}(hjLhh]h9int (*unsync)(struct net_device *, const unsigned char *)}(hjNhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJhubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjFhubj)}(hhh]jX)}(h-function to call if address should be removedh]h-function to call if address should be removed}(hjehhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahhMhjbhubah}(h]h ]h"]h$]h&]uh1jhjFhubeh}(h]h ]h"]h$]h&]uh1jhjahhMhj hubeh}(h]h ]h"]h$]h&]uh1jhjgubjX)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjgubj )}(hDRemove all addresses that were added to the device by dev_mc_sync().h]jX)}(hjhh]hDRemove all addresses that were added to the device by dev_mc_sync().}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:104: ./include/linux/netdevice.hhMhjhubah}(h]h ]h"]h$]h&]uh1j hjhhMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hnet_shaper (C struct) c.net_shaperhNtauh1hhjhhhY/var/lib/git/docbuild/linux/Documentation/networking/kapi:107: ./include/net/net_shaper.hhNubh)}(hhh](h)}(h net_shaperh]h)}(hstruct net_shaperh](h)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhhY/var/lib/git/docbuild/linux/Documentation/networking/kapi:107: ./include/net/net_shaper.hhKubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhjhhKubj)}(h net_shaperh]j%)}(hjhh]h net_shaper}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhjhhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhjhhKubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhhKhjhhhubjS)}(hhh]jX)}(hMrepresents a shaping node on the NIC H/W zeroed field are considered not set.h]hMrepresents a shaping node on the NIC H/W zeroed field are considered not set.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhY/var/lib/git/docbuild/linux/Documentation/networking/kapi:107: ./include/net/net_shaper.hhK!hjihhubah}(h]h ]h"]h$]h&]uh1jRhjhhhhjhhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj0ijxj0ijyjzj{uh1hhhhjhjhhNubj})}(hX**Definition**:: struct net_shaper { struct net_shaper_handle parent; struct net_shaper_handle handle; enum net_shaper_metric metric; u64 bw_min; u64 bw_max; u64 burst; u32 priority; u32 weight; }; **Members** ``parent`` Unique identifier for the shaper parent, usually implied ``handle`` Unique identifier for this shaper ``metric`` Specify if the rate limits refers to PPS or BPS ``bw_min`` Minimum guaranteed rate for this shaper ``bw_max`` Maximum peak rate allowed for this shaper ``burst`` Maximum burst for the peek rate of this shaper ``priority`` Scheduling priority for this shaper ``weight`` Scheduling weight for this shaperh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjh]h*}(hjTohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hphydevh]hphydev}(hjaohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjoubah}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjnhKtubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjnhKtubah}(h]jnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhKthjnhhubjS)}(hhh]jX)}(h8Convenience function to print out the current phy statush]h8Convenience function to print out the current phy status}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKthjohhubah}(h]h ]h"]h$]h&]uh1jRhjnhhhjnhKtubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKxhjoubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjoh]hstruct phy_device *phydev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKzhjoubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKuhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohKzhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_get_rate_matching (C function)c.phy_get_rate_matchinghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hLint phy_get_rate_matching (struct phy_device *phydev, phy_interface_t iface)h]h)}(hKint phy_get_rate_matching(struct phy_device *phydev, phy_interface_t iface)h](j)}(hinth]hint}(hj&phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"phhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKubj)}(h h]h }(hj5phhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"phhhj4phKubj)}(hphy_get_rate_matchingh]j%)}(hphy_get_rate_matchingh]hphy_get_rate_matching}(hjGphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"phhhj4phKubj)}(h2(struct phy_device *phydev, phy_interface_t iface)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjcphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_pubj)}(h h]h }(hjpphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_pubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~pubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]j')}jjIpsbc.phy_get_rate_matchingasbuh1hhj_pubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_pubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_pubj%)}(hphydevh]hphydev}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_pubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[pubj)}(hphy_interface_t ifaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]jpc.phy_get_rate_matchingasbuh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj%)}(hifaceh]hiface}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[pubeh}(h]h ]h"]h$]h&]j<j=uh1jhj"phhhj4phKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjphhhj4phKubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj4phKhjphhubjS)}(hhh]jX)}(h'determine if rate matching is supportedh]h'determine if rate matching is supported}(hj.qhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj+qhhubah}(h]h ]h"]h$]h&]uh1jRhjphhhj4phKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjFqjxjFqjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` The phy device to return rate matching for ``phy_interface_t iface`` The interface mode to use **Description** This determines the type of rate matching (if any) that **phy** supports using **iface**. **iface** may be ``PHY_INTERFACE_MODE_NA`` to determine if any interface supports rate matching. **Return** The type of rate matching **phy** supports for **iface**, or ``RATE_MATCH_NONE``.h](jX)}(h**Parameters**h]j)}(hjPqh]h Parameters}(hjRqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNqubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjJqubj)}(hhh](j)}(hI``struct phy_device *phydev`` The phy device to return rate matching for h](j)}(h``struct phy_device *phydev``h]j)}(hjoqh]hstruct phy_device *phydev}(hjqqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmqubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjiqubj)}(hhh]jX)}(h*The phy device to return rate matching forh]h*The phy device to return rate matching for}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjiqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjfqubj)}(h4``phy_interface_t iface`` The interface mode to use h](j)}(h``phy_interface_t iface``h]j)}(hjqh]hphy_interface_t iface}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjqubj)}(hhh]jX)}(hThe interface mode to useh]hThe interface mode to use}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhKhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhKhjfqubeh}(h]h ]h"]h$]h&]uh1jhjJqubjX)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjJqubjX)}(hThis determines the type of rate matching (if any) that **phy** supports using **iface**. **iface** may be ``PHY_INTERFACE_MODE_NA`` to determine if any interface supports rate matching.h](h8This determines the type of rate matching (if any) that }(hjqhhhNhNubj)}(h**phy**h]hphy}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh supports using }(hjqhhhNhNubj)}(h **iface**h]hiface}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh. }(hjqhhhNhNubj)}(h **iface**h]hiface}(hj%rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh may be }(hjqhhhNhNubj)}(h``PHY_INTERFACE_MODE_NA``h]hPHY_INTERFACE_MODE_NA}(hj7rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh6 to determine if any interface supports rate matching.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjJqubjX)}(h **Return**h]j)}(hjRrh]hReturn}(hjTrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPrubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjJqubjX)}(hQThe type of rate matching **phy** supports for **iface**, or ``RATE_MATCH_NONE``.h](hThe type of rate matching }(hjhrhhhNhNubj)}(h**phy**h]hphy}(hjprhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhrubh supports for }(hjhrhhhNhNubj)}(h **iface**h]hiface}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhrubh, or }(hjhrhhhNhNubj)}(h``RATE_MATCH_NONE``h]hRATE_MATCH_NONE}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhrubh.}(hjhrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjJqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_restart_aneg (C function)c.phy_restart_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0int phy_restart_aneg (struct phy_device *phydev)h]h)}(h/int phy_restart_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhjrhKubj)}(hphy_restart_anegh]j%)}(hphy_restart_anegh]hphy_restart_aneg}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrhhhjrhKubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj shhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjsubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj(shhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%subah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*smodnameN classnameNjj!)}j$]j')}jjrsbc.phy_restart_anegasbuh1hhjsubj)}(h h]h }(hjHshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj;)}(hj>h]h*}(hjVshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjsubj%)}(hphydevh]hphydev}(hjcshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubah}(h]h ]h"]h$]h&]j<j=uh1jhjrhhhjrhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrhhhjrhKubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjrhKhjrhhubjS)}(hhh]jX)}(hrestart auto-negotiationh]hrestart auto-negotiation}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjshhubah}(h]h ]h"]h$]h&]uh1jRhjrhhhjrhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Restart the autonegotiation on **phydev**. Returns >= 0 on success or negative errno on error.h](jX)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjsubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjsh]hstruct phy_device *phydev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjsubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshKhjsubah}(h]h ]h"]h$]h&]uh1jhjsubjX)}(h**Description**h]j)}(hj th]h Description}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjsubjX)}(h_Restart the autonegotiation on **phydev**. Returns >= 0 on success or negative errno on error.h](hRestart the autonegotiation on }(hjthhhNhNubj)}(h **phydev**h]hphydev}(hj'thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh6. Returns >= 0 on success or negative errno on error.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_aneg_done (C function)c.phy_aneg_donehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h-int phy_aneg_done (struct phy_device *phydev)h]h)}(h,int phy_aneg_done(struct phy_device *phydev)h](j)}(hinth]hint}(hj`thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\thhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKubj)}(h h]h }(hjothhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\thhhjnthKubj)}(h phy_aneg_doneh]j%)}(h phy_aneg_doneh]h phy_aneg_done}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}tubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj\thhhjnthKubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j')}jjtsbc.phy_aneg_doneasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hjthhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(hphydevh]hphydev}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubah}(h]h ]h"]h$]h&]j<j=uh1jhj\thhhjnthKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXthhhjnthKubah}(h]jStah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnthKhjUthhubjS)}(hhh]jX)}(hreturn auto-negotiation statush]hreturn auto-negotiation status}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjuhhubah}(h]h ]h"]h$]h&]uh1jRhjUthhhjnthKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8ujxj8ujyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Return the auto-negotiation status from this **phydev** Returns > 0 on success or < 0 on error. 0 means that auto-negotiation is still pending.h](jX)}(h**Parameters**h]j)}(hjBuh]h Parameters}(hjDuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@uubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj 0 on success or < 0 on error. 0 means that auto-negotiation is still pending.h](h-Return the auto-negotiation status from this }(hjuhhhNhNubj)}(h **phydev**h]hphydev}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubhX Returns > 0 on success or < 0 on error. 0 means that auto-negotiation is still pending.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjh]h*}(hjvhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hfeaturesh]hfeatures}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'vubeh}(h]h ]h"]h$]h&]j<j=uh1jhjuhhhjvhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjvhKubah}(h]juah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjvhKhjuhhubjS)}(hhh]jX)}(hScheck if there is a valid PHY setting which matches speed, duplex, and feature maskh]hScheck if there is a valid PHY setting which matches speed, duplex, and feature mask}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjwhhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjvhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj wjxj wjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``int speed`` speed to match ``int duplex`` duplex to match ``unsigned long *features`` A mask of the valid settings **Description** Returns true if there is a valid setting, false otherwise.h](jX)}(h**Parameters**h]j)}(hj*wh]h Parameters}(hj,whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(wubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj$wubj)}(hhh](j)}(h``int speed`` speed to match h](j)}(h ``int speed``h]j)}(hjIwh]h int speed}(hjKwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGwubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjCwubj)}(hhh]jX)}(hspeed to matchh]hspeed to match}(hjbwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^whKhj_wubah}(h]h ]h"]h$]h&]uh1jhjCwubeh}(h]h ]h"]h$]h&]uh1jhj^whKhj@wubj)}(h``int duplex`` duplex to match h](j)}(h``int duplex``h]j)}(hjwh]h int duplex}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj|wubj)}(hhh]jX)}(hduplex to matchh]hduplex to match}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhKhjwubah}(h]h ]h"]h$]h&]uh1jhj|wubeh}(h]h ]h"]h$]h&]uh1jhjwhKhj@wubj)}(h9``unsigned long *features`` A mask of the valid settings h](j)}(h``unsigned long *features``h]j)}(hjwh]hunsigned long *features}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhjwubj)}(hhh]jX)}(hA mask of the valid settingsh]hA mask of the valid settings}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhKhjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhKhj@wubeh}(h]h ]h"]h$]h&]uh1jhj$wubjX)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj$wubjX)}(h:Returns true if there is a valid setting, false otherwise.h]h:Returns true if there is a valid setting, false otherwise.}(hj xhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chKhj$wubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_mii_ioctl (C function)c.phy_mii_ioctlhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hIint phy_mii_ioctl (struct phy_device *phydev, struct ifreq *ifr, int cmd)h]h)}(hHint phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd)h](j)}(hinth]hint}(hj;xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7xhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM-ubj)}(h h]h }(hjJxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7xhhhjIxhM-ubj)}(h phy_mii_ioctlh]j%)}(h phy_mii_ioctlh]h phy_mii_ioctl}(hj\xhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXxubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj7xhhhjIxhM-ubj)}(h7(struct phy_device *phydev, struct ifreq *ifr, int cmd)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjxxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtxubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]j')}jj^xsbc.phy_mii_ioctlasbuh1hhjtxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtxubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtxubj%)}(hphydevh]hphydev}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpxubj)}(hstruct ifreq *ifrh](h)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(hifreqh]hifreq}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj ymodnameN classnameNjj!)}j$]jxc.phy_mii_ioctlasbuh1hhjxubj)}(h h]h }(hj&yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hj4yhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(hifrh]hifr}(hjAyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpxubj)}(hint cmdh](j)}(hinth]hint}(hjZyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVyubj)}(h h]h }(hjhyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVyubj%)}(hcmdh]hcmd}(hjvyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpxubeh}(h]h ]h"]h$]h&]j<j=uh1jhj7xhhhjIxhM-ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3xhhhjIxhM-ubah}(h]j.xah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjIxhM-hj0xhhubjS)}(hhh]jX)}(hgeneric PHY MII ioctl interfaceh]hgeneric PHY MII ioctl interface}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM-hjyhhubah}(h]h ]h"]h$]h&]uh1jRhj0xhhhjIxhM-ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjyjxjyjyjzj{uh1hhhhjnhNhNubj})}(hX\**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's ``int cmd`` ioctl cmd to execute **Description** Note that this function is currently incompatible with the PHYCONTROL layer. It changes registers without regard to current state. Use at own risk.h](jX)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM1hjyubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjyh]hstruct phy_device *phydev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM.hjyubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhM.hjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhM.hjyubj)}(hH``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's h](j)}(h``struct ifreq *ifr``h]j)}(hjzh]hstruct ifreq *ifr}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM/hjzubj)}(hhh]jX)}(h1:c:type:`struct ifreq ` for socket ioctl'sh](h)}(h:c:type:`struct ifreq `h]j)}(hj9zh]h struct ifreq}(hj;zhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj7zubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjifrequh1hhj/zhM/hj3zubh for socket ioctl’s}(hj3zhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj/zhM/hj0zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj/zhM/hjyubj)}(h!``int cmd`` ioctl cmd to execute h](j)}(h ``int cmd``h]j)}(hjrzh]hint cmd}(hjtzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpzubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM0hjlzubj)}(hhh]jX)}(hioctl cmd to executeh]hioctl cmd to execute}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhM0hjzubah}(h]h ]h"]h$]h&]uh1jhjlzubeh}(h]h ]h"]h$]h&]uh1jhjzhM0hjyubeh}(h]h ]h"]h$]h&]uh1jhjyubjX)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM2hjyubjX)}(hNote that this function is currently incompatible with the PHYCONTROL layer. It changes registers without regard to current state. Use at own risk.h]hNote that this function is currently incompatible with the PHYCONTROL layer. It changes registers without regard to current state. Use at own risk.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM1hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_do_ioctl (C function)c.phy_do_ioctlhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint phy_do_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)h]h)}(hDint phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)h](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzhhhj{hMubj)}(h phy_do_ioctlh]j%)}(h phy_do_ioctlh]h phy_do_ioctl}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjzhhhj{hMubj)}(h4(struct net_device *dev, struct ifreq *ifr, int cmd)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj/{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+{ubj)}(h h]h }(hj<{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+{ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjM{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJ{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjO{modnameN classnameNjj!)}j$]j')}jj{sbc.phy_do_ioctlasbuh1hhj+{ubj)}(h h]h }(hjm{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+{ubj;)}(hj>h]h*}(hj{{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+{ubj%)}(hdevh]hdev}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'{ubj)}(hstruct ifreq *ifrh](h)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubh)}(hhh]j%)}(hifreqh]hifreq}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]ji{c.phy_do_ioctlasbuh1hhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{ubj%)}(hifrh]hifr}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'{ubj)}(hint cmdh](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj |ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj |ubj%)}(hcmdh]hcmd}(hj-|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj |ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'{ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjzhhhj{hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjzhhhj{hMubah}(h]jzah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hMhjzhhubjS)}(hhh]jX)}(h$generic ndo_eth_ioctl implementationh]h$generic ndo_eth_ioctl implementation}(hjW|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjT|hhubah}(h]h ]h"]h$]h&]uh1jRhjzhhhj{hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjo|jxjo|jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct net_device *dev`` the net_device struct ``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's ``int cmd`` ioctl cmd to executeh](jX)}(h**Parameters**h]j)}(hjy|h]h Parameters}(hj{|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw|ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjs|ubj)}(hhh](j)}(h1``struct net_device *dev`` the net_device struct h](j)}(h``struct net_device *dev``h]j)}(hj|h]hstruct net_device *dev}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj|ubj)}(hhh]jX)}(hthe net_device structh]hthe net_device struct}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubj)}(hH``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's h](j)}(h``struct ifreq *ifr``h]j)}(hj|h]hstruct ifreq *ifr}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj|ubj)}(hhh]jX)}(h1:c:type:`struct ifreq ` for socket ioctl'sh](h)}(h:c:type:`struct ifreq `h]j)}(hj|h]h struct ifreq}(hj|hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjifrequh1hhj|hMhj|ubh for socket ioctl’s}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj|ubj)}(h ``int cmd`` ioctl cmd to executeh](j)}(h ``int cmd``h]j)}(hj)}h]hint cmd}(hj+}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'}ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj#}ubj)}(hhh]jX)}(hioctl cmd to executeh]hioctl cmd to execute}(hjB}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj?}ubah}(h]h ]h"]h$]h&]uh1jhj#}ubeh}(h]h ]h"]h$]h&]uh1jhj>}hMhj|ubeh}(h]h ]h"]h$]h&]uh1jhjs|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_do_ioctl_running (C function)c.phy_do_ioctl_runninghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMint phy_do_ioctl_running (struct net_device *dev, struct ifreq *ifr, int cmd)h]h)}(hLint phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}hhhj}hMubj)}(hphy_do_ioctl_runningh]j%)}(hphy_do_ioctl_runningh]hphy_do_ioctl_running}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj}hhhj}hMubj)}(h4(struct net_device *dev, struct ifreq *ifr, int cmd)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j')}jj}sbc.phy_do_ioctl_runningasbuh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj;)}(hj>h]h*}(hj ~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}ubj%)}(hdevh]hdev}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubj)}(hstruct ifreq *ifrh](h)}(hjh]hstruct}(hj2~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.~ubj)}(h h]h }(hj?~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.~ubh)}(hhh]j%)}(hifreqh]hifreq}(hjP~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR~modnameN classnameNjj!)}j$]j}c.phy_do_ioctl_runningasbuh1hhj.~ubj)}(h h]h }(hjn~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.~ubj;)}(hj>h]h*}(hj|~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.~ubj%)}(hifrh]hifr}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubj)}(hint cmdh](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj%)}(hcmdh]hcmd}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj}hhhj}hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{}hhhj}hMubah}(h]jv}ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}hMhjx}hhubjS)}(hhh]jX)}(h3generic ndo_eth_ioctl implementation but test firsth]h3generic ndo_eth_ioctl implementation but test first}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jRhjx}hhhj}hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct net_device *dev`` the net_device struct ``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's ``int cmd`` ioctl cmd to execute **Description** Same as phy_do_ioctl, but ensures that net_device is running before handling the ioctl.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h1``struct net_device *dev`` the net_device struct h](j)}(h``struct net_device *dev``h]j)}(hj)h]hstruct net_device *dev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj#ubj)}(hhh]jX)}(hthe net_device structh]hthe net_device struct}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj ubj)}(hH``struct ifreq *ifr`` :c:type:`struct ifreq ` for socket ioctl's h](j)}(h``struct ifreq *ifr``h]j)}(hjbh]hstruct ifreq *ifr}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj\ubj)}(hhh]jX)}(h1:c:type:`struct ifreq ` for socket ioctl'sh](h)}(h:c:type:`struct ifreq `h]j)}(hjh]h struct ifreq}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjifrequh1hhjwhMhj{ubh for socket ioctl’s}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhj ubj)}(h!``int cmd`` ioctl cmd to execute h](j)}(h ``int cmd``h]j)}(hjh]hint cmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hioctl cmd to executeh]hioctl cmd to execute}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubjX)}(hWSame as phy_do_ioctl, but ensures that net_device is running before handling the ioctl.h]hWSame as phy_do_ioctl, but ensures that net_device is running before handling the ioctl.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_trigger_machine (C function)c.phy_trigger_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4void phy_trigger_machine (struct phy_device *phydev)h]h)}(h3void phy_trigger_machine(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhjHhM ubj)}(hphy_trigger_machineh]j%)}(hphy_trigger_machineh]hphy_trigger_machine}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhjHhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj]sbc.phy_trigger_machineasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjsubj;)}(hj>h]h*}(hjÀhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjsubj%)}(hphydevh]hphydev}(hjЀhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjoubah}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhjHhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj2hhhjHhM ubah}(h]j-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhM hj/hhubjS)}(hhh]jX)}(h$Trigger the state machine to run nowh]h$Trigger the state machine to run now}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhj/hhhjHhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj;h]hstruct phy_device *phydev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj5ubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_ethtool_get_strings (C function)c.phy_ethtool_get_stringshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hAint phy_ethtool_get_strings (struct phy_device *phydev, u8 *data)h]h)}(h@int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hphy_ethtool_get_stringsh]j%)}(hphy_ethtool_get_stringsh]hphy_ethtool_get_strings}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h%(struct phy_device *phydev, u8 *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjҁhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj΁ubj)}(h h]h }(hj߁hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj΁ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_get_stringsasbuh1hhj΁ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj΁ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj΁ubj%)}(hphydevh]hphydev}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj΁ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjʁubj)}(hu8 *datah](h)}(hhh]j%)}(hu8h]hu8}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j c.phy_ethtool_get_stringsasbuh1hhj@ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@ubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjʁubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(hGet the statistic counter namesh]hGet the statistic counter names}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj‚jxj‚jyjzj{uh1hhhhjnhNhNubj})}(hn**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u8 *data`` Where to put the stringsh](jX)}(h**Parameters**h]j)}(hĵh]h Parameters}(hj΂hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʂubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM$hjƂubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM"hjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h%``u8 *data`` Where to put the stringsh](j)}(h ``u8 *data``h]j)}(hj$h]hu8 *data}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM$hjubj)}(hhh]jX)}(hWhere to put the stringsh]hWhere to put the strings}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM#hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM$hjubeh}(h]h ]h"]h$]h&]uh1jhjƂubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phy_ethtool_get_sset_count (C function)c.phy_ethtool_get_sset_counthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h:int phy_ethtool_get_sset_count (struct phy_device *phydev)h]h)}(h9int phy_ethtool_get_sset_count(struct phy_device *phydev)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzhhhjhM3ubj)}(hphy_ethtool_get_sset_counth]j%)}(hphy_ethtool_get_sset_counth]hphy_ethtool_get_sset_count}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjzhhhjhM3ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjȃhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjكhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjփubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjۃmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_get_sset_countasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjzhhhjhM3ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjvhhhjhM3ubah}(h]jqah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM3hjshhubjS)}(hhh]jX)}(h$Get the number of statistic countersh]h$Get the number of statistic counters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM3hj;hhubah}(h]h ]h"]h$]h&]uh1jRhjshhhjhM3ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjVjxjVjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM7hjZubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM9hjyubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM5hjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_ethtool_get_stats (C function)c.phy_ethtool_get_statshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h]int phy_ethtool_get_stats (struct phy_device *phydev, struct ethtool_stats *stats, u64 *data)h]h)}(h\int phy_ethtool_get_stats(struct phy_device *phydev, struct ethtool_stats *stats, u64 *data)h](j)}(hinth]hint}(hjلhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՄhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjՄhhhjhMMubj)}(hphy_ethtool_get_statsh]j%)}(hphy_ethtool_get_statsh]hphy_ethtool_get_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjՄhhhjhMMubj)}(hC(struct phy_device *phydev, struct ethtool_stats *stats, u64 *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6modnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_get_statsasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct ethtool_stats *statsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h ethtool_statsh]h ethtool_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jPc.phy_ethtool_get_statsasbuh1hhjubj)}(h h]h }(hjąhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj҅hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstatsh]hstats}(hj߅hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u64 *datah](h)}(hhh]j%)}(hu64h]hu64}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jPc.phy_ethtool_get_statsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdatah]hdata}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjՄhhhjhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjфhhhjhMMubah}(h]j̄ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMMhj΄hhubjS)}(hhh]jX)}(hGet the statistic countersh]hGet the statistic counters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMhj[hhubah}(h]h ]h"]h$]h&]uh1jRhj΄hhhjhMMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjvjxjvjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct ethtool_stats *stats`` What counters to get ``u64 *data`` Where to store the countersh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMQhjzubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMOhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubj)}(h5``struct ethtool_stats *stats`` What counters to get h](j)}(h``struct ethtool_stats *stats``h]j)}(hj؆h]hstruct ethtool_stats *stats}(hjچhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjֆubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMPhj҆ubj)}(hhh]jX)}(hWhat counters to geth]hWhat counters to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhj҆ubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubj)}(h)``u64 *data`` Where to store the countersh](j)}(h ``u64 *data``h]j)}(hjh]h u64 *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMRhj ubj)}(hhh]jX)}(hWhere to store the countersh]hWhere to store the counters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMQhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMRhjubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_start_cable_test (C function)c.phy_start_cable_testhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hTint phy_start_cable_test (struct phy_device *phydev, struct netlink_ext_ack *extack)h]h)}(hSint phy_start_cable_test(struct phy_device *phydev, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjghhhjyhMMubj)}(hphy_start_cable_testh]j%)}(hphy_start_cable_testh]hphy_start_cable_test}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjghhhjyhMMubj)}(h;(struct phy_device *phydev, struct netlink_ext_ack *extack)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjƇhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjÇubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjȇmodnameN classnameNjj!)}j$]j')}jjsbc.phy_start_cable_testasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]jc.phy_start_cable_testasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hextackh]hextack}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjghhhjyhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjyhMMubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMMhj`hhubjS)}(hhh]jX)}(hStart a cable testh]hStart a cable test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj`hhhjyhMMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct netlink_ext_ack *extack`` extack for reporting useful error messagesh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMQhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj܈h]hstruct phy_device *phydev}(hjވhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڈubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMOhjֈubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjֈubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjӈubj)}(hM``struct netlink_ext_ack *extack`` extack for reporting useful error messagesh](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMQhjubj)}(hhh]jX)}(h*extack for reporting useful error messagesh]h*extack for reporting useful error messages}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMPhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMQhjӈubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_start_cable_test_tdr (C function)c.phy_start_cable_test_tdrhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h}int phy_start_cable_test_tdr (struct phy_device *phydev, struct netlink_ext_ack *extack, const struct phy_tdr_config *config)h]h)}(h|int phy_start_cable_test_tdr(struct phy_device *phydev, struct netlink_ext_ack *extack, const struct phy_tdr_config *config)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhj}hMubj)}(hphy_start_cable_test_tdrh]j%)}(hphy_start_cable_test_tdrh]hphy_start_cable_test_tdr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkhhhj}hMubj)}(h`(struct phy_device *phydev, struct netlink_ext_ack *extack, const struct phy_tdr_config *config)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjʉhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjljubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj̉modnameN classnameNjj!)}j$]j')}jjsbc.phy_start_cable_test_tdrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]jc.phy_start_cable_test_tdrasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hextackh]hextack}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h#const struct phy_tdr_config *configh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphy_tdr_configh]hphy_tdr_config}(hjNJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjĊubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjɊmodnameN classnameNjj!)}j$]jc.phy_start_cable_test_tdrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjkhhhj}hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjghhhj}hMubah}(h]jbah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}hMhjdhhubjS)}(hhh]jX)}(hStart a raw TDR cable testh]hStart a raw TDR cable test}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jRhjdhhhj}hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct netlink_ext_ack *extack`` extack for reporting useful error messages ``const struct phy_tdr_config *config`` Configuration of the test to runh](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjFubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjkh]hstruct phy_device *phydev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjeubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(hN``struct netlink_ext_ack *extack`` extack for reporting useful error messages h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h*extack for reporting useful error messagesh]h*extack for reporting useful error messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(hH``const struct phy_tdr_config *config`` Configuration of the test to runh](j)}(h'``const struct phy_tdr_config *config``h]j)}(hj݋h]h#const struct phy_tdr_config *config}(hjߋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۋubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj׋ubj)}(hhh]jX)}(h Configuration of the test to runh]h Configuration of the test to run}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhj׋ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_inband_caps (C function)c.phy_inband_capshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hSunsigned int phy_inband_caps (struct phy_device *phydev, phy_interface_t interface)h]h)}(hRunsigned int phy_inband_caps(struct phy_device *phydev, phy_interface_t interface)h](j)}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhjEhMubj)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhjEhMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhjEhMubj)}(hphy_inband_capsh]j%)}(hphy_inband_capsh]hphy_inband_caps}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhjEhMubj)}(h6(struct phy_device *phydev, phy_interface_t interface)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjvsbc.phy_inband_capsasbuh1hhjubj)}(h h]h }(hjΌhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj܌hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jʌc.phy_inband_capsasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhjEhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj/hhhjEhMubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjEhMhj,hhubjS)}(hhh]jX)}(h2query which in-band signalling modes are supportedh]h2query which in-band signalling modes are supported}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhj,hhhjEhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``phy_interface_t interface`` the interface mode for the PHY **Description** Returns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn't implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from :c:type:`enum link_inband_signalling ` to describe which inband modes are supported by the PHY for this interface mode.h](jX)}(h**Parameters**h]j)}(hj}h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjwubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``phy_interface_t interface`` the interface mode for the PHY h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hthe interface mode for the PHYh]hthe interface mode for the PHY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubeh}(h]h ]h"]h$]h&]uh1jhjwubjX)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjwubjX)}(hXXReturns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn't implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from :c:type:`enum link_inband_signalling ` to describe which inband modes are supported by the PHY for this interface mode.h](hReturns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn’t implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from }(hjEhhhNhNubh)}(h>:c:type:`enum link_inband_signalling `h]j)}(hjOh]henum link_inband_signalling}(hjQhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjlink_inband_signallinguh1hhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjEubhQ to describe which inband modes are supported by the PHY for this interface mode.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjlhMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_config_inband (C function)c.phy_config_inbandhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint phy_config_inband (struct phy_device *phydev, unsigned int modes)h]h)}(hDint phy_config_inband(struct phy_device *phydev, unsigned int modes)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM'ubj)}(hphy_config_inbandh]j%)}(hphy_config_inbandh]hphy_config_inband}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM'ubj)}(h/(struct phy_device *phydev, unsigned int modes)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjԎhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjЎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjЎubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_config_inbandasbuh1hhjЎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjЎubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjЎubj%)}(hphydevh]hphydev}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjЎubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj̎ubj)}(hunsigned int modesh](j)}(hunsignedh]hunsigned}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj%)}(hmodesh]hmodes}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj̎ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM'ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM'hjhhubjS)}(hhh]jX)}(h&configure the desired PHY in-band modeh]h&configure the desired PHY in-band mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM'hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX"**Parameters** ``struct phy_device *phydev`` the phy_device struct ``unsigned int modes`` in-band modes to configure **Description** disables, enables or enables-with-bypass in-band signalling between the PHY and host system. **Return** zero on success, or negative errno value.h](jX)}(h**Parameters**h]j)}(hjʏh]h Parameters}(hj̏hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȏubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM+hjďubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM(hjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(h2``unsigned int modes`` in-band modes to configure h](j)}(h``unsigned int modes``h]j)}(hj"h]hunsigned int modes}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM)hjubj)}(hhh]jX)}(hin-band modes to configureh]hin-band modes to configure}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hM)hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM)hjubeh}(h]h ]h"]h$]h&]uh1jhjďubjX)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM+hjďubj)}(hhh]j)}(h]disables, enables or enables-with-bypass in-band signalling between the PHY and host system. h](j)}(h;disables, enables or enables-with-bypass in-band signallingh]h;disables, enables or enables-with-bypass in-band signalling}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM,hjvubj)}(hhh]jX)}(h between the PHY and host system.h]h between the PHY and host system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjsubah}(h]h ]h"]h$]h&]uh1jhjďubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM.hjďubjX)}(h)zero on success, or negative errno value.h]h)zero on success, or negative errno value.}(hjĐhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM.hjďubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h_phy_start_aneg (C function)c._phy_start_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/int _phy_start_aneg (struct phy_device *phydev)h]h)}(h.int _phy_start_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMCubj)}(h_phy_start_anegh]j%)}(h_phy_start_anegh]h_phy_start_aneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMCubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j')}jjsbc._phy_start_anegasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj;)}(hj>h]h*}(hj|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMCubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMCubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMChjhhubjS)}(hhh]jX)}(h*start auto-negotiation for this PHY deviceh]h*start auto-negotiation for this PHY device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMChjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMCubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjˑjxjˑjyjzj{uh1hhhhjnhNhNubj})}(hX>**Parameters** ``struct phy_device *phydev`` the phy_device struct **Description** Sanitizes the settings (if we're not autonegotiating them), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h](jX)}(h**Parameters**h]j)}(hjՑh]h Parameters}(hjבhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӑubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMGhjϑubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMDhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMDhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMDhjubah}(h]h ]h"]h$]h&]uh1jhjϑubjX)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMFhjϑubj)}(hhh]j)}(hSanitizes the settings (if we're not autonegotiating them), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h](j)}(h4Sanitizes the settings (if we're not autonegotiatingh]h6Sanitizes the settings (if we’re not autonegotiating}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMHhjHubj)}(hhh]jX)}(hthem), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h]hthem), and then calls the driver’s config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMGhj[ubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjZhMHhjEubah}(h]h ]h"]h$]h&]uh1jhjϑubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_start_aneg (C function)c.phy_start_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h.int phy_start_aneg (struct phy_device *phydev)h]h)}(h-int phy_start_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMcubj)}(hphy_start_anegh]j%)}(hphy_start_anegh]hphy_start_aneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMcubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjܒhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjؒubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjؒubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj’sbc.phy_start_anegasbuh1hhjؒubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjؒubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjؒubj%)}(hphydevh]hphydev}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjؒubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjԒubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMcubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMchjhhubjS)}(hhh]jX)}(h*start auto-negotiation for this PHY deviceh]h*start auto-negotiation for this PHY device}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMchj\hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMcubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1hhhhjnhNhNubj})}(hX>**Parameters** ``struct phy_device *phydev`` the phy_device struct **Description** Sanitizes the settings (if we're not autonegotiating them), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMghj{ubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMdhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hjۓh]h Description}(hjݓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٓubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMfhj{ubj)}(hhh]j)}(hSanitizes the settings (if we're not autonegotiating them), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h](j)}(h4Sanitizes the settings (if we're not autonegotiatingh]h6Sanitizes the settings (if we’re not autonegotiating}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhhjubj)}(hhh]jX)}(hthem), and then calls the driver's config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.h]hthem), and then calls the driver’s config_aneg function. If the PHYCONTROL Layer is operating, we change the state to reflect the beginning of Auto-negotiation or forcing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_speed_down (C function)c.phy_speed_downhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9int phy_speed_down (struct phy_device *phydev, bool sync)h]h)}(h8int phy_speed_down(struct phy_device *phydev, bool sync)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhjYhMubj)}(hphy_speed_downh]j%)}(hphy_speed_downh]hphy_speed_down}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhjYhMubj)}(h&(struct phy_device *phydev, bool sync)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjnsbc.phy_speed_downasbuh1hhjubj)}(h h]h }(hjƔhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjԔhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool synch](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hsynch]hsync}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhjYhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjYhMubah}(h]j>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYhMhj@hhubjS)}(hhh]jX)}(h9set speed to lowest speed supported by both link partnersh]h9set speed to lowest speed supported by both link partners}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhjYhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``bool sync`` perform action synchronously **Description** Typically used to save energy when waiting for a WoL packet WARNING: Setting sync to false may cause the system being unable to suspend in case the PHY generates an interrupt when finishing the autonegotiation. This interrupt may wake up the system immediately after suspend. Therefore use sync = false only if you're sure it's safe with the respective network chip.h](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj[ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjzubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjwubj)}(h+``bool sync`` perform action synchronously h](j)}(h ``bool sync``h]j)}(hjh]h bool sync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hperform action synchronouslyh]hperform action synchronously}(hjҕhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjΕhMhjϕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΕhMhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj[ubjX)}(h;Typically used to save energy when waiting for a WoL packeth]h;Typically used to save energy when waiting for a WoL packet}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj[ubjX)}(hX2WARNING: Setting sync to false may cause the system being unable to suspend in case the PHY generates an interrupt when finishing the autonegotiation. This interrupt may wake up the system immediately after suspend. Therefore use sync = false only if you're sure it's safe with the respective network chip.h]hX6WARNING: Setting sync to false may cause the system being unable to suspend in case the PHY generates an interrupt when finishing the autonegotiation. This interrupt may wake up the system immediately after suspend. Therefore use sync = false only if you’re sure it’s safe with the respective network chip.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_speed_up (C function)c.phy_speed_uphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h,int phy_speed_up (struct phy_device *phydev)h]h)}(h+int phy_speed_up(struct phy_device *phydev)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhjVhMubj)}(h phy_speed_uph]j%)}(h phy_speed_uph]h phy_speed_up}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDhhhjVhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjksbc.phy_speed_upasbuh1hhjubj)}(h h]h }(hjÖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjіhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjޖhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubah}(h]h ]h"]h$]h&]j<j=uh1jhjDhhhjVhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhjVhMubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjVhMhj=hhubjS)}(hhh]jX)}(h1(re)set advertised speeds to all supported speedsh]h1(re)set advertised speeds to all supported speeds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhjVhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct **Description** Used to revert the effect of phy_speed_downh](jX)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj$ubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjIh]hstruct phy_device *phydev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjCubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj$ubjX)}(h+Used to revert the effect of phy_speed_downh]h+Used to revert the effect of phy_speed_down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_start_machine (C function)c.phy_start_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2void phy_start_machine (struct phy_device *phydev)h]h)}(h1void phy_start_machine(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjɗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŗhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjؗhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjŗhhhjחhMubj)}(hphy_start_machineh]j%)}(hphy_start_machineh]hphy_start_machine}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjŗhhhjחhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj&modnameN classnameNjj!)}j$]j')}jjsbc.phy_start_machineasbuh1hhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjŗhhhjחhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjחhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjחhMhjhhubjS)}(hhh]jX)}(h start PHY state machine trackingh]h start PHY state machine tracking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjחhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXg**Parameters** ``struct phy_device *phydev`` the phy_device struct **Description** The PHY infrastructure can run a state machine which tracks whether the PHY is starting up, negotiating, etc. This function starts the delayed workqueue which tracks the state of the PHY. If you want to maintain your own state machine, do not call this function.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjʘh]hstruct phy_device *phydev}(hj̘hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȘubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjĘubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjߘhMhjubah}(h]h ]h"]h$]h&]uh1jhjĘubeh}(h]h ]h"]h$]h&]uh1jhjߘhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(hXThe PHY infrastructure can run a state machine which tracks whether the PHY is starting up, negotiating, etc. This function starts the delayed workqueue which tracks the state of the PHY. If you want to maintain your own state machine, do not call this function.h](j)}(h.The PHY infrastructure can run a state machineh]h.The PHY infrastructure can run a state machine}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hwhich tracks whether the PHY is starting up, negotiating, etc. This function starts the delayed workqueue which tracks the state of the PHY. If you want to maintain your own state machine, do not call this function.h]hwhich tracks whether the PHY is starting up, negotiating, etc. This function starts the delayed workqueue which tracks the state of the PHY. If you want to maintain your own state machine, do not call this function.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_error (C function) c.phy_errorhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h*void phy_error (struct phy_device *phydev)h]h)}(h)void phy_error(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqhhhjhMMubj)}(h phy_errorh]j%)}(h phy_errorh]h phy_error}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjqhhhjhMMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjЙhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj͙ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjҙmodnameN classnameNjj!)}j$]j')}jjsb c.phy_errorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjqhhhjhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjmhhhjhMMubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMMhjjhhubjS)}(hhh]jX)}(h%enter ERROR state for this PHY deviceh]h%enter ERROR state for this PHY device}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMMhj2hhubah}(h]h ]h"]h$]h&]uh1jRhjjhhhjhMMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMjxjMjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Moves the PHY to the ERROR state in response to a read or write error, and tells the controller the link is down. Must be called with phydev->lock held.h](jX)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMQhjQubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjvh]hstruct phy_device *phydev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMNhjpubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMNhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMNhjmubah}(h]h ]h"]h$]h&]uh1jhjQubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMPhjQubjX)}(hMoves the PHY to the ERROR state in response to a read or write error, and tells the controller the link is down. Must be called with phydev->lock held.h]hMoves the PHY to the ERROR state in response to a read or write error, and tells the controller the link is down. Must be called with phydev->lock held.}(hjǚhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMOhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_request_interrupt (C function)c.phy_request_interrupthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6void phy_request_interrupt (struct phy_device *phydev)h]h)}(h5void phy_request_interrupt(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_request_interrupth]j%)}(hphy_request_interrupth]hphy_request_interrupt}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjQhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSmodnameN classnameNjj!)}j$]j')}jjsbc.phy_request_interruptasbuh1hhj/ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h-request and enable interrupt for a PHY deviceh]h-request and enable interrupt for a PHY device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjΛjxjΛjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Request and enable the interrupt for the given PHY. If this fails, then we set irq to PHY_POLL. This should only be called with a valid IRQ number.h](jX)}(h**Parameters**h]j)}(hj؛h]h Parameters}(hjڛhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֛ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjқubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjқubjX)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjқubj)}(hhh]j)}(hRequest and enable the interrupt for the given PHY. If this fails, then we set irq to PHY_POLL. This should only be called with a valid IRQ number.h](j)}(h3Request and enable the interrupt for the given PHY.h]h3Request and enable the interrupt for the given PHY.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjKubj)}(hhh]jX)}(h_If this fails, then we set irq to PHY_POLL. This should only be called with a valid IRQ number.h]h_If this fails, then we set irq to PHY_POLL. This should only be called with a valid IRQ number.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjHubah}(h]h ]h"]h$]h&]uh1jhjқubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_free_interrupt (C function)c.phy_free_interrupthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3void phy_free_interrupt (struct phy_device *phydev)h]h)}(h2void phy_free_interrupt(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_free_interrupth]j%)}(hphy_free_interrupth]hphy_free_interrupt}(hjœhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjޜhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjڜubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڜubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjĜsbc.phy_free_interruptasbuh1hhjڜubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڜubj;)}(hj>h]h*}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjڜubj%)}(hphydevh]hphydev}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjڜubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj֜ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h+disable and free interrupt for a PHY deviceh]h+disable and free interrupt for a PHY device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjyjxjyjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Disable and free the interrupt for the given PHY. This should only be called with a valid IRQ number.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj}ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubjX)}(h**Description**h]j)}(hjݝh]h Description}(hjߝhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۝ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj}ubj)}(hhh]j)}(heDisable and free the interrupt for the given PHY. This should only be called with a valid IRQ number.h](j)}(h1Disable and free the interrupt for the given PHY.h]h1Disable and free the interrupt for the given PHY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h3This should only be called with a valid IRQ number.h]h3This should only be called with a valid IRQ number.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_stop (C function) c.phy_stophNtauh1hhjnhhhNhNubh)}(hhh](h)}(h)void phy_stop (struct phy_device *phydev)h]h)}(h(void phy_stop(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMdubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIhhhj[hMdubj)}(hphy_stoph]j%)}(hphy_stoph]hphy_stop}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjIhhhj[hMdubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjpsb c.phy_stopasbuh1hhjubj)}(h h]h }(hjȞhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj֞hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjIhhhj[hMdubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjEhhhj[hMdubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj[hMdhjBhhubjS)}(hhh]jX)}(h5Bring down the PHY link, and stop checking the statush]h5Bring down the PHY link, and stop checking the status}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMdhj hhubah}(h]h ]h"]h$]h&]uh1jRhjBhhhj[hMdubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhhj)ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjNh]hstruct phy_device *phydev}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMjhjHubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMehjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMjhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_start (C function) c.phy_starthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h*void phy_start (struct phy_device *phydev)h]h)}(h)void phy_start(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h phy_starth]j%)}(h phy_starth]h phy_start}(hjɟhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjşubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj˟sb c.phy_startasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjݟubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hstart or restart a PHY deviceh]hstart or restart a PHY device}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjehhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXF**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Indicates the attached device's readiness to handle PHY-related work. Used during startup to start the PHY, and after a call to phy_stop() to resume operation. Also used to indicate the MDIO bus has cleared an error condition.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(hIndicates the attached device's readiness to handle PHY-related work. Used during startup to start the PHY, and after a call to phy_stop() to resume operation. Also used to indicate the MDIO bus has cleared an error condition.h](j)}(h,Indicates the attached device's readiness toh]h.Indicates the attached device’s readiness to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hhandle PHY-related work. Used during startup to start the PHY, and after a call to phy_stop() to resume operation. Also used to indicate the MDIO bus has cleared an error condition.h]hhandle PHY-related work. Used during startup to start the PHY, and after a call to phy_stop() to resume operation. Also used to indicate the MDIO bus has cleared an error condition.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_mac_interrupt (C function)c.phy_mac_interrupthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2void phy_mac_interrupt (struct phy_device *phydev)h]h)}(h1void phy_mac_interrupt(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjbhMubj)}(hphy_mac_interrupth]j%)}(hphy_mac_interrupth]hphy_mac_interrupt}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjbhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjwsbc.phy_mac_interruptasbuh1hhjubj)}(h h]h }(hjϡhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjݡhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjbhMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjbhMhjIhhubjS)}(hhh]jX)}(hMAC says the link has changedh]hMAC says the link has changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjbhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` phy_device struct with changed link **Description** The MAC layer is able to indicate there has been a change in the PHY link status. Trigger the state machine and work a work queue.h](jX)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj0ubj)}(hhh]j)}(hB``struct phy_device *phydev`` phy_device struct with changed link h](j)}(h``struct phy_device *phydev``h]j)}(hjUh]hstruct phy_device *phydev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjOubj)}(hhh]jX)}(h#phy_device struct with changed linkh]h#phy_device struct with changed link}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj0ubjX)}(hThe MAC layer is able to indicate there has been a change in the PHY link status. Trigger the state machine and work a work queue.h]hThe MAC layer is able to indicate there has been a change in the PHY link status. Trigger the state machine and work a work queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_loopback (C function)c.phy_loopbackhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDint phy_loopback (struct phy_device *phydev, bool enable, int speed)h]h)}(hCint phy_loopback(struct phy_device *phydev, bool enable, int speed)h](j)}(hinth]hint}(hjբhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѢhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjѢhhhjhMubj)}(h phy_loopbackh]j%)}(h phy_loopbackh]h phy_loopback}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjѢhhhjhMubj)}(h3(struct phy_device *phydev, bool enable, int speed)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j')}jjsbc.phy_loopbackasbuh1hhjubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h bool enableh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(henableh]henable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int speedh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƣhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hspeedh]hspeed}(hjԣhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjѢhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj͢hhhjhMubah}(h]jȢah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjʢhhubjS)}(hhh]jX)}(hConfigure loopback mode of PHYh]hConfigure loopback mode of PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjʢhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXO**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool enable`` enable or disable loopback mode ``int speed`` enable loopback mode with speed **Description** Configure loopback mode of PHY and signal link down and link up if speed is changing. **Return** 0 on success, negative error code on failure.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj?h]hstruct phy_device *phydev}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj9ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMhj6ubj)}(h0``bool enable`` enable or disable loopback mode h](j)}(h``bool enable``h]j)}(hjxh]h bool enable}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjrubj)}(hhh]jX)}(henable or disable loopback modeh]henable or disable loopback mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMhj6ubj)}(h.``int speed`` enable loopback mode with speed h](j)}(h ``int speed``h]j)}(hjh]h int speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(henable loopback mode with speedh]henable loopback mode with speed}(hjʤhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƤhMhjǤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƤhMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubjX)}(hUConfigure loopback mode of PHY and signal link down and link up if speed is changing.h]hUConfigure loopback mode of PHY and signal link down and link up if speed is changing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubjX)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*phy_eee_tx_clock_stop_capable (C function)c.phy_eee_tx_clock_stop_capablehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h=int phy_eee_tx_clock_stop_capable (struct phy_device *phydev)h]h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjThhhjfhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjPhhhjfhMubah}(h]jKah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjfhMhjMhhubjS)}(hhh]jX)}(h*indicate whether the MAC can stop tx clockh]h*indicate whether the MAC can stop tx clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhjfhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Indicate whether the MAC can disable the transmit xMII clock while in LPI state. Returns 1 if the MAC may stop the transmit clock, 0 if the MAC must not stop the transmit clock, or negative error.h](jX)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj4ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjYh]hstruct phy_device *phydev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjSubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj4ubjX)}(hIndicate whether the MAC can disable the transmit xMII clock while in LPI state. Returns 1 if the MAC may stop the transmit clock, 0 if the MAC must not stop the transmit clock, or negative error.h]hIndicate whether the MAC can disable the transmit xMII clock while in LPI state. Returns 1 if the MAC may stop the transmit clock, 0 if the MAC must not stop the transmit clock, or negative error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_eee_rx_clock_stop (C function)c.phy_eee_rx_clock_stophNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKint phy_eee_rx_clock_stop (struct phy_device *phydev, bool clk_stop_enable)h]h)}(hJint phy_eee_rx_clock_stop(struct phy_device *phydev, bool clk_stop_enable)h](j)}(hinth]hint}(hj٦hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjզhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM+ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjզhhhjhM+ubj)}(hphy_eee_rx_clock_stoph]j%)}(hphy_eee_rx_clock_stoph]hphy_eee_rx_clock_stop}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjզhhhjhM+ubj)}(h1(struct phy_device *phydev, bool clk_stop_enable)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6modnameN classnameNjj!)}j$]j')}jjsbc.phy_eee_rx_clock_stopasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hbool clk_stop_enableh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hclk_stop_enableh]hclk_stop_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjզhhhjhM+ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjѦhhhjhM+ubah}(h]j̦ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM+hjΦhhubjS)}(hhh]jX)}(h"configure PHY receive clock in LPIh]h"configure PHY receive clock in LPI}(hjͧhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM+hjʧhhubah}(h]h ]h"]h$]h&]uh1jRhjΦhhhjhM+ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXP**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool clk_stop_enable`` flag to indicate whether the clock can be stopped **Description** Configure whether the PHY can disable its receive clock during LPI mode, See IEEE 802.3 sections 22.2.2.2, 35.2.2.10, and 45.2.3.1.4. **Return** 0 or negative error.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM/hjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM,hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hM,hj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hM,hjubj)}(hK``bool clk_stop_enable`` flag to indicate whether the clock can be stopped h](j)}(h``bool clk_stop_enable``h]j)}(hjGh]hbool clk_stop_enable}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM-hjAubj)}(hhh]jX)}(h1flag to indicate whether the clock can be stoppedh]h1flag to indicate whether the clock can be stopped}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hM-hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM-hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM/hjubjX)}(hConfigure whether the PHY can disable its receive clock during LPI mode, See IEEE 802.3 sections 22.2.2.2, 35.2.2.10, and 45.2.3.1.4.h]hConfigure whether the PHY can disable its receive clock during LPI mode, See IEEE 802.3 sections 22.2.2.2, 35.2.2.10, and 45.2.3.1.4.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM.hjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM1hjubjX)}(h0 or negative error.h]h0 or negative error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_init_eee (C function)c.phy_init_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hBint phy_init_eee (struct phy_device *phydev, bool clk_stop_enable)h]h)}(hAint phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM@ubj)}(h phy_init_eeeh]j%)}(h phy_init_eeeh]h phy_init_eee}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM@ubj)}(h1(struct phy_device *phydev, bool clk_stop_enable)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKmodnameN classnameNjj!)}j$]j')}jjsbc.phy_init_eeeasbuh1hhj'ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#ubj)}(hbool clk_stop_enableh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hclk_stop_enableh]hclk_stop_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM@ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM@ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM@hjhhubjS)}(hhh]jX)}(hinit and check the EEE featureh]hinit and check the EEE feature}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM@hjߩhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM@ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX]**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool clk_stop_enable`` PHY may stop the clock during LPI **Description** it checks if the Energy-Efficient Ethernet (EEE) is supported by looking at the MMD registers 3.20 and 7.60/61 and it programs the MMD register 3.0 setting the "Clock stop enable" bit if required.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMDhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj#h]hstruct phy_device *phydev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMAhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMAhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMAhjubj)}(h;``bool clk_stop_enable`` PHY may stop the clock during LPI h](j)}(h``bool clk_stop_enable``h]j)}(hj\h]hbool clk_stop_enable}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMBhjVubj)}(hhh]jX)}(h!PHY may stop the clock during LPIh]h!PHY may stop the clock during LPI}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhMBhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMBhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMDhjubjX)}(hit checks if the Energy-Efficient Ethernet (EEE) is supported by looking at the MMD registers 3.20 and 7.60/61 and it programs the MMD register 3.0 setting the "Clock stop enable" bit if required.h]hit checks if the Energy-Efficient Ethernet (EEE) is supported by looking at the MMD registers 3.20 and 7.60/61 and it programs the MMD register 3.0 setting the “Clock stop enable” bit if required.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_get_eee_err (C function)c.phy_get_eee_errhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/int phy_get_eee_err (struct phy_device *phydev)h]h)}(h.int phy_get_eee_err(struct phy_device *phydev)h](j)}(hinth]hint}(hjܪhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjتhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjتhhhjhM^ubj)}(hphy_get_eee_errh]j%)}(hphy_get_eee_errh]hphy_get_eee_err}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjتhhhjhM^ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9modnameN classnameNjj!)}j$]j')}jjsbc.phy_get_eee_errasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjتhhhjhM^ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjԪhhhjhM^ubah}(h]jϪah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM^hjѪhhubjS)}(hhh]jX)}(hreport the EEE wake error counth]hreport the EEE wake error count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM^hjhhubah}(h]h ]h"]h$]h&]uh1jRhjѪhhhjhM^ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** it is to report the number of time where the PHY failed to complete its normal wake sequence.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMbhjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjݫh]hstruct phy_device *phydev}(hj߫hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۫ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chM_hj׫ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM_hjubah}(h]h ]h"]h$]h&]uh1jhj׫ubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjԫubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMahjubjX)}(h]it is to report the number of time where the PHY failed to complete its normal wake sequence.h]h]it is to report the number of time where the PHY failed to complete its normal wake sequence.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMahjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_ethtool_get_eee (C function)c.phy_ethtool_get_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hNint phy_ethtool_get_eee (struct phy_device *phydev, struct ethtool_keee *data)h]h)}(hMint phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMtubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYhhhjkhMtubj)}(hphy_ethtool_get_eeeh]j%)}(hphy_ethtool_get_eeeh]hphy_ethtool_get_eee}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYhhhjkhMtubj)}(h6(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_get_eeeasbuh1hhjubj)}(h h]h }(hjجhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct ethtool_keee *datah](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj,modnameN classnameNjj!)}j$]jԬc.phy_ethtool_get_eeeasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdatah]hdata}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjYhhhjkhMtubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUhhhjkhMtubah}(h]jPah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkhMthjRhhubjS)}(hhh]jX)}(hget EEE supported and statush]hget EEE supported and status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMthjhhubah}(h]h ]h"]h$]h&]uh1jRhjRhhhjkhMtubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_keee *data`` ethtool_keee data **Description** get the current EEE settings, filling in all members of **data**.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMxhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjέh]hstruct phy_device *phydev}(hjЭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̭ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMuhjȭubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjȭubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjŭubj)}(h0``struct ethtool_keee *data`` ethtool_keee data h](j)}(h``struct ethtool_keee *data``h]j)}(hjh]hstruct ethtool_keee *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMvhjubj)}(hhh]jX)}(hethtool_keee datah]hethtool_keee data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMvhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMvhjŭubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMxhjubjX)}(hAget the current EEE settings, filling in all members of **data**.h](h8get the current EEE settings, filling in all members of }(hjXhhhNhNubj)}(h**data**h]hdata}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_ethtool_set_eee (C function)c.phy_ethtool_set_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hNint phy_ethtool_set_eee (struct phy_device *phydev, struct ethtool_keee *data)h]h)}(hMint phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_ethtool_set_eeeh]j%)}(hphy_ethtool_set_eeeh]hphy_ethtool_set_eee}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h6(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj֮hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjҮubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҮubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_set_eeeasbuh1hhjҮubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҮubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjҮubj%)}(hphydevh]hphydev}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjҮubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjήubj)}(hstruct ethtool_keee *datah](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjhmodnameN classnameNjj!)}j$]jc.phy_ethtool_set_eeeasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjήubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hset EEE supported and statush]hset EEE supported and status}(hjɯhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjƯhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_keee *data`` ethtool_keee data **Description** it is to program the Advertisement EEE register.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj h]hstruct phy_device *phydev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``struct ethtool_keee *data`` ethtool_keee data h](j)}(h``struct ethtool_keee *data``h]j)}(hjCh]hstruct ethtool_keee *data}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj=ubj)}(hhh]jX)}(hethtool_keee datah]hethtool_keee data}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubjX)}(h0it is to program the Advertisement EEE register.h]h0it is to program the Advertisement EEE register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_ethtool_set_wol (C function)c.phy_ethtool_set_wolhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hPint phy_ethtool_set_wol (struct phy_device *phydev, struct ethtool_wolinfo *wol)h]h)}(hOint phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)h](j)}(hinth]hint}(hjðhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjҰhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjѰhMubj)}(hphy_ethtool_set_wolh]j%)}(hphy_ethtool_set_wolh]hphy_ethtool_set_wol}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjѰhMubj)}(h8(struct phy_device *phydev, struct ethtool_wolinfo *wol)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_set_wolasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct ethtool_wolinfo *wolh](h)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hhh]j%)}(hethtool_wolinfoh]hethtool_wolinfo}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j:c.phy_ethtool_set_wolasbuh1hhjnubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hwolh]hwol}(hjɱhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjѰhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjѰhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjѰhMhjhhubjS)}(hhh]jX)}(hConfigure Wake On LANh]hConfigure Wake On LAN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjѰhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_wolinfo *wol`` Configuration requestedh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj4h]hstruct phy_device *phydev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj.ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhj+ubj)}(h7``struct ethtool_wolinfo *wol`` Configuration requestedh](j)}(h``struct ethtool_wolinfo *wol``h]j)}(hjmh]hstruct ethtool_wolinfo *wol}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjgubj)}(hhh]jX)}(hConfiguration requestedh]hConfiguration requested}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_ethtool_get_wol (C function)c.phy_ethtool_get_wolhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hQvoid phy_ethtool_get_wol (struct phy_device *phydev, struct ethtool_wolinfo *wol)h]h)}(hPvoid phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol)h](j)}(hvoidh]hvoid}(hjDzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjòhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjֲhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjòhhhjղhMubj)}(hphy_ethtool_get_wolh]j%)}(hphy_ethtool_get_wolh]hphy_ethtool_get_wol}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjòhhhjղhMubj)}(h8(struct phy_device *phydev, struct ethtool_wolinfo *wol)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_get_wolasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct ethtool_wolinfo *wolh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(hethtool_wolinfoh]hethtool_wolinfo}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j>c.phy_ethtool_get_wolasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hwolh]hwol}(hjͳhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjòhhhjղhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjղhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjղhMhjhhubjS)}(hhh]jX)}(h)Get the current Wake On LAN configurationh]h)Get the current Wake On LAN configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjղhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_wolinfo *wol`` Store the current configuration hereh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj8h]hstruct phy_device *phydev}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhj2ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhj/ubj)}(hD``struct ethtool_wolinfo *wol`` Store the current configuration hereh](j)}(h``struct ethtool_wolinfo *wol``h]j)}(hjqh]hstruct ethtool_wolinfo *wol}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjkubj)}(hhh]jX)}(h$Store the current configuration hereh]h$Store the current configuration here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_ethtool_nway_reset (C function)c.phy_ethtool_nway_resethNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4int phy_ethtool_nway_reset (struct net_device *ndev)h]h)}(h3int phy_ethtool_nway_reset(struct net_device *ndev)h](j)}(hinth]hint}(hj˴hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǴhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjڴhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjǴhhhjٴhMubj)}(hphy_ethtool_nway_reseth]j%)}(hphy_ethtool_nway_reseth]hphy_ethtool_nway_reset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjǴhhhjٴhMubj)}(h(struct net_device *ndev)h]j)}(hstruct net_device *ndevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_nway_resetasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjThhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hndevh]hndev}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjǴhhhjٴhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjôhhhjٴhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjٴhMhjhhubjS)}(hhh]jX)}(hRestart auto negotiationh]hRestart auto negotiation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjٴhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hS**Parameters** ``struct net_device *ndev`` Network device to restart autoneg forh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(hA``struct net_device *ndev`` Network device to restart autoneg forh](j)}(h``struct net_device *ndev``h]j)}(hj̵h]hstruct net_device *ndev}(hjεhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʵubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjƵubj)}(hhh]jX)}(h%Network device to restart autoneg forh]h%Network device to restart autoneg for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:113: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjƵubeh}(h]h ]h"]h$]h&]uh1jhjhMhjõubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_config_interrupt (C function)c.phy_config_interrupthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint phy_config_interrupt (struct phy_device *phydev, bool interrupts)h]h)}(hDint phy_config_interrupt(struct phy_device *phydev, bool interrupts)h](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhj4hKubj)}(hphy_config_interrupth]j%)}(hphy_config_interrupth]hphy_config_interrupt}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj"hhhj4hKubj)}(h,(struct phy_device *phydev, bool interrupts)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjIsbc.phy_config_interruptasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[ubj)}(hbool interruptsh](j)}(hjTh]hbool}(hjնhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjѶubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjѶubj%)}(h interruptsh]h interrupts}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjѶubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj[ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj"hhhj4hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj4hKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj4hKhjhhubjS)}(hhh]jX)}(h5configure the PHY device for the requested interruptsh]h5configure the PHY device for the requested interrupts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj4hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj2jxj2jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``bool interrupts`` interrupt flags to configure for this **phydev** **Description** Returns 0 on success or < 0 on error.h](jX)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhj6ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj[h]hstruct phy_device *phydev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjUubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphKhjRubj)}(hE``bool interrupts`` interrupt flags to configure for this **phydev** h](j)}(h``bool interrupts``h]j)}(hjh]hbool interrupts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjubj)}(hhh]jX)}(h0interrupt flags to configure for this **phydev**h](h&interrupt flags to configure for this }(hjhhhNhNubj)}(h **phydev**h]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubjX)}(h**Description**h]j)}(hjݷh]h Description}(hj߷hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۷ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhj6ubjX)}(h%Returns 0 on success or < 0 on error.h]h%Returns 0 on success or < 0 on error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_supported_speeds (C function)c.phy_supported_speedshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hcunsigned int phy_supported_speeds (struct phy_device *phy, unsigned int *speeds, unsigned int size)h]h)}(hbunsigned int phy_supported_speeds(struct phy_device *phy, unsigned int *speeds, unsigned int size)h](j)}(hunsignedh]hunsigned}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj0hKubj)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hKubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj0hKubj)}(hphy_supported_speedsh]j%)}(hphy_supported_speedsh]hphy_supported_speeds}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj0hKubj)}(hA(struct phy_device *phy, unsigned int *speeds, unsigned int size)h](j)}(hstruct phy_device *phyh](h)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjasbc.phy_supported_speedsasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwubj;)}(hj>h]h*}(hjǸhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubj%)}(hphyh]hphy}(hjԸhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubj)}(hunsigned int *speedsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hspeedsh]hspeeds}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubj)}(hunsigned int sizeh](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj%)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjsubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj0hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj0hKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hKhjhhubjS)}(hhh]jX)}(h5return all speeds currently supported by a phy deviceh]h5return all speeds currently supported by a phy device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj0hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjŹjxjŹjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phy`` The phy device to return supported speeds of. ``unsigned int *speeds`` buffer to store supported speeds in. ``unsigned int size`` size of speeds buffer. **Description** Returns the number of supported speeds, and fills the speeds buffer with the supported speeds. If speeds buffer is too small to contain all currently supported speeds, will return as many speeds as can fit.h](jX)}(h**Parameters**h]j)}(hjϹh]h Parameters}(hjѹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͹ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjɹubj)}(hhh](j)}(hI``struct phy_device *phy`` The phy device to return supported speeds of. h](j)}(h``struct phy_device *phy``h]j)}(hjh]hstruct phy_device *phy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjubj)}(hhh]jX)}(h-The phy device to return supported speeds of.h]h-The phy device to return supported speeds of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``unsigned int *speeds`` buffer to store supported speeds in. h](j)}(h``unsigned int *speeds``h]j)}(hj'h]hunsigned int *speeds}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhj!ubj)}(hhh]jX)}(h$buffer to store supported speeds in.h]h$buffer to store supported speeds in.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubj)}(h-``unsigned int size`` size of speeds buffer. h](j)}(h``unsigned int size``h]j)}(hj`h]hunsigned int size}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjZubj)}(hhh]jX)}(hsize of speeds buffer.h]hsize of speeds buffer.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjubeh}(h]h ]h"]h$]h&]uh1jhjɹubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjɹubjX)}(hReturns the number of supported speeds, and fills the speeds buffer with the supported speeds. If speeds buffer is too small to contain all currently supported speeds, will return as many speeds as can fit.h]hReturns the number of supported speeds, and fills the speeds buffer with the supported speeds. If speeds buffer is too small to contain all currently supported speeds, will return as many speeds as can fit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjɹubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_sanitize_settings (C function)c.phy_sanitize_settingshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6void phy_sanitize_settings (struct phy_device *phydev)h]h)}(h5void phy_sanitize_settings(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܺhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjܺhhhjhKubj)}(hphy_sanitize_settingsh]j%)}(hphy_sanitize_settingsh]hphy_sanitize_settings}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjܺhhhjhKubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jjsbc.phy_sanitize_settingsasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjܺhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjغhhhjhKubah}(h]jӺah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjպhhubjS)}(hhh]jX)}(h6make sure the PHY is set to supported speed and duplexh]h6make sure the PHY is set to supported speed and duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjպhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the target phy_device struct **Description** Make sure the PHY is set to supported speeds and duplexes. Drop down by one in this order: 1000/FULL, 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.h](jX)}(h**Parameters**h]j)}(hj»h]h Parameters}(hjĻhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjubj)}(hhh]j)}(h;``struct phy_device *phydev`` the target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߻ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjۻubj)}(hhh]jX)}(hthe target phy_device structh]hthe target phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjۻubeh}(h]h ]h"]h$]h&]uh1jhjhKhjػubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhjubj)}(hhh]j)}(hMake sure the PHY is set to supported speeds and duplexes. Drop down by one in this order: 1000/FULL, 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.h](j)}(h0Make sure the PHY is set to supported speeds andh]h0Make sure the PHY is set to supported speeds and}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chKhj5ubj)}(hhh]jX)}(hgduplexes. Drop down by one in this order: 1000/FULL, 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.h]hgduplexes. Drop down by one in this order: 1000/FULL, 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhKhjHubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_hwtstamp_get (C function)c.__phy_hwtstamp_gethNtauh1hhjnhhhNhNubh)}(hhh](h)}(hYint __phy_hwtstamp_get (struct phy_device *phydev, struct kernel_hwtstamp_config *config)h]h)}(hXint __phy_hwtstamp_get(struct phy_device *phydev, struct kernel_hwtstamp_config *config)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h__phy_hwtstamp_geth]j%)}(h__phy_hwtstamp_geth]h__phy_hwtstamp_get}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hB(struct phy_device *phydev, struct kernel_hwtstamp_config *config)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjȼhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjļubj)}(h h]h }(hjռhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjļubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_hwtstamp_getasbuh1hhjļubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjļubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjļubj%)}(hphydevh]hphydev}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjļubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h%struct kernel_hwtstamp_config *configh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hkernel_hwtstamp_configh]hkernel_hwtstamp_config}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]jc.__phy_hwtstamp_getasbuh1hhj6ubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]j~ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h0Get hardware timestamping configuration from PHYh]h0Get hardware timestamping configuration from PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjӽjxjӽjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the PHY device structure ``struct kernel_hwtstamp_config *config`` structure holding the timestamping configuration **Description** Query the PHY device for its current hardware timestamping configuration.h](jX)}(h**Parameters**h]j)}(hjݽh]h Parameters}(hj߽hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۽ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj׽ubj)}(hhh](j)}(h7``struct phy_device *phydev`` the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hthe PHY device structureh]hthe PHY device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h[``struct kernel_hwtstamp_config *config`` structure holding the timestamping configuration h](j)}(h)``struct kernel_hwtstamp_config *config``h]j)}(hj5h]h%struct kernel_hwtstamp_config *config}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj/ubj)}(hhh]jX)}(h0structure holding the timestamping configurationh]h0structure holding the timestamping configuration}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhj׽ubjX)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj׽ubjX)}(hIQuery the PHY device for its current hardware timestamping configuration.h]hIQuery the PHY device for its current hardware timestamping configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj׽ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_hwtstamp_set (C function)c.__phy_hwtstamp_sethNtauh1hhjnhhhNhNubh)}(hhh](h)}(hyint __phy_hwtstamp_set (struct phy_device *phydev, struct kernel_hwtstamp_config *config, struct netlink_ext_ack *extack)h]h)}(hxint __phy_hwtstamp_set(struct phy_device *phydev, struct kernel_hwtstamp_config *config, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjľhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjþhMubj)}(h__phy_hwtstamp_seth]j%)}(h__phy_hwtstamp_seth]h__phy_hwtstamp_set}(hj־hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjҾubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjþhMubj)}(hb(struct phy_device *phydev, struct kernel_hwtstamp_config *config, struct netlink_ext_ack *extack)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjؾsbc.__phy_hwtstamp_setasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h%struct kernel_hwtstamp_config *configh](h)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(hhh]j%)}(hkernel_hwtstamp_configh]hkernel_hwtstamp_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j,c.__phy_hwtstamp_setasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`ubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjԿhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjпubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjпubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j,c.__phy_hwtstamp_setasbuh1hhjпubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjпubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjпubj%)}(hextackh]hextack}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjпubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjþhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjþhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjþhMhjhhubjS)}(hhh]jX)}(h.Modify PHY hardware timestamping configurationh]h.Modify PHY hardware timestamping configuration}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjþhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the PHY device structure ``struct kernel_hwtstamp_config *config`` structure holding the timestamping configuration ``struct netlink_ext_ack *extack`` netlink extended ack structure, for error reportingh](jX)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjqubj)}(hhh](j)}(h7``struct phy_device *phydev`` the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hthe PHY device structureh]hthe PHY device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h[``struct kernel_hwtstamp_config *config`` structure holding the timestamping configuration h](j)}(h)``struct kernel_hwtstamp_config *config``h]j)}(hjh]h%struct kernel_hwtstamp_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h0structure holding the timestamping configurationh]h0structure holding the timestamping configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``struct netlink_ext_ack *extack`` netlink extended ack structure, for error reportingh](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h3netlink extended ack structure, for error reportingh]h3netlink extended ack structure, for error reporting}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_queue_state_machine (C function)c.phy_queue_state_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOvoid phy_queue_state_machine (struct phy_device *phydev, unsigned long jiffies)h]h)}(hNvoid phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhjphMubj)}(hphy_queue_state_machineh]j%)}(hphy_queue_state_machineh]hphy_queue_state_machine}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhjphMubj)}(h2(struct phy_device *phydev, unsigned long jiffies)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_queue_state_machineasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned long jiffiesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hlongh]hlong}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hjiffiesh]hjiffies}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhjphMubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjphMhjWhhubjS)}(hhh]jX)}(h%Trigger the state machine to run soonh]h%Trigger the state machine to run soon}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjphhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjphMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``unsigned long jiffies`` Run the state machine after these jiffiesh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``unsigned long jiffies`` Run the state machine after these jiffiesh](j)}(h``unsigned long jiffies``h]j)}(hjh]hunsigned long jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h)Run the state machine after these jiffiesh]h)Run the state machine after these jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(__phy_ethtool_get_phy_stats (C function)c.__phy_ethtool_get_phy_statshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hvoid __phy_ethtool_get_phy_stats (struct phy_device *phydev, struct ethtool_eth_phy_stats *phy_stats, struct ethtool_phy_stats *phydev_stats)h]h)}(hvoid __phy_ethtool_get_phy_stats(struct phy_device *phydev, struct ethtool_eth_phy_stats *phy_stats, struct ethtool_phy_stats *phydev_stats)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMbubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjChhhjUhMbubj)}(h__phy_ethtool_get_phy_statsh]j%)}(h__phy_ethtool_get_phy_statsh]h__phy_ethtool_get_phy_stats}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjUhMbubj)}(hl(struct phy_device *phydev, struct ethtool_eth_phy_stats *phy_stats, struct ethtool_phy_stats *phydev_stats)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjjsbc.__phy_ethtool_get_phy_statsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(h'struct ethtool_eth_phy_stats *phy_statsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hethtool_eth_phy_statsh]hethtool_eth_phy_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_ethtool_get_phy_statsasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h phy_statsh]h phy_stats}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubj)}(h&struct ethtool_phy_stats *phydev_statsh](h)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubh)}(hhh]j%)}(hethtool_phy_statsh]hethtool_phy_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_ethtool_get_phy_statsasbuh1hhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbubj%)}(h phydev_statsh]h phydev_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj|ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjUhMbubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj?hhhjUhMbubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjUhMbhj<hhubjS)}(hhh]jX)}(h$Retrieve standardized PHY statisticsh]h$Retrieve standardized PHY statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMbhjhhubah}(h]h ]h"]h$]h&]uh1jRhj<hhhjUhMbubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` Pointer to the PHY device ``struct ethtool_eth_phy_stats *phy_stats`` Pointer to ethtool_eth_phy_stats structure ``struct ethtool_phy_stats *phydev_stats`` Pointer to ethtool_phy_stats structure **Description** Fetches PHY statistics using a kernel-defined interface for consistent diagnostics. Unlike phy_ethtool_get_stats(), which allows custom stats, this function enforces a standardized format for better interoperability.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMfhjubj)}(hhh](j)}(h8``struct phy_device *phydev`` Pointer to the PHY device h](j)}(h``struct phy_device *phydev``h]j)}(hj(h]hstruct phy_device *phydev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMchj"ubj)}(hhh]jX)}(hPointer to the PHY deviceh]hPointer to the PHY device}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hMchj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMchjubj)}(hW``struct ethtool_eth_phy_stats *phy_stats`` Pointer to ethtool_eth_phy_stats structure h](j)}(h+``struct ethtool_eth_phy_stats *phy_stats``h]j)}(hjah]h'struct ethtool_eth_phy_stats *phy_stats}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMdhj[ubj)}(hhh]jX)}(h*Pointer to ethtool_eth_phy_stats structureh]h*Pointer to ethtool_eth_phy_stats structure}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMdhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMdhjubj)}(hR``struct ethtool_phy_stats *phydev_stats`` Pointer to ethtool_phy_stats structure h](j)}(h*``struct ethtool_phy_stats *phydev_stats``h]j)}(hjh]h&struct ethtool_phy_stats *phydev_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMehjubj)}(hhh]jX)}(h&Pointer to ethtool_phy_stats structureh]h&Pointer to ethtool_phy_stats structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMghjubjX)}(hFetches PHY statistics using a kernel-defined interface for consistent diagnostics. Unlike phy_ethtool_get_stats(), which allows custom stats, this function enforces a standardized format for better interoperability.h]hFetches PHY statistics using a kernel-defined interface for consistent diagnostics. Unlike phy_ethtool_get_stats(), which allows custom stats, this function enforces a standardized format for better interoperability.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-__phy_ethtool_get_link_ext_stats (C function)"c.__phy_ethtool_get_link_ext_statshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hlvoid __phy_ethtool_get_link_ext_stats (struct phy_device *phydev, struct ethtool_link_ext_stats *link_stats)h]h)}(hkvoid __phy_ethtool_get_link_ext_stats(struct phy_device *phydev, struct ethtool_link_ext_stats *link_stats)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMxubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj(hMxubj)}(h __phy_ethtool_get_link_ext_statsh]j%)}(h __phy_ethtool_get_link_ext_statsh]h __phy_ethtool_get_link_ext_stats}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj(hMxubj)}(hF(struct phy_device *phydev, struct ethtool_link_ext_stats *link_stats)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjwmodnameN classnameNjj!)}j$]j')}jj=sb"c.__phy_ethtool_get_link_ext_statsasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjSubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(h)struct ethtool_link_ext_stats *link_statsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hethtool_link_ext_statsh]hethtool_link_ext_stats}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j"c.__phy_ethtool_get_link_ext_statsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h link_statsh]h link_stats}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj(hMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj(hMxubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(hMxhjhhubjS)}(hhh]jX)}(h+Retrieve extended link statistics for a PHYh]h+Retrieve extended link statistics for a PHY}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMxhjGhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj(hMxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjnhNhNubj})}(hXP**Parameters** ``struct phy_device *phydev`` Pointer to the PHY device ``struct ethtool_link_ext_stats *link_stats`` Pointer to the structure to store extended link statistics **Description** Populates the ethtool_link_ext_stats structure with link down event counts and additional driver-specific link statistics, if available.h](jX)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM|hjfubj)}(hhh](j)}(h8``struct phy_device *phydev`` Pointer to the PHY device h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMyhjubj)}(hhh]jX)}(hPointer to the PHY deviceh]hPointer to the PHY device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(hi``struct ethtool_link_ext_stats *link_stats`` Pointer to the structure to store extended link statistics h](j)}(h-``struct ethtool_link_ext_stats *link_stats``h]j)}(hjh]h)struct ethtool_link_ext_stats *link_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMzhjubj)}(hhh]jX)}(h:Pointer to the structure to store extended link statisticsh]h:Pointer to the structure to store extended link statistics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubeh}(h]h ]h"]h$]h&]uh1jhjfubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM|hjfubjX)}(hPopulates the ethtool_link_ext_stats structure with link down event counts and additional driver-specific link statistics, if available.h]hPopulates the ethtool_link_ext_stats structure with link down event counts and additional driver-specific link statistics, if available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM{hjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_ethtool_get_plca_cfg (C function)c.phy_ethtool_get_plca_cfghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hWint phy_ethtool_get_plca_cfg (struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h]h)}(hVint phy_ethtool_get_plca_cfg(struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhjRhMubj)}(hphy_ethtool_get_plca_cfgh]j%)}(hphy_ethtool_get_plca_cfgh]hphy_ethtool_get_plca_cfg}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhjRhMubj)}(h:(struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjgsbc.phy_ethtool_get_plca_cfgasbuh1hhj}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubj)}(hstruct phy_plca_cfg *plca_cfgh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_plca_cfgh]h phy_plca_cfg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_ethtool_get_plca_cfgasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplca_cfgh]hplca_cfg}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubeh}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhjRhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj<hhhjRhMubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMhj9hhubjS)}(hhh]jX)}(hGet PLCA RS configurationh]hGet PLCA RS configuration}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jRhj9hhhjRhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct phy_plca_cfg *plca_cfg`` where to store the retrieved configuration **Description** Retrieve the PLCA configuration from the PHY. Return 0 on success or a negative value if an error occurred.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``struct phy_plca_cfg *plca_cfg`` where to store the retrieved configuration h](j)}(h!``struct phy_plca_cfg *plca_cfg``h]j)}(hjh]hstruct phy_plca_cfg *plca_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h*where to store the retrieved configurationh]h*where to store the retrieved configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(hkRetrieve the PLCA configuration from the PHY. Return 0 on success or a negative value if an error occurred.h]hkRetrieve the PLCA configuration from the PHY. Return 0 on success or a negative value if an error occurred.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hplca_check_valid (C function)c.plca_check_validhNtauh1hhjnhhhNhNubh)}(hhh](h)}(huint plca_check_valid (struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h]h)}(htint plca_check_valid(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj|hMubj)}(hplca_check_validh]j%)}(hplca_check_validh]hplca_check_valid}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj|hMubj)}(h`(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.plca_check_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h#const struct phy_plca_cfg *plca_cfgh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_plca_cfgh]h phy_plca_cfg}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]jc.plca_check_validasbuh1hhjubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplca_cfgh]hplca_cfg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.plca_check_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hextackh]hextack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj|hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj|hMubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMhjchhubjS)}(hhh]jX)}(h(Check PLCA configuration before enablingh]h(Check PLCA configuration before enabling}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj&hhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj|hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjAjxjAjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``const struct phy_plca_cfg *plca_cfg`` current PLCA configuration ``struct netlink_ext_ack *extack`` extack for reporting useful error messages **Description** Checks whether the PLCA and PHY configuration are consistent and it is safe to enable PLCA. Returns 0 on success or a negative value if the PLCA or PHY configuration is not consistent.h](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjEubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjjh]hstruct phy_device *phydev}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjdubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(hC``const struct phy_plca_cfg *plca_cfg`` current PLCA configuration h](j)}(h'``const struct phy_plca_cfg *plca_cfg``h]j)}(hjh]h#const struct phy_plca_cfg *plca_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hcurrent PLCA configurationh]hcurrent PLCA configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubj)}(hN``struct netlink_ext_ack *extack`` extack for reporting useful error messages h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h*extack for reporting useful error messagesh]h*extack for reporting useful error messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjEubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjEubjX)}(hChecks whether the PLCA and PHY configuration are consistent and it is safe to enable PLCA. Returns 0 on success or a negative value if the PLCA or PHY configuration is not consistent.h]hChecks whether the PLCA and PHY configuration are consistent and it is safe to enable PLCA. Returns 0 on success or a negative value if the PLCA or PHY configuration is not consistent.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_ethtool_set_plca_cfg (C function)c.phy_ethtool_set_plca_cfghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h}int phy_ethtool_set_plca_cfg (struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h]h)}(h|int phy_ethtool_set_plca_cfg(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhjjhMubj)}(hphy_ethtool_set_plca_cfgh]j%)}(hphy_ethtool_set_plca_cfgh]hphy_ethtool_set_plca_cfg}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXhhhjjhMubj)}(h`(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg, struct netlink_ext_ack *extack)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_set_plca_cfgasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h#const struct phy_plca_cfg *plca_cfgh](h)}(hjh]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_plca_cfgh]h phy_plca_cfg}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjFmodnameN classnameNjj!)}j$]jc.phy_ethtool_set_plca_cfgasbuh1hhjubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplca_cfgh]hplca_cfg}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_ethtool_set_plca_cfgasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hextackh]hextack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjXhhhjjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjThhhjjhMubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjjhMhjQhhubjS)}(hhh]jX)}(hSet PLCA RS configurationh]hSet PLCA RS configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjQhhhjjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhjnhNhNubj})}(hXY**Parameters** ``struct phy_device *phydev`` the phy_device struct ``const struct phy_plca_cfg *plca_cfg`` new PLCA configuration to apply ``struct netlink_ext_ack *extack`` extack for reporting useful error messages **Description** Sets the PLCA configuration in the PHY. Return 0 on success or a negative value if an error occurred.h](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj3ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjXh]hstruct phy_device *phydev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjRubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjOubj)}(hH``const struct phy_plca_cfg *plca_cfg`` new PLCA configuration to apply h](j)}(h'``const struct phy_plca_cfg *plca_cfg``h]j)}(hjh]h#const struct phy_plca_cfg *plca_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hnew PLCA configuration to applyh]hnew PLCA configuration to apply}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubj)}(hN``struct netlink_ext_ack *extack`` extack for reporting useful error messages h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjh]hstruct netlink_ext_ack *extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h*extack for reporting useful error messagesh]h*extack for reporting useful error messages}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj3ubjX)}(heSets the PLCA configuration in the PHY. Return 0 on success or a negative value if an error occurred.h]heSets the PLCA configuration in the PHY. Return 0 on success or a negative value if an error occurred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phy_ethtool_get_plca_status (C function)c.phy_ethtool_get_plca_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(h\int phy_ethtool_get_plca_status (struct phy_device *phydev, struct phy_plca_status *plca_st)h]h)}(h[int phy_ethtool_get_plca_status(struct phy_device *phydev, struct phy_plca_status *plca_st)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM.ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFhhhjXhM.ubj)}(hphy_ethtool_get_plca_statush]j%)}(hphy_ethtool_get_plca_statush]hphy_ethtool_get_plca_status}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjFhhhjXhM.ubj)}(h<(struct phy_device *phydev, struct phy_plca_status *plca_st)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjmsbc.phy_ethtool_get_plca_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct phy_plca_status *plca_sth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphy_plca_statush]hphy_plca_status}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_ethtool_get_plca_statusasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplca_sth]hplca_st}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjFhhhjXhM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBhhhjXhM.ubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhM.hj?hhubjS)}(hhh]jX)}(hGet PLCA RS status informationh]hGet PLCA RS status information}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM.hjwhhubah}(h]h ]h"]h$]h&]uh1jRhj?hhhjXhM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``struct phy_plca_status *plca_st`` where to store the retrieved status information **Description** Retrieve the PLCA status information from the PHY. Return 0 on success or a negative value if an error occurred.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM2hjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM/hjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(hT``struct phy_plca_status *plca_st`` where to store the retrieved status information h](j)}(h#``struct phy_plca_status *plca_st``h]j)}(hjh]hstruct phy_plca_status *plca_st}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM0hjubj)}(hhh]jX)}(h/where to store the retrieved status informationh]h/where to store the retrieved status information}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM0hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM0hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM2hjubjX)}(hpRetrieve the PLCA status information from the PHY. Return 0 on success or a negative value if an error occurred.h]hpRetrieve the PLCA status information from the PHY. Return 0 on success or a negative value if an error occurred.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_check_link_status (C function)c.phy_check_link_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(h5int phy_check_link_status (struct phy_device *phydev)h]h)}(h4int phy_check_link_status(struct phy_device *phydev)h](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhjhMubj)}(hphy_check_link_statush]j%)}(hphy_check_link_statush]hphy_check_link_status}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjphhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_check_link_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjphhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjhMubah}(h]jgah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjihhubjS)}(hhh]jX)}(h+check link status and set state accordinglyh]h+check link status and set state accordingly}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jRhjihhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjLjxjLjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct **Description** Check for link and whether autoneg was triggered / is running and set state accordinglyh](jX)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjPubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjuh]hstruct phy_device *phydev}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjoubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjPubjX)}(hWCheck for link and whether autoneg was triggered / is running and set state accordinglyh]hWCheck for link and whether autoneg was triggered / is running and set state accordingly}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_stop_machine (C function)c.phy_stop_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1void phy_stop_machine (struct phy_device *phydev)h]h)}(h0void phy_stop_machine(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM)ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM)ubj)}(hphy_stop_machineh]j%)}(hphy_stop_machineh]hphy_stop_machine}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM)ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j')}jjsbc.phy_stop_machineasbuh1hhj.ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM)ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM)hjhhubjS)}(hhh]jX)}(h#stop the PHY state machine trackingh]h#stop the PHY state machine tracking}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM)hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM)ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Stops the state machine delayed workqueue, sets the state to UP (unless it wasn't up yet). This function must be called BEFORE phy_detach.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM-hjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM*hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM*hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM*hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM,hjubj)}(hhh]j)}(hStops the state machine delayed workqueue, sets the state to UP (unless it wasn't up yet). This function must be called BEFORE phy_detach.h](j)}(h3Stops the state machine delayed workqueue, sets theh]h3Stops the state machine delayed workqueue, sets the}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM-hjJubj)}(hhh]jX)}(hVstate to UP (unless it wasn't up yet). This function must be called BEFORE phy_detach.h]hXstate to UP (unless it wasn’t up yet). This function must be called BEFORE phy_detach.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hM-hj]ubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhj\hM-hjGubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_disable_interrupts (C function)c.phy_disable_interruptshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int phy_disable_interrupts (struct phy_device *phydev)h]h)}(h5int phy_disable_interrupts(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM\ubj)}(hphy_disable_interruptsh]j%)}(hphy_disable_interruptsh]hphy_disable_interrupts}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM\ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_disable_interruptsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM\ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM\ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM\hjhhubjS)}(hhh]jX)}(h,Disable the PHY interrupts from the PHY sideh]h,Disable the PHY interrupts from the PHY side}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM\hj]hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM\ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjxjxjxjyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM`hj|ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMbhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_interrupt (C function)c.phy_interrupthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2irqreturn_t phy_interrupt (int irq, void *phy_dat)h]h)}(h1irqreturn_t phy_interrupt(int irq, void *phy_dat)h](h)}(hhh]j%)}(h irqreturn_th]h irqreturn_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j phy_interruptsbc.phy_interruptasbuh1hhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMfubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMfubj)}(h phy_interrupth]j%)}(hjh]h phy_interrupt}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMfubj)}(h(int irq, void *phy_dat)h](j)}(hint irqh](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj%)}(hirqh]hirq}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubj)}(h void *phy_dath](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj~ubj%)}(hphy_dath]hphy_dat}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMfubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMfubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMfhjhhubjS)}(hhh]jX)}(hPHY interrupt handlerh]hPHY interrupt handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMfhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMfubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h{**Parameters** ``int irq`` interrupt line ``void *phy_dat`` phy_device pointer **Description** Handle PHY interrupth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMjhjubj)}(hhh](j)}(h``int irq`` interrupt line h](j)}(h ``int irq``h]j)}(hjh]hint irq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMghjubj)}(hhh]jX)}(hinterrupt lineh]hinterrupt line}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMghj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMghj ubj)}(h%``void *phy_dat`` phy_device pointer h](j)}(h``void *phy_dat``h]j)}(hjOh]h void *phy_dat}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhhjIubj)}(hhh]jX)}(hphy_device pointerh]hphy_device pointer}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMjhjubjX)}(hHandle PHY interrupth]hHandle PHY interrupt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_enable_interrupts (C function)c.phy_enable_interruptshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h5int phy_enable_interrupts (struct phy_device *phydev)h]h)}(h4int phy_enable_interrupts(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_enable_interruptsh]j%)}(hphy_enable_interruptsh]hphy_enable_interrupts}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj,modnameN classnameNjj!)}j$]j')}jjsbc.phy_enable_interruptsasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h'Enable the interrupts from the PHY sideh]h'Enable the interrupts from the PHY side}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_update_stats (C function)c.phy_update_statshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0int phy_update_stats (struct phy_device *phydev)h]h)}(h/int phy_update_stats(struct phy_device *phydev)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj8hMubj)}(hphy_update_statsh]j%)}(hphy_update_statsh]hphy_update_stats}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj8hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjMsbc.phy_update_statsasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubah}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj8hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj8hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hMhjhhubjS)}(hhh]jX)}(h*Update PHY device statistics if supported.h]h*Update PHY device statistics if supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj8hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX3**Parameters** ``struct phy_device *phydev`` Pointer to the PHY device structure. **Description** If the PHY driver provides an update_stats callback, this function invokes it to update the PHY statistics. If not, it returns 0. **Return** 0 on success, or a negative error code if the callback fails.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(hC``struct phy_device *phydev`` Pointer to the PHY device structure. h](j)}(h``struct phy_device *phydev``h]j)}(hj+h]hstruct phy_device *phydev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj%ubj)}(hhh]jX)}(h$Pointer to the PHY device structure.h]h$Pointer to the PHY device structure.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(hIf the PHY driver provides an update_stats callback, this function invokes it to update the PHY statistics. If not, it returns 0.h]hIf the PHY driver provides an update_stats callback, this function invokes it to update the PHY statistics. If not, it returns 0.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(h=0 on success, or a negative error code if the callback fails.h]h=0 on success, or a negative error code if the callback fails.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_get_next_update_time (C function)c.phy_get_next_update_timehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hAunsigned int phy_get_next_update_time (struct phy_device *phydev)h]h)}(h@unsigned int phy_get_next_update_time(struct phy_device *phydev)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_get_next_update_timeh]j%)}(hphy_get_next_update_timeh]hphy_get_next_update_time}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjIhhhNhNubah}(h]h ]j0ah"]h$A]h&]uh1j$hjFubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKmodnameN classnameNjj!)}j$]j')}jjsbc.phy_get_next_update_timeasbuh1hhj'ubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hjwhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h"Determine the next PHY update timeh]h"Determine the next PHY update time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX:**Parameters** ``struct phy_device *phydev`` Pointer to the phy_device structure **Description** This function queries the PHY driver to get the time for the next polling event. If the driver does not implement the callback, a default value is used. **Return** The time for the next polling event in jiffiesh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]j)}(hB``struct phy_device *phydev`` Pointer to the phy_device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(h#Pointer to the phy_device structureh]h#Pointer to the phy_device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(hThis function queries the PHY driver to get the time for the next polling event. If the driver does not implement the callback, a default value is used.h]hThis function queries the PHY driver to get the time for the next polling event. If the driver does not implement the callback, a default value is used.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(h **Return**h]j)}(hjQh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubjX)}(h.The time for the next polling event in jiffiesh]h.The time for the next polling event in jiffies}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_state_machine (C function)c.phy_state_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1void phy_state_machine (struct work_struct *work)h]h)}(h0void phy_state_machine(struct work_struct *work)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMRubj)}(hphy_state_machineh]j%)}(hphy_state_machineh]hphy_state_machine}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMRubj)}(h(struct work_struct *work)h]j)}(hstruct work_struct *workh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h work_structh]h work_struct}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_state_machineasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hworkh]hwork}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMRubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMRhjhhubjS)}(hhh]jX)}(hHandle the state machineh]hHandle the state machine}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMRhjShhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjnjxjnjyjzj{uh1hhhhjnhNhNubj})}(h]**Parameters** ``struct work_struct *work`` work_struct that describes the work to be doneh](jX)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMVhjrubj)}(hhh]j)}(hK``struct work_struct *work`` work_struct that describes the work to be doneh](j)}(h``struct work_struct *work``h]j)}(hjh]hstruct work_struct *work}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMXhjubj)}(hhh]jX)}(h.work_struct that describes the work to be doneh]h.work_struct that describes the work to be done}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phy_ethtool_set_eee_noneg (C function)c.phy_ethtool_set_eee_noneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h\void phy_ethtool_set_eee_noneg (struct phy_device *phydev, const struct eee_config *old_cfg)h]h)}(h[void phy_ethtool_set_eee_noneg(struct phy_device *phydev, const struct eee_config *old_cfg)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_ethtool_set_eee_nonegh]j%)}(hphy_ethtool_set_eee_nonegh]hphy_ethtool_set_eee_noneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h=(struct phy_device *phydev, const struct eee_config *old_cfg)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jjsbc.phy_ethtool_set_eee_nonegasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubj)}(h const struct eee_config *old_cfgh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h eee_configh]h eee_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jhc.phy_ethtool_set_eee_nonegasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hold_cfgh]hold_cfg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h7Adjusts MAC LPI configuration without PHY renegotiationh]h7Adjusts MAC LPI configuration without PHY renegotiation}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjTjxjTjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` pointer to the target PHY device structure ``const struct eee_config *old_cfg`` pointer to the eee_config structure containing the old EEE settings **Description** This function updates the Energy Efficient Ethernet (EEE) configuration for cases where only the MAC's Low Power Idle (LPI) configuration changes, without triggering PHY renegotiation. It ensures that the MAC is properly informed of the new LPI settings by cycling the link down and up, which is necessary for the MAC to adopt the new configuration. This adjustment is done only if there is a change in the tx_lpi_enabled or tx_lpi_timer configuration.h](jX)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjXubj)}(hhh](j)}(hI``struct phy_device *phydev`` pointer to the target PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hj}h]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjwubj)}(hhh]jX)}(h*pointer to the target PHY device structureh]h*pointer to the target PHY device structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubj)}(hi``const struct eee_config *old_cfg`` pointer to the eee_config structure containing the old EEE settings h](j)}(h$``const struct eee_config *old_cfg``h]j)}(hjh]h const struct eee_config *old_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjubj)}(hhh]jX)}(hCpointer to the eee_config structure containing the old EEE settingsh]hCpointer to the eee_config structure containing the old EEE settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjXubjX)}(hXThis function updates the Energy Efficient Ethernet (EEE) configuration for cases where only the MAC's Low Power Idle (LPI) configuration changes, without triggering PHY renegotiation. It ensures that the MAC is properly informed of the new LPI settings by cycling the link down and up, which is necessary for the MAC to adopt the new configuration. This adjustment is done only if there is a change in the tx_lpi_enabled or tx_lpi_timer configuration.h]hXThis function updates the Energy Efficient Ethernet (EEE) configuration for cases where only the MAC’s Low Power Idle (LPI) configuration changes, without triggering PHY renegotiation. It ensures that the MAC is properly informed of the new LPI settings by cycling the link down and up, which is necessary for the MAC to adopt the new configuration. This adjustment is done only if there is a change in the tx_lpi_enabled or tx_lpi_timer configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhV/var/lib/git/docbuild/linux/Documentation/networking/kapi:116: ./drivers/net/phy/phy.chMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_speed_to_str (C function)c.phy_speed_to_strhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h)const char * phy_speed_to_str (int speed)h]h)}(h'const char *phy_speed_to_str(int speed)h](h)}(hjh]hconst}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhjChKubj)}(hcharh]hchar}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjChKubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhjChKubj;)}(hj>h]h*}(hjnhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2hhhjChKubj)}(hphy_speed_to_strh]j%)}(hphy_speed_to_strh]hphy_speed_to_str}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2hhhjChKubj)}(h (int speed)h]j)}(h int speedh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hspeedh]hspeed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj2hhhjChKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.hhhjChKubah}(h]j)ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChKhj+hhubjS)}(hhh]jX)}(h/Return a string representing the PHY link speedh]h/Return a string representing the PHY link speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhj+hhhjChKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h1**Parameters** ``int speed`` Speed of the linkh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh]j)}(h``int speed`` Speed of the linkh](j)}(h ``int speed``h]j)}(hj"h]h int speed}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh]jX)}(hSpeed of the linkh]hSpeed of the link}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_duplex_to_str (C function)c.phy_duplex_to_strhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4const char * phy_duplex_to_str (unsigned int duplex)h]h)}(h2const char *phy_duplex_to_str(unsigned int duplex)h](h)}(hjh]hconst}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxhhhjhKHubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhKHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxhhhjhKHubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxhhhjhKHubj)}(hphy_duplex_to_strh]j%)}(hphy_duplex_to_strh]hphy_duplex_to_str}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjxhhhjhKHubj)}(h(unsigned int duplex)h]j)}(hunsigned int duplexh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hduplexh]hduplex}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjxhhhjhKHubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjthhhjhKHubah}(h]joah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKHhjqhhubjS)}(hhh]jX)}(h#Return string describing the duplexh]h#Return string describing the duplex}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKHhj@hhubah}(h]h ]h"]h$]h&]uh1jRhjqhhhjhKHubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj[jxj[jyjzj{uh1hhhhjnhNhNubj})}(hD**Parameters** ``unsigned int duplex`` Duplex setting to describeh](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKLhj_ubj)}(hhh]j)}(h2``unsigned int duplex`` Duplex setting to describeh](j)}(h``unsigned int duplex``h]j)}(hjh]hunsigned int duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKNhj~ubj)}(hhh]jX)}(hDuplex setting to describeh]hDuplex setting to describe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKJhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKNhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_rate_matching_to_str (C function)c.phy_rate_matching_to_strhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9const char * phy_rate_matching_to_str (int rate_matching)h]h)}(h7const char *phy_rate_matching_to_str(int rate_matching)h](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKYubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhKYubj)}(hphy_rate_matching_to_strh]j%)}(hphy_rate_matching_to_strh]hphy_rate_matching_to_str}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKYubj)}(h(int rate_matching)h]j)}(hint rate_matchingh](j)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(h rate_matchingh]h rate_matching}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKYubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKYubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKYhjhhubjS)}(hhh]jX)}(h,Return a string describing the rate matchingh]h,Return a string describing the rate matching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKYhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKYubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hI**Parameters** ``int rate_matching`` Type of rate matching to describeh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chK]hjubj)}(hhh]j)}(h7``int rate_matching`` Type of rate matching to describeh](j)}(h``int rate_matching``h]j)}(hjh]hint rate_matching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chK_hjubj)}(hhh]jX)}(h!Type of rate matching to describeh]h!Type of rate matching to describe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h,phy_fix_phy_mode_for_mac_delays (C function)!c.phy_fix_phy_mode_for_mac_delayshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hiphy_interface_t phy_fix_phy_mode_for_mac_delays (phy_interface_t interface, bool mac_txid, bool mac_rxid)h]h)}(hhphy_interface_t phy_fix_phy_mode_for_mac_delays(phy_interface_t interface, bool mac_txid, bool mac_rxid)h](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj)modnameN classnameNjj!)}j$]j')}jphy_fix_phy_mode_for_mac_delayssb!c.phy_fix_phy_mode_for_mac_delaysasbuh1hhj hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKnubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjHhKnubj)}(hphy_fix_phy_mode_for_mac_delaysh]j%)}(hjEh]hphy_fix_phy_mode_for_mac_delays}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjHhKnubj)}(h9(phy_interface_t interface, bool mac_txid, bool mac_rxid)h](j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]jC!c.phy_fix_phy_mode_for_mac_delaysasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(h bool mac_txidh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmac_txidh]hmac_txid}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(h bool mac_rxidh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmac_rxidh]hmac_rxid}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjHhKnubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjHhKnubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhKnhjhhubjS)}(hhh]jX)}(hQConvenience function for fixing PHY mode based on whether mac adds internal delayh]hQConvenience function for fixing PHY mode based on whether mac adds internal delay}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKnhj4hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjHhKnubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjOjxjOjyjzj{uh1hhhhjnhNhNubj})}(hX6**Parameters** ``phy_interface_t interface`` The current interface mode of the port ``bool mac_txid`` True if the mac adds internal tx delay ``bool mac_rxid`` True if the mac adds internal rx delay **Return** fixed PHY mode, or PHY_INTERFACE_MODE_NA if the interface can not apply the internal delayh](jX)}(h**Parameters**h]j)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKrhjSubj)}(hhh](j)}(hE``phy_interface_t interface`` The current interface mode of the port h](j)}(h``phy_interface_t interface``h]j)}(hjxh]hphy_interface_t interface}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKqhjrubj)}(hhh]jX)}(h&The current interface mode of the porth]h&The current interface mode of the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjoubj)}(h9``bool mac_txid`` True if the mac adds internal tx delay h](j)}(h``bool mac_txid``h]j)}(hjh]h bool mac_txid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKrhjubj)}(hhh]jX)}(h&True if the mac adds internal tx delayh]h&True if the mac adds internal tx delay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKrhjoubj)}(h9``bool mac_rxid`` True if the mac adds internal rx delay h](j)}(h``bool mac_rxid``h]j)}(hjh]h bool mac_rxid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKshjubj)}(hhh]jX)}(h&True if the mac adds internal rx delayh]h&True if the mac adds internal rx delay}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjoubeh}(h]h ]h"]h$]h&]uh1jhjSubjX)}(h **Return**h]j)}(hj%h]hReturn}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKuhjSubjX)}(hZfixed PHY mode, or PHY_INTERFACE_MODE_NA if the interface can not apply the internal delayh]hZfixed PHY mode, or PHY_INTERFACE_MODE_NA if the interface can not apply the internal delay}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKuhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_interface_num_ports (C function)c.phy_interface_num_portshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7int phy_interface_num_ports (phy_interface_t interface)h]h)}(h6int phy_interface_num_ports(phy_interface_t interface)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjxhKubj)}(hphy_interface_num_portsh]j%)}(hphy_interface_num_portsh]hphy_interface_num_ports}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfhhhjxhKubj)}(h(phy_interface_t interface)h]j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_interface_num_portsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjfhhhjxhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbhhhjxhKubah}(h]j]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjxhKhj_hhubjS)}(hhh]jX)}(hReturn the number of links that can be carried by a given MAC-PHY physical link. Returns 0 if this is unknown, the number of links else.h]hReturn the number of links that can be carried by a given MAC-PHY physical link. Returns 0 if this is unknown, the number of links else.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhjxhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(he**Parameters** ``phy_interface_t interface`` The interface mode we want to get the number of portsh](jX)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh]j)}(hS``phy_interface_t interface`` The interface mode we want to get the number of portsh](j)}(h``phy_interface_t interface``h]j)}(hjCh]hphy_interface_t interface}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhj=ubj)}(hhh]jX)}(h5The interface mode we want to get the number of portsh]h5The interface mode we want to get the number of ports}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_set_max_speed (C function)c.phy_set_max_speedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hAvoid phy_set_max_speed (struct phy_device *phydev, u32 max_speed)h]h)}(h@void phy_set_max_speed(struct phy_device *phydev, u32 max_speed)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphy_set_max_speedh]j%)}(hphy_set_max_speedh]hphy_set_max_speed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h*(struct phy_device *phydev, u32 max_speed)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_set_max_speedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 max_speedh](h)}(hhh]j%)}(hu32h]hu32}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]jc.phy_set_max_speedasbuh1hhjHubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHubj%)}(h max_speedh]h max_speed}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h,Set the maximum speed the PHY should supporth]h,Set the maximum speed the PHY should support}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXB**Parameters** ``struct phy_device *phydev`` The phy_device struct ``u32 max_speed`` Maximum speed **Description** The PHY might be more capable than the MAC. For example a Fast Ethernet is connected to a 1G PHY. This function allows the MAC to indicate its maximum speed, and so limit what the PHY will advertise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``u32 max_speed`` Maximum speed h](j)}(h``u32 max_speed``h]j)}(hjh]h u32 max_speed}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubj)}(hhh]jX)}(h Maximum speedh]h Maximum speed}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubjX)}(hThe PHY might be more capable than the MAC. For example a Fast Ethernet is connected to a 1G PHY. This function allows the MAC to indicate its maximum speed, and so limit what the PHY will advertise.h]hThe PHY might be more capable than the MAC. For example a Fast Ethernet is connected to a 1G PHY. This function allows the MAC to indicate its maximum speed, and so limit what the PHY will advertise.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_resolve_aneg_pause (C function)c.phy_resolve_aneg_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7void phy_resolve_aneg_pause (struct phy_device *phydev)h]h)}(h6void phy_resolve_aneg_pause(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM9ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM9ubj)}(hphy_resolve_aneg_pauseh]j%)}(hphy_resolve_aneg_pauseh]hphy_resolve_aneg_pause}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM9ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_resolve_aneg_pauseasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM9ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM9ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM9hjhhubjS)}(hhh]jX)}(hDetermine pause autoneg resultsh]hDetermine pause autoneg results}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM9hj\hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM9ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct **Description** Once autoneg has completed the local pause settings can be resolved. Determine if pause and asymmetric pause should be used by the MAC.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM=hj{ubj)}(hhh]j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM;hjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM=hj{ubjX)}(hOnce autoneg has completed the local pause settings can be resolved. Determine if pause and asymmetric pause should be used by the MAC.h]hOnce autoneg has completed the local pause settings can be resolved. Determine if pause and asymmetric pause should be used by the MAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM<hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phy_resolve_aneg_linkmode (C function)c.phy_resolve_aneg_linkmodehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h:void phy_resolve_aneg_linkmode (struct phy_device *phydev)h]h)}(h9void phy_resolve_aneg_linkmode(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMOubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj.hMOubj)}(hphy_resolve_aneg_linkmodeh]j%)}(hphy_resolve_aneg_linkmodeh]hphy_resolve_aneg_linkmode}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj.hMOubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]j')}jjCsbc.phy_resolve_aneg_linkmodeasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj.hMOubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj.hMOubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.hMOhjhhubjS)}(hhh]jX)}(h,resolve the advertisements into PHY settingsh]h,resolve the advertisements into PHY settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj.hMOubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` The phy_device struct **Description** Resolve our and the link partner advertisements into their corresponding speed and duplex. If full duplex was negotiated, extract the pause mode from the link partner mask.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMShjubj)}(hhh]j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj!h]hstruct phy_device *phydev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMPhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMPhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMPhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMRhjubjX)}(hResolve our and the link partner advertisements into their corresponding speed and duplex. If full duplex was negotiated, extract the pause mode from the link partner mask.h]hResolve our and the link partner advertisements into their corresponding speed and duplex. If full duplex was negotiated, extract the pause mode from the link partner mask.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_read_mmd (C function)c.__phy_read_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint __phy_read_mmd (struct phy_device *phydev, int devad, u32 regnum)h]h)}(hDint __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h__phy_read_mmdh]j%)}(h__phy_read_mmdh]h__phy_read_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h2(struct phy_device *phydev, int devad, u32 regnum)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_read_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj%)}(hdevadh]hdevad}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_read_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hGConvenience function for reading a register from an MMD on a given PHY.h]hGConvenience function for reading a register from an MMD on a given PHY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct ``int devad`` The MMD to read from (0..31) ``u32 regnum`` The register on the MMD to read (0..65535) **Description** Same rules as for __phy_read();h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hMhjubj)}(h+``int devad`` The MMD to read from (0..31) h](j)}(h ``int devad``h]j)}(hjXh]h int devad}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjRubj)}(hhh]jX)}(hThe MMD to read from (0..31)h]hThe MMD to read from (0..31)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhMhjubj)}(h:``u32 regnum`` The register on the MMD to read (0..65535) h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h*The register on the MMD to read (0..65535)h]h*The register on the MMD to read (0..65535)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(hSame rules as for __phy_read();h]hSame rules as for __phy_read();}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_read_mmd (C function)c.phy_read_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hCint phy_read_mmd (struct phy_device *phydev, int devad, u32 regnum)h]h)}(hBint phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMubj)}(h phy_read_mmdh]j%)}(h phy_read_mmdh]h phy_read_mmd}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMubj)}(h2(struct phy_device *phydev, int devad, u32 regnum)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j')}jj4sbc.phy_read_mmdasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_read_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hGConvenience function for reading a register from an MMD on a given PHY.h]hGConvenience function for reading a register from an MMD on a given PHY.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjfjxjfjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct ``int devad`` The MMD to read from ``u32 regnum`` The register on the MMD to read **Description** Same rules as for phy_read();h](jX)}(h**Parameters**h]j)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjjubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h#``int devad`` The MMD to read from h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe MMD to read fromh]hThe MMD to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h/``u32 regnum`` The register on the MMD to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe register on the MMD to readh]hThe register on the MMD to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjjubjX)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjjubjX)}(hSame rules as for phy_read();h]hSame rules as for phy_read();}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_write_mmd (C function)c.__phy_write_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOint __phy_write_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hNint __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}hhhjhMubj)}(h__phy_write_mmdh]j%)}(h__phy_write_mmdh]h__phy_write_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj}hhhjhMubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_write_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj%)}(hdevadh]hdevad}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjjmodnameN classnameNjj!)}j$]jc.__phy_write_mmdasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_write_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj}hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjyhhhjhMubah}(h]jtah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjvhhubjS)}(hhh]jX)}(hEConvenience function for writing a register on an MMD on a given PHY.h]hEConvenience function for writing a register on an MMD on a given PHY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjvhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct ``int devad`` The MMD to read from ``u32 regnum`` The register on the MMD to read ``u16 val`` value to write to **regnum** **Description** Same rules as for __phy_write();h](jX)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj"ubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjGh]hstruct phy_device *phydev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjAubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubj)}(h#``int devad`` The MMD to read from h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjzubj)}(hhh]jX)}(hThe MMD to read fromh]hThe MMD to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubj)}(h/``u32 regnum`` The register on the MMD to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe register on the MMD to readh]hThe register on the MMD to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hj hhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj"ubjX)}(h Same rules as for __phy_write();h]h Same rules as for __phy_write();}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_write_mmd (C function)c.phy_write_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMint phy_write_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hLint phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhjhMubj)}(h phy_write_mmdh]j%)}(h phy_write_mmdh]h phy_write_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj|hhhjhMubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_write_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj%)}(hdevadh]hdevad}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]jc.phy_write_mmdasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_write_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjxhhhjhMubah}(h]jsah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjuhhubjS)}(hhh]jX)}(hEConvenience function for writing a register on an MMD on a given PHY.h]hEConvenience function for writing a register on an MMD on a given PHY.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct ``int devad`` The MMD to read from ``u32 regnum`` The register on the MMD to read ``u16 val`` value to write to **regnum** **Description** Same rules as for phy_write();h](jX)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj!ubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjFh]hstruct phy_device *phydev}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj@ubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(h#``int devad`` The MMD to read from h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjyubj)}(hhh]jX)}(hThe MMD to read fromh]hThe MMD to read from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h/``u32 regnum`` The register on the MMD to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hThe register on the MMD to readh]hThe register on the MMD to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hj hhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hj:h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj!ubjX)}(hSame rules as for phy_write();h]hSame rules as for phy_write();}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_modify_changed (C function)c.phy_modify_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hQint phy_modify_changed (struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h]h)}(hPint phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM$ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{hhhjhM$ubj)}(hphy_modify_changedh]j%)}(hphy_modify_changedh]hphy_modify_changed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj{hhhjhM$ubj)}(h:(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]jc.phy_modify_changedasbuh1hhj*ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj%)}(hregnumh]hregnum}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]jc.phy_modify_changedasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhjhM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjwhhhjhM$ubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM$hjthhubjS)}(hhh]jX)}(h%Function for modifying a PHY registerh]h%Function for modifying a PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jRhjthhhjhM$ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation. Returns negative errno, 0 if there was no change, and 1 in case of changeh](jX)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM(hj3ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjXh]hstruct phy_device *phydev}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM%hjRubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhM%hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhM%hjOubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM&hjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjOubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM'hjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjOubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM(hjubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjOubeh}(h]h ]h"]h$]h&]uh1jhj3ubjX)}(h**NOTE**h]j)}(hjLh]hNOTE}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM*hj3ubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM*hj3ubjX)}(hIReturns negative errno, 0 if there was no change, and 1 in case of changeh]hIReturns negative errno, 0 if there was no change, and 1 in case of change}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM.hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_modify (C function)c.__phy_modifyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKint __phy_modify (struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h]h)}(hJint __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM=ubj)}(h __phy_modifyh]j%)}(h __phy_modifyh]h __phy_modify}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM=ubj)}(h:(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]jc.__phy_modifyasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj%)}(hregnumh]hregnum}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM=ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM=ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM=hjhhubjS)}(hhh]jX)}(h1Convenience function for modifying a PHY registerh]h1Convenience function for modifying a PHY register}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM=hj5hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM=ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjPjxjPjyjzj{uh1hhhhjnhNhNubj})}(hXo**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMAhjTubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjyh]hstruct phy_device *phydev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM>hjsubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhM>hjpubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM?hjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM?hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM?hjpubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM@hjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjpubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hj$h]hu16 set}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMAhjubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hj=hhhNhNubj)}(h **regnum**h]hregnum}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jWhj9hMAhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMAhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubjX)}(h**NOTE**h]j)}(hjmh]hNOTE}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMChjTubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMChjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_modify (C function) c.phy_modifyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hIint phy_modify (struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h]h)}(hHint phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMRubj)}(h phy_modifyh]j%)}(h phy_modifyh]h phy_modify}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMRubj)}(h:(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.phy_modifyasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j) c.phy_modifyasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j) c.phy_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j) c.phy_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMRubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMRhjhhubjS)}(hhh]jX)}(h7Convenience function for modifying a given PHY registerh]h7Convenience function for modifying a given PHY register}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMRhjGhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjnhNhNubj})}(hXn**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMVhjfubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMShjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMThjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMUhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMUhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMUhjubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hj6h]hu16 set}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMVhj0ubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hjOhhhNhNubj)}(h **regnum**h]hregnum}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jWhjKhMVhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjfubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMXhjfubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMXhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%__phy_modify_mmd_changed (C function)c.__phy_modify_mmd_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hbint __phy_modify_mmd_changed (struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h]h)}(haint __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMiubj)}(h__phy_modify_mmd_changedh]j%)}(h__phy_modify_mmd_changedh]h__phy_modify_mmd_changed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMiubj)}(hE(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j')}jjsbc.__phy_modify_mmd_changedasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j;c.__phy_modify_mmd_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j;c.__phy_modify_mmd_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j;c.__phy_modify_mmd_changedasbuh1hhj4ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj%)}(hseth]hset}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMiubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMiubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMihjhhubjS)}(hhh]jX)}(h(Function for modifying a register on MMDh]h(Function for modifying a register on MMD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMihjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMiubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **Description** Unlocked helper function which allows a MMD register to be modified as new register value = (old register value & ~mask) | set Returns negative errno, 0 if there was no change, and 1 in case of changeh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMmhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMjhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hj h]h int devad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMkhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMkhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMkhjubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjDh]h u32 regnum}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMlhj>ubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMlhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMlhjubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj}h]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMmhjwubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMnhjubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMphjubjX)}(h~Unlocked helper function which allows a MMD register to be modified as new register value = (old register value & ~mask) | seth]h~Unlocked helper function which allows a MMD register to be modified as new register value = (old register value & ~mask) | set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMohjubjX)}(hIReturns negative errno, 0 if there was no change, and 1 in case of changeh]hIReturns negative errno, 0 if there was no change, and 1 in case of change}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMrhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_modify_mmd_changed (C function)c.phy_modify_mmd_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h`int phy_modify_mmd_changed (struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h]h)}(h_int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjahMubj)}(hphy_modify_mmd_changedh]j%)}(hphy_modify_mmd_changedh]hphy_modify_mmd_changed}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjahMubj)}(hE(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjvsbc.phy_modify_mmd_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]jc.phy_modify_mmd_changedasbuh1hhj3ubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj%)}(hregnumh]hregnum}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_modify_mmd_changedasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_modify_mmd_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjahMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjKhhhjahMubah}(h]jFah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahMhjHhhubjS)}(hhh]jX)}(h(Function for modifying a register on MMDh]h(Function for modifying a register on MMD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjahMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation. Returns negative errno, 0 if there was no change, and 1 in case of changeh](jX)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj<ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjah]hstruct phy_device *phydev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj[ubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjXubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjXubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj h]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjXubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hjEh]hu16 set}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj?ubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hj^hhhNhNubj)}(h **regnum**h]hregnum}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jWhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj<ubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj<ubjX)}(hIReturns negative errno, 0 if there was no change, and 1 in case of changeh]hIReturns negative errno, 0 if there was no change, and 1 in case of change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_modify_mmd (C function)c.__phy_modify_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hZint __phy_modify_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h]h)}(hYint __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h__phy_modify_mmdh]j%)}(h__phy_modify_mmdh]h__phy_modify_mmd}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hE(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj, hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj= hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj: ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj? modnameN classnameNjj!)}j$]j')}jj sbc.__phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjk hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hphydevh]hphydev}(hjx hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int devadh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hdevadh]hdevad}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jY c.__phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hregnumh]hregnum}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jY c.__phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hmaskh]hmask}(hj= hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjY hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjV ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[ modnameN classnameNjj!)}j$]jY c.__phy_modify_mmdasbuh1hhjR ubj)}(h h]h }(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR ubj%)}(hseth]hset}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjR ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h4Convenience function for modifying a register on MMDh]h4Convenience function for modifying a register on MMD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj h]hstruct phy_device *phydev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hj) h]h int devad}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj' ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj# ubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj> hMhj? ubah}(h]h ]h"]h$]h&]uh1jhj# ubeh}(h]h ]h"]h$]h&]uh1jhj> hMhj ubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjb h]h u32 regnum}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj\ ubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjw hMhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1jhjw hMhj ubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj h]hu16 mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hj h]hu16 set}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hj hhhNhNubj)}(h **regnum**h]hregnum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**NOTE**h]j)}(hj h]hNOTE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_modify_mmd (C function)c.phy_modify_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hXint phy_modify_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h]h)}(hWint phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ hhhjp hMubj)}(hphy_modify_mmdh]j%)}(hphy_modify_mmdh]hphy_modify_mmd}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^ hhhjp hMubj)}(hE(struct phy_device *phydev, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sbc.phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h int devadh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hdevadh]hdevad}(hj- hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjI hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjK modnameN classnameNjj!)}j$]j c.phy_modify_mmdasbuh1hhjB ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB ubj%)}(hregnumh]hregnum}(hju hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjB ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hmaskh]hmask}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.phy_modify_mmdasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^ hhhjp hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZ hhhjp hMubah}(h]jU ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjp hMhjW hhubjS)}(hhh]jX)}(h4Convenience function for modifying a register on MMDh]h4Convenience function for modifying a register on MMD}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jRhjW hhhjp hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjGjxjGjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` new value of bits set in mask to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjKubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjph]hstruct phy_device *phydev}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjgubj)}(hA``u16 set`` new value of bits set in mask to write to **regnum** h](j)}(h ``u16 set``h]j)}(hjTh]hu16 set}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjNubj)}(hhh]jX)}(h4new value of bits set in mask to write to **regnum**h](h*new value of bits set in mask to write to }(hjmhhhNhNubj)}(h **regnum**h]hregnum}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jWhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjKubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_save_page (C function)c.phy_save_pagehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h-int phy_save_page (struct phy_device *phydev)h]h)}(h,int phy_save_page(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h phy_save_pageh]j%)}(h phy_save_pageh]h phy_save_page}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j')}jjsbc.phy_save_pageasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h+take the bus lock and save the current pageh]h+take the bus lock and save the current page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX?**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` **Description** Take the MDIO bus lock, and return the current page number. On error, returns a negative errno. phy_restore_page() must always be called after this, irrespective of success or failure of this call.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(hTake the MDIO bus lock, and return the current page number. On error, returns a negative errno. phy_restore_page() must always be called after this, irrespective of success or failure of this call.h]hTake the MDIO bus lock, and return the current page number. On error, returns a negative errno. phy_restore_page() must always be called after this, irrespective of success or failure of this call.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_select_page (C function)c.phy_select_pagehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9int phy_select_page (struct phy_device *phydev, int page)h]h)}(h8int phy_select_page(struct phy_device *phydev, int page)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~hhhjhMubj)}(hphy_select_pageh]j%)}(hphy_select_pageh]hphy_select_page}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj~hhhjhMubj)}(h%(struct phy_device *phydev, int page)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_select_pageasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint pageh](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj%)}(hpageh]hpage}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjzhhhjhMubah}(h]juah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjwhhubjS)}(hhh]jX)}(h8take the bus lock, save the current page, and set a pageh]h8take the bus lock, save the current page, and set a page}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjthhubah}(h]h ]h"]h$]h&]uh1jRhjwhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``int page`` desired page **Description** Take the MDIO bus lock to protect against concurrent access, save the current PHY page, and set the current page. On error, returns a negative errno, otherwise returns the previous page number. phy_restore_page() must always be called after this, irrespective of success or failure of this call.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int page`` desired page h](j)}(h ``int page``h]j)}(hjh]hint page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhj ubj)}(hhh]jX)}(h desired pageh]h desired page}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(hX(Take the MDIO bus lock to protect against concurrent access, save the current PHY page, and set the current page. On error, returns a negative errno, otherwise returns the previous page number. phy_restore_page() must always be called after this, irrespective of success or failure of this call.h]hX(Take the MDIO bus lock to protect against concurrent access, save the current PHY page, and set the current page. On error, returns a negative errno, otherwise returns the previous page number. phy_restore_page() must always be called after this, irrespective of success or failure of this call.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_restore_page (C function)c.phy_restore_pagehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hFint phy_restore_page (struct phy_device *phydev, int oldpage, int ret)h]h)}(hEint phy_restore_page(struct phy_device *phydev, int oldpage, int ret)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_restore_pageh]j%)}(hphy_restore_pageh]hphy_restore_page}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h1(struct phy_device *phydev, int oldpage, int ret)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_restore_pageasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int oldpageh](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj%)}(holdpageh]holdpage}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint reth](j)}(hinth]hint}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj%)}(hreth]hret}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h2restore the page register and release the bus lockh]h2restore the page register and release the bus lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXL**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``int oldpage`` the old page, return value from phy_save_page() or phy_select_page() ``int ret`` operation's return code **Description** Release the MDIO bus lock, restoring **oldpage** if it is a valid page. This function propagates the earliest error code from the group of operations. **Return** **oldpage** if it was a negative value, otherwise **ret** if it was a negative errno value, otherwise phy_write_page()'s negative value if it were in error, otherwise **ret**.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hj hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hU``int oldpage`` the old page, return value from phy_save_page() or phy_select_page() h](j)}(h``int oldpage``h]j)}(hjSh]h int oldpage}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjMubj)}(hhh]jX)}(hDthe old page, return value from phy_save_page() or phy_select_page()h]hDthe old page, return value from phy_save_page() or phy_select_page()}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h$``int ret`` operation's return code h](j)}(h ``int ret``h]j)}(hjh]hint ret}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubj)}(hhh]jX)}(hoperation's return codeh]hoperation’s return code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(hRelease the MDIO bus lock, restoring **oldpage** if it is a valid page. This function propagates the earliest error code from the group of operations.h](h%Release the MDIO bus lock, restoring }(hjhhhNhNubj)}(h **oldpage**h]holdpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhf if it is a valid page. This function propagates the earliest error code from the group of operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubjX)}(h**oldpage** if it was a negative value, otherwise **ret** if it was a negative errno value, otherwise phy_write_page()'s negative value if it were in error, otherwise **ret**.h](j)}(h **oldpage**h]holdpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' if it was a negative value, otherwise }(hjhhhNhNubj)}(h**ret**h]hret}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhp if it was a negative errno value, otherwise phy_write_page()’s negative value if it were in error, otherwise }(hjhhhNhNubj)}(h**ret**h]hret}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_read_paged (C function)c.phy_read_pagedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDint phy_read_paged (struct phy_device *phydev, int page, u32 regnum)h]h)}(hCint phy_read_paged(struct phy_device *phydev, int page, u32 regnum)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjshhhjhM7ubj)}(hphy_read_pagedh]j%)}(hphy_read_pagedh]hphy_read_paged}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjshhhjhM7ubj)}(h1(struct phy_device *phydev, int page, u32 regnum)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_read_pagedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint pageh](j)}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj%)}(hpageh]hpage}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]jc.phy_read_pagedasbuh1hhjWubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjshhhjhM7ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjohhhjhM7ubah}(h]jjah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM7hjlhhubjS)}(hhh]jX)}(h1Convenience function for reading a paged registerh]h1Convenience function for reading a paged register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM7hjhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjhM7ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``int page`` the page for the phy ``u32 regnum`` register number **Description** Same rules as for phy_read().h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM;hjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM8hjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhj hM8hjubeh}(h]h ]h"]h$]h&]uh1jWhj hM8hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM8hjubj)}(h"``int page`` the page for the phy h](j)}(h ``int page``h]j)}(hjMh]hint page}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM9hjGubj)}(hhh]jX)}(hthe page for the phyh]hthe page for the phy}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhM9hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhM9hjubj)}(h``u32 regnum`` register number h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM:hjubj)}(hhh]jX)}(hregister numberh]hregister number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM:hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM<hjubjX)}(hSame rules as for phy_read().h]hSame rules as for phy_read().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM;hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_write_paged (C function)c.phy_write_pagedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hNint phy_write_paged (struct phy_device *phydev, int page, u32 regnum, u16 val)h]h)}(hMint phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMKubj)}(hphy_write_pagedh]j%)}(hphy_write_pagedh]hphy_write_paged}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMKubj)}(h:(struct phy_device *phydev, int page, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj?ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j')}jj)sbc.phy_write_pagedasbuh1hhj?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubj)}(hint pageh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j}c.phy_write_pagedasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j}c.phy_write_pagedasbuh1hhj.ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj%)}(hvalh]hval}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMKhjhhubjS)}(hhh]jX)}(h1Convenience function for writing a paged registerh]h1Convenience function for writing a paged register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``int page`` the page for the phy ``u32 regnum`` register number ``u16 val`` value to write **Description** Same rules as for phy_write().h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMOhjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMLhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMLhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(h"``int page`` the page for the phy h](j)}(h ``int page``h]j)}(hj$h]hint page}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMMhjubj)}(hhh]jX)}(hthe page for the phyh]hthe page for the phy}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMMhjubj)}(h``u32 regnum`` register number h](j)}(h``u32 regnum``h]j)}(hj]h]h u32 regnum}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMNhjWubj)}(hhh]jX)}(hregister numberh]hregister number}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMNhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMNhjubj)}(h``u16 val`` value to write h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMOhjubj)}(hhh]jX)}(hvalue to writeh]hvalue to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMQhjubjX)}(hSame rules as for phy_write().h]hSame rules as for phy_write().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMPhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_modify_paged_changed (C function)c.phy_modify_paged_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(haint phy_modify_paged_changed (struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h]h)}(h`int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM`ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj$hM`ubj)}(hphy_modify_paged_changedh]j%)}(hphy_modify_paged_changedh]hphy_modify_paged_changed}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj$hM`ubj)}(hD(struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsmodnameN classnameNjj!)}j$]j')}jj9sbc.phy_modify_paged_changedasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hint pageh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hpageh]hpage}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_modify_paged_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]jc.phy_modify_paged_changedasbuh1hhj>ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj%)}(hmaskh]hmask}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_modify_paged_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj$hM`ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj$hM`ubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hM`hj hhubjS)}(hhh]jX)}(h'Function for modifying a paged registerh]h'Function for modifying a paged register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM`hjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj$hM`ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX[**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``int page`` the page for the phy ``u32 regnum`` register number ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Description** Returns negative errno, 0 if there was no change, and 1 in case of changeh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMdhjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hj$h]hstruct phy_device *phydev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMahjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hj=hhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjGh]hstruct phy_device}(hjIhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhj9hMahj=ubeh}(h]h ]h"]h$]h&]uh1jWhj9hMahj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMahjubj)}(h"``int page`` the page for the phy h](j)}(h ``int page``h]j)}(hj|h]hint page}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMbhjvubj)}(hhh]jX)}(hthe page for the phyh]hthe page for the phy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubj)}(h``u32 regnum`` register number h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMchjubj)}(hhh]jX)}(hregister numberh]hregister number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMchjubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMdhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hj'h]hu16 set}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMehj!ubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hMehj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMehjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMghjubjX)}(hIReturns negative errno, 0 if there was no change, and 1 in case of changeh]hIReturns negative errno, 0 if there was no change, and 1 in case of change}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_modify_paged (C function)c.phy_modify_pagedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hYint phy_modify_paged (struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h]h)}(hXint phy_modify_paged(struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMwubj)}(hphy_modify_pagedh]j%)}(hphy_modify_pagedh]hphy_modify_paged}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMwubj)}(hD(struct phy_device *phydev, int page, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.phy_modify_pagedasbuh1hhjubj)}(h h]h }(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj0 hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj= hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint pageh](j)}(hinth]hint}(hjV hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR ubj)}(h h]h }(hjd hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjR ubj%)}(hpageh]hpage}(hjr hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjR ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.phy_modify_pagedasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hregnumh]hregnum}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j c.phy_modify_pagedasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hmaskh]hmask}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj !modnameN classnameNjj!)}j$]j c.phy_modify_pagedasbuh1hhj!ubj)}(h h]h }(hj` ``int page`` the page for the phy ``u32 regnum`` register number ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Description** Same rules as for phy_read() and phy_write().h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM{hj!ubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hj!h]hstruct phy_device *phydev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMxhj!ubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hj!hhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hj!h]hstruct phy_device}(hj!hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhj!hMxhj!ubeh}(h]h ]h"]h$]h&]uh1jWhj!hMxhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMxhj!ubj)}(h"``int page`` the page for the phy h](j)}(h ``int page``h]j)}(hj "h]hint page}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj "ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMyhj"ubj)}(hhh]jX)}(hthe page for the phyh]hthe page for the phy}(hj&"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj""hMyhj#"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj""hMyhj!ubj)}(h``u32 regnum`` register number h](j)}(h``u32 regnum``h]j)}(hjF"h]h u32 regnum}(hjH"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chMzhj@"ubj)}(hhh]jX)}(hregister numberh]hregister number}(hj_"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj["hMzhj\"ubah}(h]h ]h"]h$]h&]uh1jhj@"ubeh}(h]h ]h"]h$]h&]uh1jhj["hMzhj!ubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj"h]hu16 mask}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM{hjy"ubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM{hj"ubah}(h]h ]h"]h$]h&]uh1jhjy"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM{hj!ubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hj"h]hu16 set}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM|hj"ubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj"hM|hj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hM|hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM~hj!ubjX)}(h-Same rules as for phy_read() and phy_write().h]h-Same rules as for phy_read() and phy_write().}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:119: ./drivers/net/phy/phy-core.chM}hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"genphy_c45_pma_resume (C function)c.genphy_c45_pma_resumehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h5int genphy_c45_pma_resume (struct phy_device *phydev)h]h)}(h4int genphy_c45_pma_resume(struct phy_device *phydev)h](j)}(hinth]hint}(hj8#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4#hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK2ubj)}(h h]h }(hjG#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4#hhhjF#hK2ubj)}(hgenphy_c45_pma_resumeh]j%)}(hgenphy_c45_pma_resumeh]hgenphy_c45_pma_resume}(hjY#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjU#ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj4#hhhjF#hK2ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hju#hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjq#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq#ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj#modnameN classnameNjj!)}j$]j')}jj[#sbc.genphy_c45_pma_resumeasbuh1hhjq#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq#ubj;)}(hj>h]h*}(hj#hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjq#ubj%)}(hphydevh]hphydev}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjm#ubah}(h]h ]h"]h$]h&]j<j=uh1jhj4#hhhjF#hK2ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0#hhhjF#hK2ubah}(h]j+#ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjF#hK2hj-#hhubjS)}(hhh]jX)}(hwakes up the PMA moduleh]hwakes up the PMA module}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK2hj#hhubah}(h]h ]h"]h$]h&]uh1jRhj-#hhhjF#hK2ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$jxj$jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK6hj$ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj9$h]hstruct phy_device *phydev}(hj;$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK8hj3$ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjR$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK3hjO$ubah}(h]h ]h"]h$]h&]uh1jhj3$ubeh}(h]h ]h"]h$]h&]uh1jhjN$hK8hj0$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#genphy_c45_pma_suspend (C function)c.genphy_c45_pma_suspendhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int genphy_c45_pma_suspend (struct phy_device *phydev)h]h)}(h5int genphy_c45_pma_suspend(struct phy_device *phydev)h](j)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK@ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$hhhj$hK@ubj)}(hgenphy_c45_pma_suspendh]j%)}(hgenphy_c45_pma_suspendh]hgenphy_c45_pma_suspend}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj$hhhj$hK@ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j')}jj$sbc.genphy_c45_pma_suspendasbuh1hhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hphydevh]hphydev}(hj)%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubah}(h]h ]h"]h$]h&]j<j=uh1jhj$hhhj$hK@ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj$hhhj$hK@ubah}(h]j$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hK@hj$hhubjS)}(hhh]jX)}(hsuspends the PMA moduleh]hsuspends the PMA module}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chK@hjP%hhubah}(h]h ]h"]h$]h&]uh1jRhj$hhhj$hK@ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjk%jxjk%jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hju%h]h Parameters}(hjw%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs%ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKDhjo%ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj%h]hstruct phy_device *phydev}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKFhj%ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKAhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKFhj%ubah}(h]h ]h"]h$]h&]uh1jhjo%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h5genphy_c45_pma_baset1_setup_master_slave (C function)*c.genphy_c45_pma_baset1_setup_master_slavehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hHint genphy_c45_pma_baset1_setup_master_slave (struct phy_device *phydev)h]h)}(hGint genphy_c45_pma_baset1_setup_master_slave(struct phy_device *phydev)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKNubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj%hKNubj)}(h(genphy_c45_pma_baset1_setup_master_slaveh]j%)}(h(genphy_c45_pma_baset1_setup_master_slaveh]h(genphy_c45_pma_baset1_setup_master_slave}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj &ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj%hhhj%hKNubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj+&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'&ubj)}(h h]h }(hj8&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'&ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjI&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjK&modnameN classnameNjj!)}j$]j')}jj&sb*c.genphy_c45_pma_baset1_setup_master_slaveasbuh1hhj'&ubj)}(h h]h }(hji&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'&ubj;)}(hj>h]h*}(hjw&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'&ubj%)}(hphydevh]hphydev}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj#&ubah}(h]h ]h"]h$]h&]j<j=uh1jhj%hhhj%hKNubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%hhhj%hKNubah}(h]j%ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj%hKNhj%hhubjS)}(hhh]jX)}(h6configures forced master/slave role of BaseT1 devices.h]h6configures forced master/slave role of BaseT1 devices.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKNhj&hhubah}(h]h ]h"]h$]h&]uh1jRhj%hhhj%hKNubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKRhj&ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj&h]hstruct phy_device *phydev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKThj&ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKPhj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hKThj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(genphy_c45_pma_setup_forced (C function)c.genphy_c45_pma_setup_forcedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h;int genphy_c45_pma_setup_forced (struct phy_device *phydev)h]h)}(h:int genphy_c45_pma_setup_forced(struct phy_device *phydev)h](j)}(hinth]hint}(hjI'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKlubj)}(h h]h }(hjX'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjE'hhhjW'hKlubj)}(hgenphy_c45_pma_setup_forcedh]j%)}(hgenphy_c45_pma_setup_forcedh]hgenphy_c45_pma_setup_forced}(hjj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjf'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjE'hhhjW'hKlubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]j')}jjl'sbc.genphy_c45_pma_setup_forcedasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hj'hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hphydevh]hphydev}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj~'ubah}(h]h ]h"]h$]h&]j<j=uh1jhjE'hhhjW'hKlubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjA'hhhjW'hKlubah}(h]j<'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjW'hKlhj>'hhubjS)}(hhh]jX)}(hconfigures a forced speedh]hconfigures a forced speed}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKlhj(hhubah}(h]h ]h"]h$]h&]uh1jRhj>'hhhjW'hKlubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!(jxj!(jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj+(h]h Parameters}(hj-(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)(ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKphj%(ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjJ(h]hstruct phy_device *phydev}(hjL(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKrhjD(ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjc(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chKmhj`(ubah}(h]h ]h"]h$]h&]uh1jhjD(ubeh}(h]h ]h"]h$]h&]uh1jhj_(hKrhjA(ubah}(h]h ]h"]h$]h&]uh1jhj%(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&genphy_c45_an_config_aneg (C function)c.genphy_c45_an_config_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9int genphy_c45_an_config_aneg (struct phy_device *phydev)h]h)}(h8int genphy_c45_an_config_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhj(hMubj)}(hgenphy_c45_an_config_anegh]j%)}(hgenphy_c45_an_config_anegh]hgenphy_c45_an_config_aneg}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj(hhhj(hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj)modnameN classnameNjj!)}j$]j')}jj(sbc.genphy_c45_an_config_anegasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj;)}(hj>h]h*}(hj-)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj(ubj%)}(hphydevh]hphydev}(hj:)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj(ubah}(h]h ]h"]h$]h&]j<j=uh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj(hhhj(hMubah}(h]j(ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj(hMhj(hhubjS)}(hhh]jX)}(h!configure advertisement registersh]h!configure advertisement registers}(hjd)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhja)hhubah}(h]h ]h"]h$]h&]uh1jRhj(hhhj(hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|)jxj|)jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Configure advertisement registers based on modes set in phydev->advertising Returns negative errno code on failure, 0 if advertisement didn't change, or 1 if advertised modes changed.h](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM hj)ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj)h]hstruct phy_device *phydev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj)ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj)ubjX)}(hKConfigure advertisement registers based on modes set in phydev->advertisingh]hKConfigure advertisement registers based on modes set in phydev->advertising}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj)ubjX)}(hkReturns negative errno code on failure, 0 if advertisement didn't change, or 1 if advertised modes changed.h]hmReturns negative errno code on failure, 0 if advertisement didn’t change, or 1 if advertised modes changed.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'genphy_c45_an_disable_aneg (C function)c.genphy_c45_an_disable_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h:int genphy_c45_an_disable_aneg (struct phy_device *phydev)h]h)}(h9int genphy_c45_an_disable_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hj4*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0*hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM9ubj)}(h h]h }(hjC*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0*hhhjB*hM9ubj)}(hgenphy_c45_an_disable_anegh]j%)}(hgenphy_c45_an_disable_anegh]hgenphy_c45_an_disable_aneg}(hjU*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQ*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0*hhhjB*hM9ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjq*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjm*ubj)}(h h]h }(hj~*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjm*ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*modnameN classnameNjj!)}j$]j')}jjW*sbc.genphy_c45_an_disable_anegasbuh1hhjm*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjm*ubj;)}(hj>h]h*}(hj*hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjm*ubj%)}(hphydevh]hphydev}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjm*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhji*ubah}(h]h ]h"]h$]h&]j<j=uh1jhj0*hhhjB*hM9ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj,*hhhjB*hM9ubah}(h]j'*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjB*hM9hj)*hhubjS)}(hhh]jX)}(hdisable auto-negotiationh]hdisable auto-negotiation}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM9hj*hhubah}(h]h ]h"]h$]h&]uh1jRhj)*hhhjB*hM9ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj +jxj +jyjzj{uh1hhhhjnhNhNubj})}(hX **Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Disable auto-negotiation in the Clause 45 PHY. The link parameters are controlled through the PMA/PMD MMD registers. Returns zero on success, negative errno code on failure.h](jX)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM=hj+ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj5+h]hstruct phy_device *phydev}(hj7+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM:hj/+ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjN+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJ+hM:hjK+ubah}(h]h ]h"]h$]h&]uh1jhj/+ubeh}(h]h ]h"]h$]h&]uh1jhjJ+hM:hj,+ubah}(h]h ]h"]h$]h&]uh1jhj+ubjX)}(h**Description**h]j)}(hjp+h]h Description}(hjr+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn+ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM<hj+ubjX)}(htDisable auto-negotiation in the Clause 45 PHY. The link parameters are controlled through the PMA/PMD MMD registers.h]htDisable auto-negotiation in the Clause 45 PHY. The link parameters are controlled through the PMA/PMD MMD registers.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM;hj+ubjX)}(h8Returns zero on success, negative errno code on failure.h]h8Returns zero on success, negative errno code on failure.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM>hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$genphy_c45_restart_aneg (C function)c.genphy_c45_restart_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7int genphy_c45_restart_aneg (struct phy_device *phydev)h]h)}(h6int genphy_c45_restart_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMNubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+hhhj+hMNubj)}(hgenphy_c45_restart_anegh]j%)}(hgenphy_c45_restart_anegh]hgenphy_c45_restart_aneg}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj+hhhj+hMNubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!,modnameN classnameNjj!)}j$]j')}jj+sbc.genphy_c45_restart_anegasbuh1hhj+ubj)}(h h]h }(hj?,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj;)}(hj>h]h*}(hjM,hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubj%)}(hphydevh]hphydev}(hjZ,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+ubah}(h]h ]h"]h$]h&]j<j=uh1jhj+hhhj+hMNubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+hhhj+hMNubah}(h]j+ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj+hMNhj+hhubjS)}(hhh]jX)}(h#Enable and restart auto-negotiationh]h#Enable and restart auto-negotiation}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMNhj,hhubah}(h]h ]h"]h$]h&]uh1jRhj+hhhj+hMNubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj,jxj,jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** This assumes that the auto-negotiation MMD is present. Enable and restart auto-negotiation.h](jX)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMRhj,ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj,h]hstruct phy_device *phydev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMOhj,ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMOhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hMOhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubjX)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMQhj,ubjX)}(h6This assumes that the auto-negotiation MMD is present.h]h6This assumes that the auto-negotiation MMD is present.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMPhj,ubjX)}(h$Enable and restart auto-negotiation.h]h$Enable and restart auto-negotiation.}(hj%-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMRhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.genphy_c45_check_and_restart_aneg (C function)#c.genphy_c45_check_and_restart_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOint genphy_c45_check_and_restart_aneg (struct phy_device *phydev, bool restart)h]h)}(hNint genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart)h](j)}(hinth]hint}(hjT-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP-hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMbubj)}(h h]h }(hjc-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjP-hhhjb-hMbubj)}(h!genphy_c45_check_and_restart_anegh]j%)}(h!genphy_c45_check_and_restart_anegh]h!genphy_c45_check_and_restart_aneg}(hju-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjq-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjP-hhhjb-hMbubj)}(h)(struct phy_device *phydev, bool restart)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jjw-sb#c.genphy_c45_check_and_restart_anegasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hphydevh]hphydev}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubj)}(h bool restarth](j)}(hjTh]hbool}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj%)}(hrestarth]hrestart}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjP-hhhjb-hMbubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjL-hhhjb-hMbubah}(h]jG-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjb-hMbhjI-hhubjS)}(hhh]jX)}(h#Enable and restart auto-negotiationh]h#Enable and restart auto-negotiation}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMbhjE.hhubah}(h]h ]h"]h$]h&]uh1jRhjI-hhhjb-hMbubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`.jxj`.jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool restart`` whether aneg restart is requested **Description** This assumes that the auto-negotiation MMD is present. Check, and restart auto-negotiation if needed.h](jX)}(h**Parameters**h]j)}(hjj.h]h Parameters}(hjl.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMfhjd.ubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj.h]hstruct phy_device *phydev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMchj.ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMchj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMchj.ubj)}(h3``bool restart`` whether aneg restart is requested h](j)}(h``bool restart``h]j)}(hj.h]h bool restart}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMdhj.ubj)}(hhh]jX)}(h!whether aneg restart is requestedh]h!whether aneg restart is requested}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMdhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMdhj.ubeh}(h]h ]h"]h$]h&]uh1jhjd.ubjX)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMfhjd.ubjX)}(h6This assumes that the auto-negotiation MMD is present.h]h6This assumes that the auto-negotiation MMD is present.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMehjd.ubjX)}(h.Check, and restart auto-negotiation if needed.h]h.Check, and restart auto-negotiation if needed.}(hj"/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMghjd.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!genphy_c45_aneg_done (C function)c.genphy_c45_aneg_donehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4int genphy_c45_aneg_done (struct phy_device *phydev)h]h)}(h3int genphy_c45_aneg_done(struct phy_device *phydev)h](j)}(hinth]hint}(hjQ/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM/hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj`/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjM/hhhj_/hMubj)}(hgenphy_c45_aneg_doneh]j%)}(hgenphy_c45_aneg_doneh]hgenphy_c45_aneg_done}(hjr/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjn/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjM/hhhj_/hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jjt/sbc.genphy_c45_aneg_doneasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/ubj%)}(hphydevh]hphydev}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/ubah}(h]h ]h"]h$]h&]j<j=uh1jhjM/hhhj_/hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjI/hhhj_/hMubah}(h]jD/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj_/hMhjF/hhubjS)}(hhh]jX)}(h'return auto-negotiation complete statush]h'return auto-negotiation complete status}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jRhjF/hhhj_/hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)0jxj)0jyjzj{uh1hhhhjnhNhNubj})}(hX1**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** This assumes that the auto-negotiation MMD is present. Reads the status register from the auto-negotiation MMD, returning: - positive if auto-negotiation is complete - negative errno code on error - zero otherwiseh](jX)}(h**Parameters**h]j)}(hj30h]h Parameters}(hj50hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj10ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-0ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjR0h]hstruct phy_device *phydev}(hjT0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjL0ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjk0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjg0hMhjh0ubah}(h]h ]h"]h$]h&]uh1jhjL0ubeh}(h]h ]h"]h$]h&]uh1jhjg0hMhjI0ubah}(h]h ]h"]h$]h&]uh1jhj-0ubjX)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-0ubjX)}(h6This assumes that the auto-negotiation MMD is present.h]h6This assumes that the auto-negotiation MMD is present.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-0ubjX)}(hReads the status register from the auto-negotiation MMD, returning: - positive if auto-negotiation is complete - negative errno code on error - zero otherwiseh]hReads the status register from the auto-negotiation MMD, returning: - positive if auto-negotiation is complete - negative errno code on error - zero otherwise}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!genphy_c45_read_link (C function)c.genphy_c45_read_linkhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4int genphy_c45_read_link (struct phy_device *phydev)h]h)}(h3int genphy_c45_read_link(struct phy_device *phydev)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMubj)}(hgenphy_c45_read_linkh]j%)}(hgenphy_c45_read_linkh]hgenphy_c45_read_link}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj1ubj)}(h h]h }(hj+1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj<1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj91ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>1modnameN classnameNjj!)}j$]j')}jj1sbc.genphy_c45_read_linkasbuh1hhj1ubj)}(h h]h }(hj\1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj;)}(hj>h]h*}(hjj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj1ubj%)}(hphydevh]hphydev}(hjw1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj1ubah}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hMubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMhj0hhubjS)}(hhh]jX)}(h*read the overall link status from the MMDsh]h*read the overall link status from the MMDs}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the link status from the specified MMDs, and if they all indicate that the link is up, set phydev->link to 1. If an error is encountered, a negative errno will be returned, otherwise zero.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj1ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj1h]hstruct phy_device *phydev}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj1ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubjX)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj1ubjX)}(hRead the link status from the specified MMDs, and if they all indicate that the link is up, set phydev->link to 1. If an error is encountered, a negative errno will be returned, otherwise zero.h]hRead the link status from the specified MMDs, and if they all indicate that the link is up, set phydev->link to 1. If an error is encountered, a negative errno will be returned, otherwise zero.}(hj32hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h genphy_c45_read_lpa (C function)c.genphy_c45_read_lpahNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3int genphy_c45_read_lpa (struct phy_device *phydev)h]h)}(h2int genphy_c45_read_lpa(struct phy_device *phydev)h](j)}(hinth]hint}(hjb2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^2hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjq2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^2hhhjp2hMubj)}(hgenphy_c45_read_lpah]j%)}(hgenphy_c45_read_lpah]hgenphy_c45_read_lpa}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^2hhhjp2hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j')}jj2sbc.genphy_c45_read_lpaasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hphydevh]hphydev}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubah}(h]h ]h"]h$]h&]j<j=uh1jhj^2hhhjp2hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZ2hhhjp2hMubah}(h]jU2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjp2hMhjW2hhubjS)}(hhh]jX)}(h-read the link partner advertisement and pauseh]h-read the link partner advertisement and pause}(hj"3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jRhjW2hhhjp2hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj:3jxj:3jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the Clause 45 defined base (7.19) and 10G (7.33) status registers, filling in the link partner advertisement, pause and asym_pause members in **phydev**. This assumes that the auto-negotiation MMD is present, and the backplane bit (7.48.0) is clear. Clause 45 PHY drivers are expected to fill in the remainder of the link partner advert from vendor registers.h](jX)}(h**Parameters**h]j)}(hjD3h]h Parameters}(hjF3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB3ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj>3ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjc3h]hstruct phy_device *phydev}(hje3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj]3ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj|3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjx3hMhjy3ubah}(h]h ]h"]h$]h&]uh1jhj]3ubeh}(h]h ]h"]h$]h&]uh1jhjx3hMhjZ3ubah}(h]h ]h"]h$]h&]uh1jhj>3ubjX)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj>3ubjX)}(hXnRead the Clause 45 defined base (7.19) and 10G (7.33) status registers, filling in the link partner advertisement, pause and asym_pause members in **phydev**. This assumes that the auto-negotiation MMD is present, and the backplane bit (7.48.0) is clear. Clause 45 PHY drivers are expected to fill in the remainder of the link partner advert from vendor registers.h](hRead the Clause 45 defined base (7.19) and 10G (7.33) status registers, filling in the link partner advertisement, pause and asym_pause members in }(hj3hhhNhNubj)}(h **phydev**h]hphydev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh. This assumes that the auto-negotiation MMD is present, and the backplane bit (7.48.0) is clear. Clause 45 PHY drivers are expected to fill in the remainder of the link partner advert from vendor registers.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj>3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h4genphy_c45_pma_baset1_read_master_slave (C function))c.genphy_c45_pma_baset1_read_master_slavehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hGint genphy_c45_pma_baset1_read_master_slave (struct phy_device *phydev)h]h)}(hFint genphy_c45_pma_baset1_read_master_slave(struct phy_device *phydev)h](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM:ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhj4hM:ubj)}(h'genphy_c45_pma_baset1_read_master_slaveh]j%)}(h'genphy_c45_pma_baset1_read_master_slaveh]h'genphy_c45_pma_baset1_read_master_slave}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj3hhhj4hM:ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj24hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.4ubj)}(h h]h }(hj?4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.4ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjP4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR4modnameN classnameNjj!)}j$]j')}jj4sb)c.genphy_c45_pma_baset1_read_master_slaveasbuh1hhj.4ubj)}(h h]h }(hjp4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.4ubj;)}(hj>h]h*}(hj~4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.4ubj%)}(hphydevh]hphydev}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*4ubah}(h]h ]h"]h$]h&]j<j=uh1jhj3hhhj4hM:ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj3hhhj4hM:ubah}(h]j3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj4hM:hj3hhubjS)}(hhh]jX)}(h&read forced master/slave configurationh]h&read forced master/slave configuration}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM:hj4hhubah}(h]h ]h"]h$]h&]uh1jRhj3hhhj4hM:ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM>hj4ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj4h]hstruct phy_device *phydev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM@hj4ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM<hj 5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj 5hM@hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h genphy_c45_read_pma (C function)c.genphy_c45_read_pmahNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3int genphy_c45_read_pma (struct phy_device *phydev)h]h)}(h2int genphy_c45_read_pma(struct phy_device *phydev)h](j)}(hinth]hint}(hjP5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL5hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMVubj)}(h h]h }(hj_5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjL5hhhj^5hMVubj)}(hgenphy_c45_read_pmah]j%)}(hgenphy_c45_read_pmah]hgenphy_c45_read_pma}(hjq5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjm5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjL5hhhj^5hMVubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jjs5sbc.genphy_c45_read_pmaasbuh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj;)}(hj>h]h*}(hj5hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj5ubj%)}(hphydevh]hphydev}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj5ubah}(h]h ]h"]h$]h&]j<j=uh1jhjL5hhhj^5hMVubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjH5hhhj^5hMVubah}(h]jC5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^5hMVhjE5hhubjS)}(hhh]jX)}(hread link speed etc from PMAh]hread link speed etc from PMA}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMVhj 6hhubah}(h]h ]h"]h$]h&]uh1jRhjE5hhhj^5hMVubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(6jxj(6jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj26h]h Parameters}(hj46hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj06ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMZhj,6ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjQ6h]hstruct phy_device *phydev}(hjS6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM\hjK6ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMWhjg6ubah}(h]h ]h"]h$]h&]uh1jhjK6ubeh}(h]h ]h"]h$]h&]uh1jhjf6hM\hjH6ubah}(h]h ]h"]h$]h&]uh1jhj,6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!genphy_c45_read_mdix (C function)c.genphy_c45_read_mdixhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4int genphy_c45_read_mdix (struct phy_device *phydev)h]h)}(h3int genphy_c45_read_mdix(struct phy_device *phydev)h](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6hhhj6hMubj)}(hgenphy_c45_read_mdixh]j%)}(hgenphy_c45_read_mdixh]hgenphy_c45_read_mdix}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj6hhhj6hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jj6sbc.genphy_c45_read_mdixasbuh1hhj6ubj)}(h h]h }(hj&7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj47hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hphydevh]hphydev}(hjA7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubah}(h]h ]h"]h$]h&]j<j=uh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhj6hMubah}(h]j6ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hMhj6hhubjS)}(hhh]jX)}(hread mdix status from PMAh]hread mdix status from PMA}(hjk7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjh7hhubah}(h]h ]h"]h$]h&]uh1jRhj6hhhj6hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj7jxj7jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj7ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj7h]hstruct phy_device *phydev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj7ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*genphy_c45_read_eee_abilities (C function)c.genphy_c45_read_eee_abilitieshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h=int genphy_c45_read_eee_abilities (struct phy_device *phydev)h]h)}(hh]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?8ubj%)}(hphydevh]hphydev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;8ubah}(h]h ]h"]h$]h&]j<j=uh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhj8hMubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hMhj7hhubjS)}(hhh]jX)}(hread supported EEE link modesh]hread supported EEE link modes}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jRhj7hhhj8hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj8ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hj9h]hstruct phy_device *phydev}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj9ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*genphy_c45_an_config_eee_aneg (C function)c.genphy_c45_an_config_eee_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h=int genphy_c45_an_config_eee_aneg (struct phy_device *phydev)h]h)}(hh]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj9ubj%)}(hphydevh]hphydev}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9ubah}(h]h ]h"]h$]h&]j<j=uh1jhj]9hhhjo9hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjY9hhhjo9hMubah}(h]jT9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjo9hMhjV9hhubjS)}(hhh]jX)}(hconfigure EEE advertisementh]hconfigure EEE advertisement}(hj!:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jRhjV9hhhjo9hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj9:jxj9:jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hjC:h]h Parameters}(hjE:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA:ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj=:ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjb:h]hstruct phy_device *phydev}(hjd:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj\:ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj{:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjx:ubah}(h]h ]h"]h$]h&]uh1jhj\:ubeh}(h]h ]h"]h$]h&]uh1jhjw:hMhjY:ubah}(h]h ]h"]h$]h&]uh1jhj=:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h1genphy_c45_pma_baset1_read_abilities (C function)&c.genphy_c45_pma_baset1_read_abilitieshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDint genphy_c45_pma_baset1_read_abilities (struct phy_device *phydev)h]h)}(hCint genphy_c45_pma_baset1_read_abilities(struct phy_device *phydev)h](j)}(hinth]hint}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhj:hMubj)}(h$genphy_c45_pma_baset1_read_abilitiesh]j%)}(h$genphy_c45_pma_baset1_read_abilitiesh]h$genphy_c45_pma_baset1_read_abilities}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhj:hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]j')}jj:sb&c.genphy_c45_pma_baset1_read_abilitiesasbuh1hhj:ubj)}(h h]h }(hj7;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj;)}(hj>h]h*}(hjE;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:ubj%)}(hphydevh]hphydev}(hjR;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubah}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhj:hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj:hhhj:hMubah}(h]j:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hMhj:hhubjS)}(hhh]jX)}(h)read supported baset1 link modes from PMAh]h)read supported baset1 link modes from PMA}(hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjy;hhubah}(h]h ]h"]h$]h&]uh1jRhj:hhhj:hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;jxj;jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the supported link modes from the extended BASE-T1 ability registerh](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj;ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj;h]hstruct phy_device *phydev}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj;ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj;ubjX)}(hHRead the supported link modes from the extended BASE-T1 ability registerh]hHRead the supported link modes from the extended BASE-T1 ability register}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.genphy_c45_pma_read_ext_abilities (C function)#c.genphy_c45_pma_read_ext_abilitieshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hAint genphy_c45_pma_read_ext_abilities (struct phy_device *phydev)h]h)}(h@int genphy_c45_pma_read_ext_abilities(struct phy_device *phydev)h](j)}(hinth]hint}(hj=<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9<hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjL<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9<hhhjK<hMubj)}(h!genphy_c45_pma_read_ext_abilitiesh]j%)}(h!genphy_c45_pma_read_ext_abilitiesh]h!genphy_c45_pma_read_ext_abilities}(hj^<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZ<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9<hhhjK<hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjz<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjv<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv<ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jj`<sb#c.genphy_c45_pma_read_ext_abilitiesasbuh1hhjv<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjv<ubj;)}(hj>h]h*}(hj<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjv<ubj%)}(hphydevh]hphydev}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjv<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjr<ubah}(h]h ]h"]h$]h&]j<j=uh1jhj9<hhhjK<hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5<hhhjK<hMubah}(h]j0<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjK<hMhj2<hhubjS)}(hhh]jX)}(h"read supported link modes from PMAh]h"read supported link modes from PMA}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jRhj2<hhhjK<hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj=jxj=jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the supported link modes from the PMA/PMD extended ability register (Register 1.11).h](jX)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj!=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj=ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj>=h]hstruct phy_device *phydev}(hj@=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj8=ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjW=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjS=hMhjT=ubah}(h]h ]h"]h$]h&]uh1jhj8=ubeh}(h]h ]h"]h$]h&]uh1jhjS=hMhj5=ubah}(h]h ]h"]h$]h&]uh1jhj=ubjX)}(h**Description**h]j)}(hjy=h]h Description}(hj{=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj=ubjX)}(hYRead the supported link modes from the PMA/PMD extended ability register (Register 1.11).h]hYRead the supported link modes from the PMA/PMD extended ability register (Register 1.11).}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*genphy_c45_pma_read_abilities (C function)c.genphy_c45_pma_read_abilitieshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h=int genphy_c45_pma_read_abilities (struct phy_device *phydev)h]h)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]j')}jj=sbc.genphy_c45_pma_read_abilitiesasbuh1hhj=ubj)}(h h]h }(hj9>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hjG>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hphydevh]hphydev}(hjT>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubah}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhj=hM)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj=hhhj=hM)ubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hM)hj=hhubjS)}(hhh]jX)}(h"read supported link modes from PMAh]h"read supported link modes from PMA}(hj~>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM)hj{>hhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhj=hM)ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the supported link modes from the PMA Status 2 (1.8) register. If bit 1.8.9 is set, the list of supported modes is build using the values in the PMA Extended Abilities (1.11) register, indicating 1000BASET an 10G related modes. If bit 1.11.14 is set, then the list is also extended with the modes in the 2.5G/5G PMA Extended register (1.21), indicating if 2.5GBASET and 5GBASET are supported.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM-hj>ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj>h]hstruct phy_device *phydev}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM*hj>ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>hM*hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hM*hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubjX)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM,hj>ubjX)}(hXRead the supported link modes from the PMA Status 2 (1.8) register. If bit 1.8.9 is set, the list of supported modes is build using the values in the PMA Extended Abilities (1.11) register, indicating 1000BASET an 10G related modes. If bit 1.11.14 is set, then the list is also extended with the modes in the 2.5G/5G PMA Extended register (1.21), indicating if 2.5GBASET and 5GBASET are supported.h]hXRead the supported link modes from the PMA Status 2 (1.8) register. If bit 1.8.9 is set, the list of supported modes is build using the values in the PMA Extended Abilities (1.11) register, indicating 1000BASET an 10G related modes. If bit 1.11.14 is set, then the list is also extended with the modes in the 2.5G/5G PMA Extended register (1.21), indicating if 2.5GBASET and 5GBASET are supported.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM+hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#genphy_c45_read_status (C function)c.genphy_c45_read_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int genphy_c45_read_status (struct phy_device *phydev)h]h)}(h5int genphy_c45_read_status(struct phy_device *phydev)h](j)}(hinth]hint}(hj??hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;?hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjN?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;?hhhjM?hMubj)}(hgenphy_c45_read_statush]j%)}(hgenphy_c45_read_statush]hgenphy_c45_read_status}(hj`?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\?ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;?hhhjM?hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj|?hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjx?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx?ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j')}jjb?sbc.genphy_c45_read_statusasbuh1hhjx?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx?ubj;)}(hj>h]h*}(hj?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjx?ubj%)}(hphydevh]hphydev}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjx?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjt?ubah}(h]h ]h"]h$]h&]j<j=uh1jhj;?hhhjM?hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7?hhhjM?hMubah}(h]j2?ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjM?hMhj4?hhubjS)}(hhh]jX)}(hread PHY statush]hread PHY status}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj?hhubah}(h]h ]h"]h$]h&]uh1jRhj4?hhhjM?hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@jxj@jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Reads status from PHY and sets phy_device members accordingly.h](jX)}(h**Parameters**h]j)}(hj!@h]h Parameters}(hj#@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj@ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj@@h]hstruct phy_device *phydev}(hjB@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj:@ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjY@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjU@hMhjV@ubah}(h]h ]h"]h$]h&]uh1jhj:@ubeh}(h]h ]h"]h$]h&]uh1jhjU@hMhj7@ubah}(h]h ]h"]h$]h&]uh1jhj@ubjX)}(h**Description**h]j)}(hj{@h]h Description}(hj}@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy@ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj@ubjX)}(h>Reads status from PHY and sets phy_device members accordingly.h]h>Reads status from PHY and sets phy_device members accordingly.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#genphy_c45_config_aneg (C function)c.genphy_c45_config_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int genphy_c45_config_aneg (struct phy_device *phydev)h]h)}(h5int genphy_c45_config_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhj@hMubj)}(hgenphy_c45_config_anegh]j%)}(hgenphy_c45_config_anegh]hgenphy_c45_config_aneg}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhj@hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j')}jj@sbc.genphy_c45_config_anegasbuh1hhj@ubj)}(h h]h }(hj;AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj;)}(hj>h]h*}(hjIAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@ubj%)}(hphydevh]hphydev}(hjVAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj@ubah}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhj@hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhj@hMubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@hMhj@hhubjS)}(hhh]jX)}(h(restart auto-negotiation or forced setuph]h(restart auto-negotiation or forced setup}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj}Ahhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhj@hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjAjxjAjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** If auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we force a configuration.h](jX)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjAubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjAh]hstruct phy_device *phydev}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjAubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubjX)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjAubj)}(hhh]j)}(hIf auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we force a configuration.h](j)}(h0If auto-negotiation is enabled, we configure theh]h0If auto-negotiation is enabled, we configure the}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjBubj)}(hhh]jX)}(headvertising, and then restart auto-negotiation. If it is not enabled, then we force a configuration.h]headvertising, and then restart auto-negotiation. If it is not enabled, then we force a configuration.}(hj+BhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'BhMhj(Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj'BhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$genphy_c45_fast_retrain (C function)c.genphy_c45_fast_retrainhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDint genphy_c45_fast_retrain (struct phy_device *phydev, bool enable)h]h)}(hCint genphy_c45_fast_retrain(struct phy_device *phydev, bool enable)h](j)}(hinth]hint}(hjkBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgBhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjzBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgBhhhjyBhMubj)}(hgenphy_c45_fast_retrainh]j%)}(hgenphy_c45_fast_retrainh]hgenphy_c45_fast_retrain}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjgBhhhjyBhMubj)}(h((struct phy_device *phydev, bool enable)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBmodnameN classnameNjj!)}j$]j')}jjBsbc.genphy_c45_fast_retrainasbuh1hhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjBhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(hphydevh]hphydev}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubj)}(h bool enableh](j)}(hjTh]hbool}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hj'ChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj%)}(henableh]henable}(hj5ChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubeh}(h]h ]h"]h$]h&]j<j=uh1jhjgBhhhjyBhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjcBhhhjyBhMubah}(h]j^Bah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyBhMhj`BhhubjS)}(hhh]jX)}(h configure fast retrain registersh]h configure fast retrain registers}(hj_ChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj\Chhubah}(h]h ]h"]h$]h&]uh1jRhj`BhhhjyBhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwCjxjwCjyjzj{uh1hhhhjnhNhNubj})}(hXK**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool enable`` enable fast retrain or not **Description** If fast-retrain is enabled, we configure PHY as advertising fast retrain capable and THP Bypass Request, then enable fast retrain. If it is not enabled, we configure fast retrain disabled.h](jX)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj{Cubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjCh]hstruct phy_device *phydev}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjCubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubj)}(h+``bool enable`` enable fast retrain or not h](j)}(h``bool enable``h]j)}(hjCh]h bool enable}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjCubj)}(hhh]jX)}(henable fast retrain or noth]henable fast retrain or not}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMhjCubeh}(h]h ]h"]h$]h&]uh1jhj{CubjX)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj{Cubj)}(hhh]j)}(hIf fast-retrain is enabled, we configure PHY as advertising fast retrain capable and THP Bypass Request, then enable fast retrain. If it is not enabled, we configure fast retrain disabled.h](j)}(h/If fast-retrain is enabled, we configure PHY ash]h/If fast-retrain is enabled, we configure PHY as}(hj1DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-Dubj)}(hhh]jX)}(hadvertising fast retrain capable and THP Bypass Request, then enable fast retrain. If it is not enabled, we configure fast retrain disabled.h]hadvertising fast retrain capable and THP Bypass Request, then enable fast retrain. If it is not enabled, we configure fast retrain disabled.}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj@Dubah}(h]h ]h"]h$]h&]uh1jhj-Dubeh}(h]h ]h"]h$]h&]uh1jhj?DhMhj*Dubah}(h]h ]h"]h$]h&]uh1jhj{Cubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$genphy_c45_plca_get_cfg (C function)c.genphy_c45_plca_get_cfghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hVint genphy_c45_plca_get_cfg (struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h]h)}(hUint genphy_c45_plca_get_cfg(struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h](j)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhjDhMubj)}(hgenphy_c45_plca_get_cfgh]j%)}(hgenphy_c45_plca_get_cfgh]hgenphy_c45_plca_get_cfg}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDhhhjDhMubj)}(h:(struct phy_device *phydev, struct phy_plca_cfg *plca_cfg)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]j')}jjDsbc.genphy_c45_plca_get_cfgasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hj EhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hphydevh]hphydev}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubj)}(hstruct phy_plca_cfg *plca_cfgh](h)}(hjh]hstruct}(hj3EhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/Eubj)}(h h]h }(hj@EhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Eubh)}(hhh]j%)}(h phy_plca_cfgh]h phy_plca_cfg}(hjQEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSEmodnameN classnameNjj!)}j$]jDc.genphy_c45_plca_get_cfgasbuh1hhj/Eubj)}(h h]h }(hjoEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Eubj;)}(hj>h]h*}(hj}EhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/Eubj%)}(hplca_cfgh]hplca_cfg}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/Eubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubeh}(h]h ]h"]h$]h&]j<j=uh1jhjDhhhjDhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|DhhhjDhMubah}(h]jwDah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjDhMhjyDhhubjS)}(hhh]jX)}(h.get PLCA configuration from standard registersh]h.get PLCA configuration from standard registers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jRhjyDhhhjDhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjEjxjEjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct phy_plca_cfg *plca_cfg`` output structure to store the PLCA configuration **Description** if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to retrieve the current PLCA configuration from the standard registers in MMD 31.h](jX)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjEubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjEh]hstruct phy_device *phydev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjEubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj FhMhj Fubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj FhMhjEubj)}(hS``struct phy_plca_cfg *plca_cfg`` output structure to store the PLCA configuration h](j)}(h!``struct phy_plca_cfg *plca_cfg``h]j)}(hj.Fh]hstruct phy_plca_cfg *plca_cfg}(hj0FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Fubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj(Fubj)}(hhh]jX)}(h0output structure to store the PLCA configurationh]h0output structure to store the PLCA configuration}(hjGFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjCFhMhjDFubah}(h]h ]h"]h$]h&]uh1jhj(Fubeh}(h]h ]h"]h$]h&]uh1jhjCFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubjX)}(h**Description**h]j)}(hjiFh]h Description}(hjkFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgFubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjEubj)}(hhh]j)}(hif the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to retrieve the current PLCA configuration from the standard registers in MMD 31.h](j)}(h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCAh]h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjFubj)}(hhh]jX)}(hManagement Registers specifications, this function can be used to retrieve the current PLCA configuration from the standard registers in MMD 31.h]hManagement Registers specifications, this function can be used to retrieve the current PLCA configuration from the standard registers in MMD 31.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$genphy_c45_plca_set_cfg (C function)c.genphy_c45_plca_set_cfghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h\int genphy_c45_plca_set_cfg (struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg)h]h)}(h[int genphy_c45_plca_set_cfg(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg)h](j)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM4ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFhhhjFhM4ubj)}(hgenphy_c45_plca_set_cfgh]j%)}(hgenphy_c45_plca_set_cfgh]hgenphy_c45_plca_set_cfg}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjFhhhjFhM4ubj)}(h@(struct phy_device *phydev, const struct phy_plca_cfg *plca_cfg)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hj"GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj3GhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0Gubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5GmodnameN classnameNjj!)}j$]j')}jjFsbc.genphy_c45_plca_set_cfgasbuh1hhjGubj)}(h h]h }(hjSGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hjaGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hphydevh]hphydev}(hjnGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj Gubj)}(h#const struct phy_plca_cfg *plca_cfgh](h)}(hjh]hconst}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(h phy_plca_cfgh]h phy_plca_cfg}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]jOGc.genphy_c45_plca_set_cfgasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hplca_cfgh]hplca_cfg}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj Gubeh}(h]h ]h"]h$]h&]j<j=uh1jhjFhhhjFhM4ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjFhhhjFhM4ubah}(h]jFah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjFhM4hjFhhubjS)}(hhh]jX)}(h/set PLCA configuration using standard registersh]h/set PLCA configuration using standard registers}(hj#HhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM4hj Hhhubah}(h]h ]h"]h$]h&]uh1jRhjFhhhjFhM4ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;Hjxj;Hjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``const struct phy_plca_cfg *plca_cfg`` structure containing the PLCA configuration. Fields set to -1 are not to be changed. **Description** if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to modify the PLCA configuration using the standard registers in MMD 31.h](jX)}(h**Parameters**h]j)}(hjEHh]h Parameters}(hjGHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCHubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM8hj?Hubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjdHh]hstruct phy_device *phydev}(hjfHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM5hj^Hubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj}HhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyHhM5hjzHubah}(h]h ]h"]h$]h&]uh1jhj^Hubeh}(h]h ]h"]h$]h&]uh1jhjyHhM5hj[Hubj)}(h}``const struct phy_plca_cfg *plca_cfg`` structure containing the PLCA configuration. Fields set to -1 are not to be changed. h](j)}(h'``const struct phy_plca_cfg *plca_cfg``h]j)}(hjHh]h#const struct phy_plca_cfg *plca_cfg}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM7hjHubj)}(hhh]jX)}(hTstructure containing the PLCA configuration. Fields set to -1 are not to be changed.h]hTstructure containing the PLCA configuration. Fields set to -1 are not to be changed.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM6hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhM7hj[Hubeh}(h]h ]h"]h$]h&]uh1jhj?HubjX)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM9hj?Hubj)}(hhh]j)}(hif the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to modify the PLCA configuration using the standard registers in MMD 31.h](j)}(h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCAh]h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM:hjHubj)}(hhh]jX)}(hManagement Registers specifications, this function can be used to modify the PLCA configuration using the standard registers in MMD 31.h]hManagement Registers specifications, this function can be used to modify the PLCA configuration using the standard registers in MMD 31.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIhM:hjIubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjIhM:hjHubah}(h]h ]h"]h$]h&]uh1jhj?Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'genphy_c45_plca_get_status (C function)c.genphy_c45_plca_get_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(h[int genphy_c45_plca_get_status (struct phy_device *phydev, struct phy_plca_status *plca_st)h]h)}(hZint genphy_c45_plca_get_status(struct phy_device *phydev, struct phy_plca_status *plca_st)h](j)}(hinth]hint}(hjHIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDIhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjWIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDIhhhjVIhMubj)}(hgenphy_c45_plca_get_statush]j%)}(hgenphy_c45_plca_get_statush]hgenphy_c45_plca_get_status}(hjiIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjDIhhhjVIhMubj)}(h<(struct phy_device *phydev, struct phy_plca_status *plca_st)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j')}jjkIsbc.genphy_c45_plca_get_statusasbuh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hphydevh]hphydev}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}Iubj)}(hstruct phy_plca_status *plca_sth](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(hphy_plca_statush]hphy_plca_status}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]jIc.genphy_c45_plca_get_statusasbuh1hhjIubj)}(h h]h }(hj3JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjAJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hplca_sth]hplca_st}(hjNJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}Iubeh}(h]h ]h"]h$]h&]j<j=uh1jhjDIhhhjVIhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@IhhhjVIhMubah}(h]j;Iah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjVIhMhj=IhhubjS)}(hhh]jX)}(h'get PLCA status from standard registersh]h'get PLCA status from standard registers}(hjxJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjuJhhubah}(h]h ]h"]h$]h&]uh1jRhj=IhhhjVIhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct phy_plca_status *plca_st`` output structure to store the PLCA status **Description** if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to retrieve the current PLCA status information from the standard registers in MMD 31.h](jX)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjJubj)G}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjJh]hstruct phy_device *phydev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjJubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubj)}(hN``struct phy_plca_status *plca_st`` output structure to store the PLCA status h](j)}(h#``struct phy_plca_status *plca_st``h]j)}(hjJh]hstruct phy_plca_status *plca_st}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjJubj)}(hhh]jX)}(h)output structure to store the PLCA statush]h)output structure to store the PLCA status}(hj KhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjJubeh}(h]h ]h"]h$]h&]uh1jhjJubjX)}(h**Description**h]j)}(hj-Kh]h Description}(hj/KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Kubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjJubj)}(hhh]j)}(hif the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA Management Registers specifications, this function can be used to retrieve the current PLCA status information from the standard registers in MMD 31.h](j)}(h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCAh]h=if the PHY complies to the Open Alliance TC14 10BASE-T1S PLCA}(hjJKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjFKubj)}(hhh]jX)}(hManagement Registers specifications, this function can be used to retrieve the current PLCA status information from the standard registers in MMD 31.h]hManagement Registers specifications, this function can be used to retrieve the current PLCA status information from the standard registers in MMD 31.}(hj\KhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXKhMhjYKubah}(h]h ]h"]h$]h&]uh1jhjFKubeh}(h]h ]h"]h$]h&]uh1jhjXKhMhjCKubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%genphy_c45_eee_is_active (C function)c.genphy_c45_eee_is_activehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKint genphy_c45_eee_is_active (struct phy_device *phydev, unsigned long *lp)h]h)}(hJint genphy_c45_eee_is_active(struct phy_device *phydev, unsigned long *lp)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKhhhjKhMubj)}(hgenphy_c45_eee_is_activeh]j%)}(hgenphy_c45_eee_is_activeh]hgenphy_c45_eee_is_active}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKhhhjKhMubj)}(h.(struct phy_device *phydev, unsigned long *lp)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjKmodnameN classnameNjj!)}j$]j')}jjKsbc.genphy_c45_eee_is_activeasbuh1hhjKubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj;)}(hj>h]h*}(hj%LhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj%)}(hphydevh]hphydev}(hj2LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(hunsigned long *lph](j)}(hunsignedh]hunsigned}(hjKLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(h h]h }(hjYLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGLubj)}(hlongh]hlong}(hjgLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(h h]h }(hjuLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGLubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGLubj%)}(hlph]hlp}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubeh}(h]h ]h"]h$]h&]j<j=uh1jhjKhhhjKhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjKhhhjKhMubah}(h]jKah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhMhjKhhubjS)}(hhh]jX)}(hget EEE statush]hget EEE status}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjLhhubah}(h]h ]h"]h$]h&]uh1jRhjKhhhjKhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjLjxjLjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``unsigned long *lp`` variable to store LP advertised linkmodes **Description** this function will read link partner PHY advertisement and compare it to local advertisement to return current EEE state.h](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjLubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjLh]hstruct phy_device *phydev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjLubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjLubj)}(h@``unsigned long *lp`` variable to store LP advertised linkmodes h](j)}(h``unsigned long *lp``h]j)}(hj4Mh]hunsigned long *lp}(hj6MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Mubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj.Mubj)}(hhh]jX)}(h)variable to store LP advertised linkmodesh]h)variable to store LP advertised linkmodes}(hjMMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIMhMhjJMubah}(h]h ]h"]h$]h&]uh1jhj.Mubeh}(h]h ]h"]h$]h&]uh1jhjIMhMhjLubeh}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**Description**h]j)}(hjoMh]h Description}(hjqMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmMubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjLubjX)}(hythis function will read link partner PHY advertisement and compare it to local advertisement to return current EEE state.h]hythis function will read link partner PHY advertisement and compare it to local advertisement to return current EEE state.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'genphy_c45_ethtool_get_eee (C function)c.genphy_c45_ethtool_get_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hUint genphy_c45_ethtool_get_eee (struct phy_device *phydev, struct ethtool_keee *data)h]h)}(hTint genphy_c45_ethtool_get_eee(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhhjMhMubj)}(hgenphy_c45_ethtool_get_eeeh]j%)}(hgenphy_c45_ethtool_get_eeeh]hgenphy_c45_ethtool_get_eee}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjMhhhjMhMubj)}(h6(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Nubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jjMsbc.genphy_c45_ethtool_get_eeeasbuh1hhjMubj)}(h h]h }(hj/NhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hj>h]h*}(hj=NhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(hphydevh]hphydev}(hjJNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMubj)}(hstruct ethtool_keee *datah](h)}(hjh]hstruct}(hjcNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj_Nubj)}(h h]h }(hjpNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Nubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~Nubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j+Nc.genphy_c45_ethtool_get_eeeasbuh1hhj_Nubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_Nubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj_Nubj%)}(hdatah]hdata}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_Nubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMubeh}(h]h ]h"]h$]h&]j<j=uh1jhjMhhhjMhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjMhMubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhMhjMhhubjS)}(hhh]jX)}(hget EEE supported and statush]hget EEE supported and status}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjNhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhjMhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNjxjNjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_keee *data`` ethtool_keee data **Description** it reports the Supported/Advertisement/LP Advertisement capabilities.h](jX)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjOubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj%Oh]hstruct phy_device *phydev}(hj'OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#Oubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjOubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj>OhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:OhMhj;Oubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj:OhMhjOubj)}(h0``struct ethtool_keee *data`` ethtool_keee data h](j)}(h``struct ethtool_keee *data``h]j)}(hj^Oh]hstruct ethtool_keee *data}(hj`OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Oubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXOubj)}(hhh]jX)}(hethtool_keee datah]hethtool_keee data}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjsOhMhjtOubah}(h]h ]h"]h$]h&]uh1jhjXOubeh}(h]h ]h"]h$]h&]uh1jhjsOhMhjOubeh}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjOubjX)}(hEit reports the Supported/Advertisement/LP Advertisement capabilities.h]hEit reports the Supported/Advertisement/LP Advertisement capabilities.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'genphy_c45_ethtool_set_eee (C function)c.genphy_c45_ethtool_set_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hUint genphy_c45_ethtool_set_eee (struct phy_device *phydev, struct ethtool_keee *data)h]h)}(hTint genphy_c45_ethtool_set_eee(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjOhMubj)}(hgenphy_c45_ethtool_set_eeeh]j%)}(hgenphy_c45_ethtool_set_eeeh]hgenphy_c45_ethtool_set_eee}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjOhMubj)}(h6(struct phy_device *phydev, struct ethtool_keee *data)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hj(PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj9PhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6Pubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;PmodnameN classnameNjj!)}j$]j')}jjPsbc.genphy_c45_ethtool_set_eeeasbuh1hhjPubj)}(h h]h }(hjYPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hjgPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(hphydevh]hphydev}(hjtPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubj)}(hstruct ethtool_keee *datah](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jUPc.genphy_c45_ethtool_set_eeeasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(hdatah]hdata}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjPubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjOhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjOhMubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhMhjOhhubjS)}(hhh]jX)}(hset EEE supported and statush]hset EEE supported and status}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj Qhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjOhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&Qjxj&Qjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``struct ethtool_keee *data`` ethtool_keee data **Description** sets the Supported/Advertisement/LP Advertisement capabilities. If eee_enabled is false, no links modes are advertised, but the previously advertised link modes are retained. This allows EEE to be enabled/disabled in a non-destructive way. Returns either error code, 0 if there was no change, or positive value if there was a change which triggered auto-neg.h](jX)}(h**Parameters**h]j)}(hj0Qh]h Parameters}(hj2QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Qubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj*Qubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjOQh]hstruct phy_device *phydev}(hjQQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjIQubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdQhMhjeQubah}(h]h ]h"]h$]h&]uh1jhjIQubeh}(h]h ]h"]h$]h&]uh1jhjdQhMhjFQubj)}(h0``struct ethtool_keee *data`` ethtool_keee data h](j)}(h``struct ethtool_keee *data``h]j)}(hjQh]hstruct ethtool_keee *data}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjQubj)}(hhh]jX)}(hethtool_keee datah]hethtool_keee data}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjFQubeh}(h]h ]h"]h$]h&]uh1jhj*QubjX)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj*QubjX)}(hXfsets the Supported/Advertisement/LP Advertisement capabilities. If eee_enabled is false, no links modes are advertised, but the previously advertised link modes are retained. This allows EEE to be enabled/disabled in a non-destructive way. Returns either error code, 0 if there was no change, or positive value if there was a change which triggered auto-neg.h]hXfsets the Supported/Advertisement/LP Advertisement capabilities. If eee_enabled is false, no links modes are advertised, but the previously advertised link modes are retained. This allows EEE to be enabled/disabled in a non-destructive way. Returns either error code, 0 if there was no change, or positive value if there was a change which triggered auto-neg.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj*Qubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h4genphy_c45_oatc14_cable_test_get_status (C function))c.genphy_c45_oatc14_cable_test_get_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(hWint genphy_c45_oatc14_cable_test_get_status (struct phy_device *phydev, bool *finished)h]h)}(hVint genphy_c45_oatc14_cable_test_get_status(struct phy_device *phydev, bool *finished)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMJubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhjRhMJubj)}(h'genphy_c45_oatc14_cable_test_get_statush]j%)}(h'genphy_c45_oatc14_cable_test_get_statush]h'genphy_c45_oatc14_cable_test_get_status}(hj)RhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%Rubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhjRhMJubj)}(h+(struct phy_device *phydev, bool *finished)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjERhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjARubj)}(h h]h }(hjRRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjARubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjcRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`Rubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjeRmodnameN classnameNjj!)}j$]j')}jj+Rsb)c.genphy_c45_oatc14_cable_test_get_statusasbuh1hhjARubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjARubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjARubj%)}(hphydevh]hphydev}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjARubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=Rubj)}(hbool *finishedh](j)}(hjTh]hbool}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hfinishedh]hfinished}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=Rubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhjRhMJubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjRhhhjRhMJubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMJhjQhhubjS)}(hhh]jX)}(h/Get status of OATC14 10Base-T1S PHY cable test.h]h/Get status of OATC14 10Base-T1S PHY cable test.}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMJhjShhubah}(h]h ]h"]h$]h&]uh1jRhjQhhhjRhMJubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!Sjxj!Sjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` pointer to the PHY device structure ``bool *finished`` pointer to a boolean set true if the test is complete **Description** Retrieves the current status of the OATC14 10Base-T1S PHY cable test. This function reads the OATC14 HDD register to determine whether the test results are valid and whether the test has finished. If the test is complete, the function reports the cable test result via the ethtool cable test interface using ethnl_cable_test_result(), and then clears the test control bit in the PHY register to reset the test state. **Return** 0 on success, or a negative error code on failure (e.g. register read/write error).h](jX)}(h**Parameters**h]j)}(hj+Sh]h Parameters}(hj-ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Subah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMNhj%Subj)}(hhh](j)}(hB``struct phy_device *phydev`` pointer to the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjJSh]hstruct phy_device *phydev}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMLhjDSubj)}(hhh]jX)}(h#pointer to the PHY device structureh]h#pointer to the PHY device structure}(hjcShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_ShMLhj`Subah}(h]h ]h"]h$]h&]uh1jhjDSubeh}(h]h ]h"]h$]h&]uh1jhj_ShMLhjASubj)}(hI``bool *finished`` pointer to a boolean set true if the test is complete h](j)}(h``bool *finished``h]j)}(hjSh]hbool *finished}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMMhj}Subj)}(hhh]jX)}(h5pointer to a boolean set true if the test is completeh]h5pointer to a boolean set true if the test is complete}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShMMhjSubah}(h]h ]h"]h$]h&]uh1jhj}Subeh}(h]h ]h"]h$]h&]uh1jhjShMMhjASubeh}(h]h ]h"]h$]h&]uh1jhj%SubjX)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMOhj%SubjX)}(hRetrieves the current status of the OATC14 10Base-T1S PHY cable test. This function reads the OATC14 HDD register to determine whether the test results are valid and whether the test has finished.h]hRetrieves the current status of the OATC14 10Base-T1S PHY cable test. This function reads the OATC14 HDD register to determine whether the test results are valid and whether the test has finished.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMNhj%SubjX)}(hIf the test is complete, the function reports the cable test result via the ethtool cable test interface using ethnl_cable_test_result(), and then clears the test control bit in the PHY register to reset the test state.h]hIf the test is complete, the function reports the cable test result via the ethtool cable test interface using ethnl_cable_test_result(), and then clears the test control bit in the PHY register to reset the test state.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMRhj%SubjX)}(h **Return**h]j)}(hjSh]hReturn}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMVhj%SubjX)}(hS0 on success, or a negative error code on failure (e.g. register read/write error).h]hS0 on success, or a negative error code on failure (e.g. register read/write error).}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMWhj%Subeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h/genphy_c45_oatc14_cable_test_start (C function)$c.genphy_c45_oatc14_cable_test_starthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hBint genphy_c45_oatc14_cable_test_start (struct phy_device *phydev)h]h)}(hAint genphy_c45_oatc14_cable_test_start(struct phy_device *phydev)h](j)}(hinth]hint}(hj9ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ThhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMxubj)}(h h]h }(hjHThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ThhhjGThMxubj)}(h"genphy_c45_oatc14_cable_test_starth]j%)}(h"genphy_c45_oatc14_cable_test_starth]h"genphy_c45_oatc14_cable_test_start}(hjZThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5ThhhjGThMxubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjvThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrTubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]j')}jj\Tsb$c.genphy_c45_oatc14_cable_test_startasbuh1hhjrTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrTubj;)}(hj>h]h*}(hjThhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrTubj%)}(hphydevh]hphydev}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnTubah}(h]h ]h"]h$]h&]j<j=uh1jhj5ThhhjGThMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1ThhhjGThMxubah}(h]j,Tah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGThMxhj.ThhubjS)}(hhh]jX)}(h/Start a cable test on an OATC14 10Base-T1S PHY.h]h/Start a cable test on an OATC14 10Base-T1S PHY.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMxhjThhubah}(h]h ]h"]h$]h&]uh1jRhj.ThhhjGThMxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjUjxjUjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` Pointer to the PHY device structure **Description** This function initiates a cable diagnostic test on a Clause 45 OATC14 10Base-T1S capable PHY device. It first reads the PHY’s advanced diagnostic capability register to check if High Definition Diagnostics (HDD) mode is supported. If the PHY does not report HDD capability, cable testing is not supported and the function returns -EOPNOTSUPP. For PHYs that support HDD, the function sets the appropriate control bits in the OATC14_HDD register to enable and start the cable diagnostic test. **Return** * 0 on success * -EOPNOTSUPP if the PHY does not support HDD capability * A negative error code on I/O or register access failuresh](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chM|hjUubj)}(hhh]j)}(hB``struct phy_device *phydev`` Pointer to the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hj:Uh]hstruct phy_device *phydev}(hjuh1j3HhjUhMhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*genphy_c45_oatc14_get_sqi_max (C function)c.genphy_c45_oatc14_get_sqi_maxhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h=int genphy_c45_oatc14_get_sqi_max (struct phy_device *phydev)h]h)}(hh]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkVubj%)}(hphydevh]hphydev}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjgVubah}(h]h ]h"]h$]h&]j<j=uh1jhj.Vhhhj@VhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*Vhhhj@VhMubah}(h]j%Vah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@VhMhj'VhhubjS)}(hhh]jX)}(h@Get maximum supported SQI or SQI+ level of OATC14 10Base-T1S PHYh]h@Get maximum supported SQI or SQI+ level of OATC14 10Base-T1S PHY}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jRhj'Vhhhj@VhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj Wjxj Wjyjzj{uh1hhhhjnhNhNubj})}(hXq**Parameters** ``struct phy_device *phydev`` pointer to the PHY device structure **Description** This function returns the maximum supported Signal Quality Indicator (SQI) or SQI+ level. The SQI capability is updated on first invocation if it has not already been updated. **Return** * Maximum SQI/SQI+ level supported * Negative errno on capability read failureh](jX)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubj)}(hhh]j)}(hB``struct phy_device *phydev`` pointer to the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hj3Wh]hstruct phy_device *phydev}(hj5WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Wubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhj-Wubj)}(hhh]jX)}(h#pointer to the PHY device structureh]h#pointer to the PHY device structure}(hjLWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHWhMhjIWubah}(h]h ]h"]h$]h&]uh1jhj-Wubeh}(h]h ]h"]h$]h&]uh1jhjHWhMhj*Wubah}(h]h ]h"]h$]h&]uh1jhjWubjX)}(h**Description**h]j)}(hjnWh]h Description}(hjpWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlWubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubjX)}(hThis function returns the maximum supported Signal Quality Indicator (SQI) or SQI+ level. The SQI capability is updated on first invocation if it has not already been updated.h]hThis function returns the maximum supported Signal Quality Indicator (SQI) or SQI+ level. The SQI capability is updated on first invocation if it has not already been updated.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubjX)}(h **Return**h]j)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubj4H)}(hhh](j9H)}(h Maximum SQI/SQI+ level supportedh]jX)}(hjWh]h Maximum SQI/SQI+ level supported}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubah}(h]h ]h"]h$]h&]uh1j8HhjWubj9H)}(h)Negative errno on capability read failureh]jX)}(hjWh]h)Negative errno on capability read failure}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjWubah}(h]h ]h"]h$]h&]uh1j8HhjWubeh}(h]h ]h"]h$]h&]jIj>uh1j3HhjWhMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&genphy_c45_oatc14_get_sqi (C function)c.genphy_c45_oatc14_get_sqihNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9int genphy_c45_oatc14_get_sqi (struct phy_device *phydev)h]h)}(h8int genphy_c45_oatc14_get_sqi(struct phy_device *phydev)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhjXhMubj)}(hgenphy_c45_oatc14_get_sqih]j%)}(hgenphy_c45_oatc14_get_sqih]hgenphy_c45_oatc14_get_sqi}(hj%XhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!Xubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjXhhhjXhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjAXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=Xubj)}(h h]h }(hjNXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=Xubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj_XhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\Xubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjaXmodnameN classnameNjj!)}j$]j')}jj'Xsbc.genphy_c45_oatc14_get_sqiasbuh1hhj=Xubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=Xubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=Xubj%)}(hphydevh]hphydev}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=Xubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj9Xubah}(h]h ]h"]h$]h&]j<j=uh1jhjXhhhjXhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWhhhjXhMubah}(h]jWah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhMhjWhhubjS)}(hhh]jX)}(h@Get Signal Quality Indicator (SQI) from an OATC14 10Base-T1S PHYh]h@Get Signal Quality Indicator (SQI) from an OATC14 10Base-T1S PHY}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjXhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` pointer to the PHY device structure **Description** This function reads the SQI+ or SQI value from an OATC14-compatible 10Base-T1S PHY. If SQI+ capability is supported, the function returns the extended SQI+ value; otherwise, it returns the basic SQI value. The SQI capability is updated on first invocation if it has not already been updated. **Return** * SQI/SQI+ value on success * Negative errno on read failureh](jX)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXubj)}(hhh]j)}(hB``struct phy_device *phydev`` pointer to the PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjYh]hstruct phy_device *phydev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXubj)}(hhh]jX)}(h#pointer to the PHY device structureh]h#pointer to the PHY device structure}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjXubah}(h]h ]h"]h$]h&]uh1jhjXubjX)}(h**Description**h]j)}(hj@Yh]h Description}(hjBYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Yubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXubjX)}(hX#This function reads the SQI+ or SQI value from an OATC14-compatible 10Base-T1S PHY. If SQI+ capability is supported, the function returns the extended SQI+ value; otherwise, it returns the basic SQI value. The SQI capability is updated on first invocation if it has not already been updated.h]hX#This function reads the SQI+ or SQI value from an OATC14-compatible 10Base-T1S PHY. If SQI+ capability is supported, the function returns the extended SQI+ value; otherwise, it returns the basic SQI value. The SQI capability is updated on first invocation if it has not already been updated.}(hjVYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXubjX)}(h **Return**h]j)}(hjgYh]hReturn}(hjiYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeYubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjXubj4H)}(hhh](j9H)}(hSQI/SQI+ value on successh]jX)}(hjYh]hSQI/SQI+ value on success}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjYubah}(h]h ]h"]h$]h&]uh1j8Hhj}Yubj9H)}(hNegative errno on read failureh]jX)}(hjYh]hNegative errno on read failure}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:122: ./drivers/net/phy/phy-c45.chMhjYubah}(h]h ]h"]h$]h&]uh1j8Hhj}Yubeh}(h]h ]h"]h$]h&]jIj>uh1j3HhjYhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_interface_t (C enum)c.phy_interface_thNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_interface_th]h)}(henum phy_interface_th](h)}(hhh]henum}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYhhhjYhKubj)}(hphy_interface_th]j%)}(hjYh]hphy_interface_t}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYhhhjYhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjYhKubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYhKhjYhhubjS)}(hhh]jX)}(hInterface Mode definitionsh]hInterface Mode definitions}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKFhjZhhubah}(h]h ]h"]h$]h&]uh1jRhjYhhhjYhKubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj0Zjxj0Zjyjzj{uh1hhhhjnhNhNubj})}(hX **Constants** ``PHY_INTERFACE_MODE_NA`` Not Applicable - don't touch ``PHY_INTERFACE_MODE_INTERNAL`` No interface, MAC and PHY combined ``PHY_INTERFACE_MODE_MII`` Media-independent interface ``PHY_INTERFACE_MODE_GMII`` Gigabit media-independent interface ``PHY_INTERFACE_MODE_SGMII`` Serial gigabit media-independent interface ``PHY_INTERFACE_MODE_TBI`` Ten Bit Interface ``PHY_INTERFACE_MODE_REVMII`` Reverse Media Independent Interface ``PHY_INTERFACE_MODE_RMII`` Reduced Media Independent Interface ``PHY_INTERFACE_MODE_REVRMII`` Reduced Media Independent Interface in PHY role ``PHY_INTERFACE_MODE_RGMII`` Reduced gigabit media-independent interface ``PHY_INTERFACE_MODE_RGMII_ID`` RGMII with Internal RX+TX delay ``PHY_INTERFACE_MODE_RGMII_RXID`` RGMII with Internal RX delay ``PHY_INTERFACE_MODE_RGMII_TXID`` RGMII with Internal TX delay ``PHY_INTERFACE_MODE_RTBI`` Reduced TBI ``PHY_INTERFACE_MODE_SMII`` Serial MII ``PHY_INTERFACE_MODE_XGMII`` 10 gigabit media-independent interface ``PHY_INTERFACE_MODE_XLGMII`` 40 gigabit media-independent interface ``PHY_INTERFACE_MODE_MOCA`` Multimedia over Coax ``PHY_INTERFACE_MODE_PSGMII`` Penta SGMII ``PHY_INTERFACE_MODE_QSGMII`` Quad SGMII ``PHY_INTERFACE_MODE_TRGMII`` Turbo RGMII ``PHY_INTERFACE_MODE_100BASEX`` 100 BaseX ``PHY_INTERFACE_MODE_1000BASEX`` 1000 BaseX ``PHY_INTERFACE_MODE_2500BASEX`` 2500 BaseX ``PHY_INTERFACE_MODE_5GBASER`` 5G BaseR ``PHY_INTERFACE_MODE_RXAUI`` Reduced XAUI ``PHY_INTERFACE_MODE_XAUI`` 10 Gigabit Attachment Unit Interface ``PHY_INTERFACE_MODE_10GBASER`` 10G BaseR ``PHY_INTERFACE_MODE_25GBASER`` 25G BaseR ``PHY_INTERFACE_MODE_USXGMII`` Universal Serial 10GE MII ``PHY_INTERFACE_MODE_10GKR`` 10GBASE-KR - with Clause 73 AN ``PHY_INTERFACE_MODE_QUSGMII`` Quad Universal SGMII ``PHY_INTERFACE_MODE_1000BASEKX`` 1000Base-KX - with Clause 73 AN ``PHY_INTERFACE_MODE_10G_QXGMII`` 10G-QXGMII - 4 ports over 10G USXGMII ``PHY_INTERFACE_MODE_50GBASER`` 50GBase-R - with Clause 134 FEC ``PHY_INTERFACE_MODE_LAUI`` 50 Gigabit Attachment Unit Interface ``PHY_INTERFACE_MODE_100GBASEP`` 100GBase-P - with Clause 134 FEC ``PHY_INTERFACE_MODE_MIILITE`` MII-Lite - MII without RXER TXER CRS COL ``PHY_INTERFACE_MODE_MAX`` Book keepingh](jX)}(h **Constants**h]j)}(hj:Zh]h Constants}(hj]h]hPHY_INTERFACE_MODE_RTBI}(hj@]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<]ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKthj8]ubj)}(hhh]jX)}(h Reduced TBIh]h Reduced TBI}(hjW]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjS]hKthjT]ubah}(h]h ]h"]h$]h&]uh1jhj8]ubeh}(h]h ]h"]h$]h&]uh1jhjS]hKthjPZubj)}(h'``PHY_INTERFACE_MODE_SMII`` Serial MII h](j)}(h``PHY_INTERFACE_MODE_SMII``h]j)}(hjw]h]hPHY_INTERFACE_MODE_SMII}(hjy]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju]ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKwhjq]ubj)}(hhh]jX)}(h Serial MIIh]h Serial MII}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hKwhj]ubah}(h]h ]h"]h$]h&]uh1jhjq]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKwhjPZubj)}(hD``PHY_INTERFACE_MODE_XGMII`` 10 gigabit media-independent interface h](j)}(h``PHY_INTERFACE_MODE_XGMII``h]j)}(hj]h]hPHY_INTERFACE_MODE_XGMII}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKzhj]ubj)}(hhh]jX)}(h&10 gigabit media-independent interfaceh]h&10 gigabit media-independent interface}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hKzhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hKzhjPZubj)}(hE``PHY_INTERFACE_MODE_XLGMII`` 40 gigabit media-independent interface h](j)}(h``PHY_INTERFACE_MODE_XLGMII``h]j)}(hj]h]hPHY_INTERFACE_MODE_XLGMII}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhK}hj]ubj)}(hhh]jX)}(h&40 gigabit media-independent interfaceh]h&40 gigabit media-independent interface}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hK}hj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hK}hjPZubj)}(h1``PHY_INTERFACE_MODE_MOCA`` Multimedia over Coax h](j)}(h``PHY_INTERFACE_MODE_MOCA``h]j)}(hj"^h]hPHY_INTERFACE_MODE_MOCA}(hj$^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ^ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj^ubj)}(hhh]jX)}(hMultimedia over Coaxh]hMultimedia over Coax}(hj;^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7^hKhj8^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj7^hKhjPZubj)}(h*``PHY_INTERFACE_MODE_PSGMII`` Penta SGMII h](j)}(h``PHY_INTERFACE_MODE_PSGMII``h]j)}(hj[^h]hPHY_INTERFACE_MODE_PSGMII}(hj]^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY^ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjU^ubj)}(hhh]jX)}(h Penta SGMIIh]h Penta SGMII}(hjt^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp^hKhjq^ubah}(h]h ]h"]h$]h&]uh1jhjU^ubeh}(h]h ]h"]h$]h&]uh1jhjp^hKhjPZubj)}(h)``PHY_INTERFACE_MODE_QSGMII`` Quad SGMII h](j)}(h``PHY_INTERFACE_MODE_QSGMII``h]j)}(hj^h]hPHY_INTERFACE_MODE_QSGMII}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj^ubj)}(hhh]jX)}(h Quad SGMIIh]h Quad SGMII}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjPZubj)}(h*``PHY_INTERFACE_MODE_TRGMII`` Turbo RGMII h](j)}(h``PHY_INTERFACE_MODE_TRGMII``h]j)}(hj^h]hPHY_INTERFACE_MODE_TRGMII}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj^ubj)}(hhh]jX)}(h Turbo RGMIIh]h Turbo RGMII}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjPZubj)}(h*``PHY_INTERFACE_MODE_100BASEX`` 100 BaseX h](j)}(h``PHY_INTERFACE_MODE_100BASEX``h]j)}(hj_h]hPHY_INTERFACE_MODE_100BASEX}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj_ubj)}(hhh]jX)}(h 100 BaseXh]h 100 BaseX}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjPZubj)}(h,``PHY_INTERFACE_MODE_1000BASEX`` 1000 BaseX h](j)}(h ``PHY_INTERFACE_MODE_1000BASEX``h]j)}(hj?_h]hPHY_INTERFACE_MODE_1000BASEX}(hjA_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=_ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj9_ubj)}(hhh]jX)}(h 1000 BaseXh]h 1000 BaseX}(hjX_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjT_hKhjU_ubah}(h]h ]h"]h$]h&]uh1jhj9_ubeh}(h]h ]h"]h$]h&]uh1jhjT_hKhjPZubj)}(h,``PHY_INTERFACE_MODE_2500BASEX`` 2500 BaseX h](j)}(h ``PHY_INTERFACE_MODE_2500BASEX``h]j)}(hjx_h]hPHY_INTERFACE_MODE_2500BASEX}(hjz_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv_ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjr_ubj)}(hhh]jX)}(h 2500 BaseXh]h 2500 BaseX}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhjr_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjPZubj)}(h(``PHY_INTERFACE_MODE_5GBASER`` 5G BaseR h](j)}(h``PHY_INTERFACE_MODE_5GBASER``h]j)}(hj_h]hPHY_INTERFACE_MODE_5GBASER}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj_ubj)}(hhh]jX)}(h5G BaseRh]h5G BaseR}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hKhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjPZubj)}(h*``PHY_INTERFACE_MODE_RXAUI`` Reduced XAUI h](j)}(h``PHY_INTERFACE_MODE_RXAUI``h]j)}(hj_h]hPHY_INTERFACE_MODE_RXAUI}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj_ubj)}(hhh]jX)}(h Reduced XAUIh]h Reduced XAUI}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hKhj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hKhjPZubj)}(hA``PHY_INTERFACE_MODE_XAUI`` 10 Gigabit Attachment Unit Interface h](j)}(h``PHY_INTERFACE_MODE_XAUI``h]j)}(hj#`h]hPHY_INTERFACE_MODE_XAUI}(hj%`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!`ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj`ubj)}(hhh]jX)}(h$10 Gigabit Attachment Unit Interfaceh]h$10 Gigabit Attachment Unit Interface}(hj<`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8`hKhj9`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj8`hKhjPZubj)}(h*``PHY_INTERFACE_MODE_10GBASER`` 10G BaseR h](j)}(h``PHY_INTERFACE_MODE_10GBASER``h]j)}(hj\`h]hPHY_INTERFACE_MODE_10GBASER}(hj^`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ`ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjV`ubj)}(hhh]jX)}(h 10G BaseRh]h 10G BaseR}(hju`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjq`hKhjr`ubah}(h]h ]h"]h$]h&]uh1jhjV`ubeh}(h]h ]h"]h$]h&]uh1jhjq`hKhjPZubj)}(h*``PHY_INTERFACE_MODE_25GBASER`` 25G BaseR h](j)}(h``PHY_INTERFACE_MODE_25GBASER``h]j)}(hj`h]hPHY_INTERFACE_MODE_25GBASER}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj`ubj)}(hhh]jX)}(h 25G BaseRh]h 25G BaseR}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hKhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjPZubj)}(h9``PHY_INTERFACE_MODE_USXGMII`` Universal Serial 10GE MII h](j)}(h``PHY_INTERFACE_MODE_USXGMII``h]j)}(hj`h]hPHY_INTERFACE_MODE_USXGMII}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj`ubj)}(hhh]jX)}(hUniversal Serial 10GE MIIh]hUniversal Serial 10GE MII}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hKhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjPZubj)}(h<``PHY_INTERFACE_MODE_10GKR`` 10GBASE-KR - with Clause 73 AN h](j)}(h``PHY_INTERFACE_MODE_10GKR``h]j)}(hjah]hPHY_INTERFACE_MODE_10GKR}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjaubj)}(hhh]jX)}(h10GBASE-KR - with Clause 73 ANh]h10GBASE-KR - with Clause 73 AN}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahKhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahKhjPZubj)}(h4``PHY_INTERFACE_MODE_QUSGMII`` Quad Universal SGMII h](j)}(h``PHY_INTERFACE_MODE_QUSGMII``h]j)}(hj@ah]hPHY_INTERFACE_MODE_QUSGMII}(hjBahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>aubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj:aubj)}(hhh]jX)}(hQuad Universal SGMIIh]hQuad Universal SGMII}(hjYahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUahKhjVaubah}(h]h ]h"]h$]h&]uh1jhj:aubeh}(h]h ]h"]h$]h&]uh1jhjUahKhjPZubj)}(hB``PHY_INTERFACE_MODE_1000BASEKX`` 1000Base-KX - with Clause 73 AN h](j)}(h!``PHY_INTERFACE_MODE_1000BASEKX``h]j)}(hjyah]hPHY_INTERFACE_MODE_1000BASEKX}(hj{ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjsaubj)}(hhh]jX)}(h1000Base-KX - with Clause 73 ANh]h1000Base-KX - with Clause 73 AN}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahKhjaubah}(h]h ]h"]h$]h&]uh1jhjsaubeh}(h]h ]h"]h$]h&]uh1jhjahKhjPZubj)}(hH``PHY_INTERFACE_MODE_10G_QXGMII`` 10G-QXGMII - 4 ports over 10G USXGMII h](j)}(h!``PHY_INTERFACE_MODE_10G_QXGMII``h]j)}(hjah]hPHY_INTERFACE_MODE_10G_QXGMII}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjaubj)}(hhh]jX)}(h%10G-QXGMII - 4 ports over 10G USXGMIIh]h%10G-QXGMII - 4 ports over 10G USXGMII}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahKhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjahKhjPZubj)}(h@``PHY_INTERFACE_MODE_50GBASER`` 50GBase-R - with Clause 134 FEC h](j)}(h``PHY_INTERFACE_MODE_50GBASER``h]j)}(hjah]hPHY_INTERFACE_MODE_50GBASER}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjaubj)}(hhh]jX)}(h50GBase-R - with Clause 134 FECh]h50GBase-R - with Clause 134 FEC}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjPZubj)}(hA``PHY_INTERFACE_MODE_LAUI`` 50 Gigabit Attachment Unit Interface h](j)}(h``PHY_INTERFACE_MODE_LAUI``h]j)}(hj$bh]hPHY_INTERFACE_MODE_LAUI}(hj&bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"bubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjbubj)}(hhh]jX)}(h$50 Gigabit Attachment Unit Interfaceh]h$50 Gigabit Attachment Unit Interface}(hj=bhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9bhKhj:bubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj9bhKhjPZubj)}(hB``PHY_INTERFACE_MODE_100GBASEP`` 100GBase-P - with Clause 134 FEC h](j)}(h ``PHY_INTERFACE_MODE_100GBASEP``h]j)}(hj]bh]hPHY_INTERFACE_MODE_100GBASEP}(hj_bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[bubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjWbubj)}(hhh]jX)}(h 100GBase-P - with Clause 134 FECh]h 100GBase-P - with Clause 134 FEC}(hjvbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrbhKhjsbubah}(h]h ]h"]h$]h&]uh1jhjWbubeh}(h]h ]h"]h$]h&]uh1jhjrbhKhjPZubj)}(hH``PHY_INTERFACE_MODE_MIILITE`` MII-Lite - MII without RXER TXER CRS COL h](j)}(h``PHY_INTERFACE_MODE_MIILITE``h]j)}(hjbh]hPHY_INTERFACE_MODE_MIILITE}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjbubj)}(hhh]jX)}(h(MII-Lite - MII without RXER TXER CRS COLh]h(MII-Lite - MII without RXER TXER CRS COL}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjPZubj)}(h'``PHY_INTERFACE_MODE_MAX`` Book keepingh](j)}(h``PHY_INTERFACE_MODE_MAX``h]j)}(hjbh]hPHY_INTERFACE_MODE_MAX}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjbubj)}(hhh]jX)}(h Book keepingh]h Book keeping}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjPZubeh}(h]h ]h"]h$]h&]uh1jhj4Zubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjnhhubjX)}(h0Describes the interface between the MAC and PHY.h]h0Describes the interface between the MAC and PHY.}(hj(chhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKohjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_modes (C function) c.phy_modeshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2const char * phy_modes (phy_interface_t interface)h]h)}(h0const char *phy_modes(phy_interface_t interface)h](h)}(hjh]hconst}(hjPchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLchhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKubj)}(h h]h }(hj^chhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLchhhj]chKubj)}(hcharh]hchar}(hjlchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLchhhj]chKubj)}(h h]h }(hjzchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLchhhj]chKubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLchhhj]chKubj)}(h phy_modesh]j%)}(h phy_modesh]h phy_modes}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLchhhj]chKubj)}(h(phy_interface_t interface)h]j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j')}jjcsb c.phy_modesasbuh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj%)}(h interfaceh]h interface}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubah}(h]h ]h"]h$]h&]j<j=uh1jhjLchhhj]chKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHchhhj]chKubah}(h]jCcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]chKhjEchhubjS)}(hhh]jX)}(h;map phy_interface_t enum to device tree binding of phy-modeh]h;map phy_interface_t enum to device tree binding of phy-mode}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj dhhubah}(h]h ]h"]h$]h&]uh1jRhjEchhhj]chKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(djxj(djyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``phy_interface_t interface`` enum phy_interface_t value **Description** maps enum :c:type:`phy_interface_t` defined in this file into the device tree binding of 'phy-mode', so that Ethernet device driver can get PHY interface from device tree.h](jX)}(h**Parameters**h]j)}(hj2dh]h Parameters}(hj4dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0dubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj,dubj)}(hhh]j)}(h9``phy_interface_t interface`` enum phy_interface_t value h](j)}(h``phy_interface_t interface``h]j)}(hjQdh]hphy_interface_t interface}(hjSdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOdubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjKdubj)}(hhh]jX)}(henum phy_interface_t valueh]henum phy_interface_t value}(hjjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfdhKhjgdubah}(h]h ]h"]h$]h&]uh1jhjKdubeh}(h]h ]h"]h$]h&]uh1jhjfdhKhjHdubah}(h]h ]h"]h$]h&]uh1jhj,dubjX)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhj,dubjX)}(hmaps enum :c:type:`phy_interface_t` defined in this file into the device tree binding of 'phy-mode', so that Ethernet device driver can get PHY interface from device tree.h](h maps enum }(hjdhhhNhNubh)}(h:c:type:`phy_interface_t`h]j)}(hjdh]hphy_interface_t}(hjdhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjdubh defined in this file into the device tree binding of ‘phy-mode’, so that Ethernet device driver can get PHY interface from device tree.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjdhKhj,dubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hrgmii_clock (C function) c.rgmii_clockhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hlong rgmii_clock (int speed)h]h)}(hlong rgmii_clock(int speed)h](j)}(hlongh]hlong}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM'ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdhhhjehM'ubj)}(h rgmii_clockh]j%)}(h rgmii_clockh]h rgmii_clock}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjdhhhjehM'ubj)}(h (int speed)h]j)}(h int speedh](j)}(hinth]hint}(hj1ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-eubj)}(h h]h }(hj?ehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-eubj%)}(hspeedh]hspeed}(hjMehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-eubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj)eubah}(h]h ]h"]h$]h&]j<j=uh1jhjdhhhjehM'ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhjehM'ubah}(h]jdah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehM'hjdhhubjS)}(hhh]jX)}(h map link speed to the clock rateh]h map link speed to the clock rate}(hjwehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM'hjtehhubah}(h]h ]h"]h$]h&]uh1jRhjdhhhjehM'ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjejxjejyjzj{uh1hhhhjnhNhNubj})}(hX_**Parameters** ``int speed`` link speed value **Description** maps RGMII supported link speeds into the clock rates. This can also be used for MII, GMII, and RMII interface modes as the clock rates are identical, but the caller must be aware that errors for unsupported clock rates will not be signalled. **Return** clock rate or negative errnoh](jX)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM+hjeubj)}(hhh]j)}(h``int speed`` link speed value h](j)}(h ``int speed``h]j)}(hjeh]h int speed}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM(hjeubj)}(hhh]jX)}(hlink speed valueh]hlink speed value}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehM(hjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehM(hjeubah}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h**Description**h]j)}(hjeh]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM*hjeubjX)}(hmaps RGMII supported link speeds into the clock rates. This can also be used for MII, GMII, and RMII interface modes as the clock rates are identical, but the caller must be aware that errors for unsupported clock rates will not be signalled.h]hmaps RGMII supported link speeds into the clock rates. This can also be used for MII, GMII, and RMII interface modes as the clock rates are identical, but the caller must be aware that errors for unsupported clock rates will not be signalled.}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM*hjeubjX)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM/hjeubjX)}(hclock rate or negative errnoh]hclock rate or negative errno}(hj0fhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM/hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdio_bus_stats (C struct)c.mdio_bus_statshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hmdio_bus_statsh]h)}(hstruct mdio_bus_statsh](h)}(hjh]hstruct}(hj_fhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[fhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM4ubj)}(h h]h }(hjmfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[fhhhjlfhM4ubj)}(hmdio_bus_statsh]j%)}(hjYfh]hmdio_bus_stats}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{fubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj[fhhhjlfhM4ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjWfhhhjlfhM4ubah}(h]jRfah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlfhM4hjTfhhubjS)}(hhh]jX)}(h#Statistics counters for MDIO bussesh]h#Statistics counters for MDIO busses}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMPhjfhhubah}(h]h ]h"]h$]h&]uh1jRhjTfhhhjlfhM4ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjfjxjfjyjzj{uh1hhhhjnhNhNubj})}(hX**Definition**:: struct mdio_bus_stats { u64_stats_t transfers; u64_stats_t errors; u64_stats_t writes; u64_stats_t reads; struct u64_stats_sync syncp; }; **Members** ``transfers`` Total number of transfers, i.e. **writes** + **reads** ``errors`` Number of MDIO transfers that returned an error ``writes`` Number of write transfers ``reads`` Number of read transfers ``syncp`` Synchronisation for incrementing statisticsh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh:}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjfubjU)}(hstruct mdio_bus_stats { u64_stats_t transfers; u64_stats_t errors; u64_stats_t writes; u64_stats_t reads; struct u64_stats_sync syncp; };h]hstruct mdio_bus_stats { u64_stats_t transfers; u64_stats_t errors; u64_stats_t writes; u64_stats_t reads; struct u64_stats_sync syncp; };}hjfsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhjfubjX)}(h **Members**h]j)}(hjfh]hMembers}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hjfubj)}(hhh](j)}(hE``transfers`` Total number of transfers, i.e. **writes** + **reads** h](j)}(h ``transfers``h]j)}(hjgh]h transfers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRhjgubj)}(hhh]jX)}(h6Total number of transfers, i.e. **writes** + **reads**h](h Total number of transfers, i.e. }(hj'ghhhNhNubj)}(h **writes**h]hwrites}(hj/ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'gubh + }(hj'ghhhNhNubj)}(h **reads**h]hreads}(hjAghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'gubeh}(h]h ]h"]h$]h&]uh1jWhj#ghMRhj$gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhj#ghMRhjgubj)}(h;``errors`` Number of MDIO transfers that returned an error h](j)}(h ``errors``h]j)}(hjggh]herrors}(hjighhhNhNubah}(h]h ]h"]h$]h&]uh1jhjegubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMShjagubj)}(hhh]jX)}(h/Number of MDIO transfers that returned an errorh]h/Number of MDIO transfers that returned an error}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|ghMShj}gubah}(h]h ]h"]h$]h&]uh1jhjagubeh}(h]h ]h"]h$]h&]uh1jhj|ghMShjgubj)}(h%``writes`` Number of write transfers h](j)}(h ``writes``h]j)}(hjgh]hwrites}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjgubj)}(hhh]jX)}(hNumber of write transfersh]hNumber of write transfers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghMThjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMThjgubj)}(h#``reads`` Number of read transfers h](j)}(h ``reads``h]j)}(hjgh]hreads}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhjgubj)}(hhh]jX)}(hNumber of read transfersh]hNumber of read transfers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghMUhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghMUhjgubj)}(h5``syncp`` Synchronisation for incrementing statisticsh](j)}(h ``syncp``h]j)}(hjhh]hsyncp}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhj hubj)}(hhh]jX)}(h+Synchronisation for incrementing statisticsh]h+Synchronisation for incrementing statistics}(hj+hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhj(hubah}(h]h ]h"]h$]h&]uh1jhj hubeh}(h]h ]h"]h$]h&]uh1jhj'hhMUhjgubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmii_bus (C struct) c.mii_bushNtauh1hhjnhhhNhNubh)}(hhh](h)}(hmii_bush]h)}(hstruct mii_bush](h)}(hjh]hstruct}(hjlhhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\ubj)}(h h]h }(hjzhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhhjyhhM\ubj)}(hmii_bush]j%)}(hjfhh]hmii_bus}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhhjyhhM\ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhhjyhhM\ubah}(h]j_hah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhhM\hjahhhubjS)}(hhh]jX)}(hRepresents an MDIO bush]hRepresents an MDIO bus}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMahjhhhubah}(h]h ]h"]h$]h&]uh1jRhjahhhhjyhhM\ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjnhNhNubj})}(hXe **Definition**:: struct mii_bus { struct module *owner; const char *name; char id[MII_BUS_ID_SIZE]; void *priv; int (*read)(struct mii_bus *bus, int addr, int regnum); int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val); int (*read_c45)(struct mii_bus *bus, int addr, int devnum, int regnum); int (*write_c45)(struct mii_bus *bus, int addr, int devnum, int regnum, u16 val); int (*reset)(struct mii_bus *bus); struct mdio_bus_stats stats[PHY_MAX_ADDR]; struct mutex mdio_lock; struct device *parent; enum { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED, MDIOBUS_UNREGISTERED, MDIOBUS_RELEASED, } state; struct device dev; struct mdio_device *mdio_map[PHY_MAX_ADDR]; u32 phy_mask; u32 phy_ignore_ta_mask; int irq[PHY_MAX_ADDR]; int reset_delay_us; int reset_post_delay_us; struct gpio_desc *reset_gpiod; struct mutex shared_lock; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared[PHY_MAX_ADDR]; #endif; }; **Members** ``owner`` Who owns this device ``name`` User friendly name for this MDIO device, or driver name ``id`` Unique identifier for this bus, typical from bus hierarchy ``priv`` Driver private data ``read`` Perform a read transfer on the bus ``write`` Perform a write transfer on the bus ``read_c45`` Perform a C45 read transfer on the bus ``write_c45`` Perform a C45 write transfer on the bus ``reset`` Perform a reset of the bus ``stats`` Statistic counters per device on the bus ``mdio_lock`` A lock to ensure that only one thing can read/write the MDIO bus at a time ``parent`` Parent device of this bus ``state`` State of bus structure ``dev`` Kernel device representation ``mdio_map`` list of all MDIO devices on bus ``phy_mask`` PHY addresses to be ignored when probing ``phy_ignore_ta_mask`` PHY addresses to ignore the TA/read failure ``irq`` An array of interrupts, each PHY's interrupt at the index matching its address ``reset_delay_us`` GPIO reset pulse width in microseconds ``reset_post_delay_us`` GPIO reset deassert delay in microseconds ``reset_gpiod`` Reset GPIO descriptor pointer ``shared_lock`` protect access to the shared element ``shared`` shared state across different PHYsh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMehjhubjU)}(hXstruct mii_bus { struct module *owner; const char *name; char id[MII_BUS_ID_SIZE]; void *priv; int (*read)(struct mii_bus *bus, int addr, int regnum); int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val); int (*read_c45)(struct mii_bus *bus, int addr, int devnum, int regnum); int (*write_c45)(struct mii_bus *bus, int addr, int devnum, int regnum, u16 val); int (*reset)(struct mii_bus *bus); struct mdio_bus_stats stats[PHY_MAX_ADDR]; struct mutex mdio_lock; struct device *parent; enum { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED, MDIOBUS_UNREGISTERED, MDIOBUS_RELEASED, } state; struct device dev; struct mdio_device *mdio_map[PHY_MAX_ADDR]; u32 phy_mask; u32 phy_ignore_ta_mask; int irq[PHY_MAX_ADDR]; int reset_delay_us; int reset_post_delay_us; struct gpio_desc *reset_gpiod; struct mutex shared_lock; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared[PHY_MAX_ADDR]; #endif; };h]hXstruct mii_bus { struct module *owner; const char *name; char id[MII_BUS_ID_SIZE]; void *priv; int (*read)(struct mii_bus *bus, int addr, int regnum); int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val); int (*read_c45)(struct mii_bus *bus, int addr, int devnum, int regnum); int (*write_c45)(struct mii_bus *bus, int addr, int devnum, int regnum, u16 val); int (*reset)(struct mii_bus *bus); struct mdio_bus_stats stats[PHY_MAX_ADDR]; struct mutex mdio_lock; struct device *parent; enum { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED, MDIOBUS_UNREGISTERED, MDIOBUS_RELEASED, } state; struct device dev; struct mdio_device *mdio_map[PHY_MAX_ADDR]; u32 phy_mask; u32 phy_ignore_ta_mask; int irq[PHY_MAX_ADDR]; int reset_delay_us; int reset_post_delay_us; struct gpio_desc *reset_gpiod; struct mutex shared_lock; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared[PHY_MAX_ADDR]; #endif; };}hjhsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjhubjX)}(h **Members**h]j)}(hjhh]hMembers}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhubj)}(hhh](j)}(h``owner`` Who owns this device h](j)}(h ``owner``h]j)}(hjih]howner}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMdhjiubj)}(hhh]jX)}(hWho owns this deviceh]hWho owns this device}(hj4ihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0ihMdhj1iubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhj0ihMdhjiubj)}(hA``name`` User friendly name for this MDIO device, or driver name h](j)}(h``name``h]j)}(hjTih]hname}(hjVihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMehjNiubj)}(hhh]jX)}(h7User friendly name for this MDIO device, or driver nameh]h7User friendly name for this MDIO device, or driver name}(hjmihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjiihMehjjiubah}(h]h ]h"]h$]h&]uh1jhjNiubeh}(h]h ]h"]h$]h&]uh1jhjiihMehjiubj)}(hB``id`` Unique identifier for this bus, typical from bus hierarchy h](j)}(h``id``h]j)}(hjih]hid}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMfhjiubj)}(hhh]jX)}(h:Unique identifier for this bus, typical from bus hierarchyh]h:Unique identifier for this bus, typical from bus hierarchy}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMfhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMfhjiubj)}(h``priv`` Driver private data h](j)}(h``priv``h]j)}(hjih]hpriv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjiubj)}(hhh]jX)}(hDriver private datah]hDriver private data}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMghjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihMghjiubj)}(h,``read`` Perform a read transfer on the bus h](j)}(h``read``h]j)}(hjih]hread}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMqhjiubj)}(hhh]jX)}(h"Perform a read transfer on the bush]h"Perform a read transfer on the bus}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMqhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhMqhjiubj)}(h.``write`` Perform a write transfer on the bus h](j)}(h ``write``h]j)}(hj8jh]hwrite}(hj:jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6jubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMshj2jubj)}(hhh]jX)}(h#Perform a write transfer on the bush]h#Perform a write transfer on the bus}(hjQjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMjhMshjNjubah}(h]h ]h"]h$]h&]uh1jhj2jubeh}(h]h ]h"]h$]h&]uh1jhjMjhMshjiubj)}(h4``read_c45`` Perform a C45 read transfer on the bus h](j)}(h ``read_c45``h]j)}(hjqjh]hread_c45}(hjsjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjojubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMuhjkjubj)}(hhh]jX)}(h&Perform a C45 read transfer on the bush]h&Perform a C45 read transfer on the bus}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMuhjjubah}(h]h ]h"]h$]h&]uh1jhjkjubeh}(h]h ]h"]h$]h&]uh1jhjjhMuhjiubj)}(h6``write_c45`` Perform a C45 write transfer on the bus h](j)}(h ``write_c45``h]j)}(hjjh]h write_c45}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMwhjjubj)}(hhh]jX)}(h'Perform a C45 write transfer on the bush]h'Perform a C45 write transfer on the bus}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMwhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMwhjiubj)}(h%``reset`` Perform a reset of the bus h](j)}(h ``reset``h]j)}(hjjh]hreset}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMzhjjubj)}(hhh]jX)}(hPerform a reset of the bush]hPerform a reset of the bus}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjhMzhjjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMzhjiubj)}(h3``stats`` Statistic counters per device on the bus h](j)}(h ``stats``h]j)}(hjkh]hstats}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM}hjkubj)}(hhh]jX)}(h(Statistic counters per device on the bush]h(Statistic counters per device on the bus}(hj5khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1khM}hj2kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhj1khM}hjiubj)}(hY``mdio_lock`` A lock to ensure that only one thing can read/write the MDIO bus at a time h](j)}(h ``mdio_lock``h]j)}(hjUkh]h mdio_lock}(hjWkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjOkubj)}(hhh]jX)}(hJA lock to ensure that only one thing can read/write the MDIO bus at a timeh]hJA lock to ensure that only one thing can read/write the MDIO bus at a time}(hjnkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjkkubah}(h]h ]h"]h$]h&]uh1jhjOkubeh}(h]h ]h"]h$]h&]uh1jhjjkhMhjiubj)}(h%``parent`` Parent device of this bus h](j)}(h ``parent``h]j)}(hjkh]hparent}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjkubj)}(hhh]jX)}(hParent device of this bush]hParent device of this bus}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjiubj)}(h!``state`` State of bus structure h](j)}(h ``state``h]j)}(hjkh]hstate}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjkubj)}(hhh]jX)}(hState of bus structureh]hState of bus structure}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjiubj)}(h%``dev`` Kernel device representation h](j)}(h``dev``h]j)}(hjlh]hdev}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjkubj)}(hhh]jX)}(hKernel device representationh]hKernel device representation}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjiubj)}(h-``mdio_map`` list of all MDIO devices on bus h](j)}(h ``mdio_map``h]j)}(hj:lh]hmdio_map}(hjh]h*}(hjnhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnhhhjnhMubj)}(h mdiobus_alloch]j%)}(hjnh]h mdiobus_alloc}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjnhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubah}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|nhhhjnhMubah}(h]jwnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjynhhubjS)}(hhh]jX)}(hAllocate an MDIO bus structureh]hAllocate an MDIO bus structure}(hj(ohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj%ohhubah}(h]h ]h"]h$]h&]uh1jRhjynhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj@ojxj@ojyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``void`` no arguments **Description** The internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready for the driver to register the bus.h](jX)}(h**Parameters**h]j)}(hjJoh]h Parameters}(hjLohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHoubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjDoubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjioh]hvoid}(hjkohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgoubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjcoubj)}(hhh]jX)}(h no argumentsh]h no arguments}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~ohKhjoubah}(h]h ]h"]h$]h&]uh1jhjcoubeh}(h]h ]h"]h$]h&]uh1jhj~ohKhj`oubah}(h]h ]h"]h$]h&]uh1jhjDoubjX)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhKhjDoubjX)}(hmThe internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready for the driver to register the bus.h]hmThe internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready for the driver to register the bus.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjDoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_state (C enum) c.phy_statehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h phy_stateh]h)}(henum phy_stateh](h)}(hhh]henum}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjohhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjohhhjohMubj)}(h phy_stateh]j%)}(hjoh]h phy_state}(hj phhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjohhhjohMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjohhhjohMubah}(h]joah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjohMhjohhubjS)}(hhh]jX)}(hPHY state machine states:h]hPHY state machine states:}(hj+phhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj(phhubah}(h]h ]h"]h$]h&]uh1jRhjohhhjohMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjCpjxjCpjyjzj{uh1hhhhjnhNhNubj})}(hX**Constants** ``PHY_DOWN`` PHY device and driver are not ready for anything. probe should be called if and only if the PHY is in this state, given that the PHY device exists. - PHY driver probe function will set the state to **PHY_READY** ``PHY_READY`` PHY is ready to send and receive packets, but the controller is not. By default, PHYs which do not implement probe will be set to this state by phy_probe(). - start will set the state to UP ``PHY_HALTED`` PHY is up, but no polling or interrupts are done. - phy_start moves to **PHY_UP** ``PHY_ERROR`` PHY is up, but is in an error state. - phy_stop moves to **PHY_HALTED** ``PHY_UP`` The PHY and attached device are ready to do work. Interrupts should be started here. - timer moves to **PHY_NOLINK** or **PHY_RUNNING** ``PHY_RUNNING`` PHY is currently up, running, and possibly sending and/or receiving packets - irq or timer will set **PHY_NOLINK** if link goes down - phy_stop moves to **PHY_HALTED** ``PHY_NOLINK`` PHY is up, but not currently plugged in. - irq or timer will set **PHY_RUNNING** if link comes back - phy_stop moves to **PHY_HALTED** ``PHY_CABLETEST`` PHY is performing a cable test. Packet reception/sending is not expected to work, carrier will be indicated as down. PHY will be poll once per second, or on interrupt for it current state. Once complete, move to UP to restart the PHY. - phy_stop aborts the running test and moves to **PHY_HALTED**h](jX)}(h **Constants**h]j)}(hjMph]h Constants}(hjOphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKpubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjGpubj)}(hhh](j)}(h``PHY_DOWN`` PHY device and driver are not ready for anything. probe should be called if and only if the PHY is in this state, given that the PHY device exists. - PHY driver probe function will set the state to **PHY_READY** h](j)}(h ``PHY_DOWN``h]j)}(hjlph]hPHY_DOWN}(hjnphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjpubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjfpubj)}(hhh]jX)}(hPHY device and driver are not ready for anything. probe should be called if and only if the PHY is in this state, given that the PHY device exists. - PHY driver probe function will set the state to **PHY_READY**h](hPHY device and driver are not ready for anything. probe should be called if and only if the PHY is in this state, given that the PHY device exists. - PHY driver probe function will set the state to }(hjphhhNhNubj)}(h **PHY_READY**h]h PHY_READY}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpubah}(h]h ]h"]h$]h&]uh1jhjfpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjcpubj)}(h``PHY_READY`` PHY is ready to send and receive packets, but the controller is not. By default, PHYs which do not implement probe will be set to this state by phy_probe(). - start will set the state to UP h](j)}(h ``PHY_READY``h]j)}(hjph]h PHY_READY}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpubj)}(hhh]jX)}(hPHY is ready to send and receive packets, but the controller is not. By default, PHYs which do not implement probe will be set to this state by phy_probe(). - start will set the state to UPh]hPHY is ready to send and receive packets, but the controller is not. By default, PHYs which do not implement probe will be set to this state by phy_probe(). - start will set the state to UP}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjphMhjcpubj)}(ha``PHY_HALTED`` PHY is up, but no polling or interrupts are done. - phy_start moves to **PHY_UP** h](j)}(h``PHY_HALTED``h]j)}(hjph]h PHY_HALTED}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpubj)}(hhh]jX)}(hQPHY is up, but no polling or interrupts are done. - phy_start moves to **PHY_UP**h](hGPHY is up, but no polling or interrupts are done. - phy_start moves to }(hjqhhhNhNubj)}(h **PHY_UP**h]hPHY_UP}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjcpubj)}(hV``PHY_ERROR`` PHY is up, but is in an error state. - phy_stop moves to **PHY_HALTED** h](j)}(h ``PHY_ERROR``h]j)}(hj6qh]h PHY_ERROR}(hj8qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4qubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj0qubj)}(hhh]jX)}(hGPHY is up, but is in an error state. - phy_stop moves to **PHY_HALTED**h](h9PHY is up, but is in an error state. - phy_stop moves to }(hjOqhhhNhNubj)}(h**PHY_HALTED**h]h PHY_HALTED}(hjWqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOqubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjLqubah}(h]h ]h"]h$]h&]uh1jhj0qubeh}(h]h ]h"]h$]h&]uh1jhjKqhMhjcpubj)}(h``PHY_UP`` The PHY and attached device are ready to do work. Interrupts should be started here. - timer moves to **PHY_NOLINK** or **PHY_RUNNING** h](j)}(h ``PHY_UP``h]j)}(hj~qh]hPHY_UP}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|qubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjxqubj)}(hhh]jX)}(hThe PHY and attached device are ready to do work. Interrupts should be started here. - timer moves to **PHY_NOLINK** or **PHY_RUNNING**h](hfThe PHY and attached device are ready to do work. Interrupts should be started here. - timer moves to }(hjqhhhNhNubj)}(h**PHY_NOLINK**h]h PHY_NOLINK}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh or }(hjqhhhNhNubj)}(h**PHY_RUNNING**h]h PHY_RUNNING}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhjxqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjcpubj)}(h``PHY_RUNNING`` PHY is currently up, running, and possibly sending and/or receiving packets - irq or timer will set **PHY_NOLINK** if link goes down - phy_stop moves to **PHY_HALTED** h](j)}(h``PHY_RUNNING``h]j)}(hjqh]h PHY_RUNNING}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubj)}(hhh]jX)}(hPHY is currently up, running, and possibly sending and/or receiving packets - irq or timer will set **PHY_NOLINK** if link goes down - phy_stop moves to **PHY_HALTED**h](hdPHY is currently up, running, and possibly sending and/or receiving packets - irq or timer will set }(hjqhhhNhNubj)}(h**PHY_NOLINK**h]h PHY_NOLINK}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh' if link goes down - phy_stop moves to }(hjqhhhNhNubj)}(h**PHY_HALTED**h]h PHY_HALTED}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjcpubj)}(h``PHY_NOLINK`` PHY is up, but not currently plugged in. - irq or timer will set **PHY_RUNNING** if link comes back - phy_stop moves to **PHY_HALTED** h](j)}(h``PHY_NOLINK``h]j)}(hj2rh]h PHY_NOLINK}(hj4rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0rubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj,rubj)}(hhh]jX)}(hPHY is up, but not currently plugged in. - irq or timer will set **PHY_RUNNING** if link comes back - phy_stop moves to **PHY_HALTED**h](hAPHY is up, but not currently plugged in. - irq or timer will set }(hjKrhhhNhNubj)}(h**PHY_RUNNING**h]h PHY_RUNNING}(hjSrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKrubh( if link comes back - phy_stop moves to }(hjKrhhhNhNubj)}(h**PHY_HALTED**h]h PHY_HALTED}(hjerhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKrubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjHrubah}(h]h ]h"]h$]h&]uh1jhj,rubeh}(h]h ]h"]h$]h&]uh1jhjGrhMhjcpubj)}(hX;``PHY_CABLETEST`` PHY is performing a cable test. Packet reception/sending is not expected to work, carrier will be indicated as down. PHY will be poll once per second, or on interrupt for it current state. Once complete, move to UP to restart the PHY. - phy_stop aborts the running test and moves to **PHY_HALTED**h](j)}(h``PHY_CABLETEST``h]j)}(hjrh]h PHY_CABLETEST}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjrubj)}(hhh]jX)}(hX)PHY is performing a cable test. Packet reception/sending is not expected to work, carrier will be indicated as down. PHY will be poll once per second, or on interrupt for it current state. Once complete, move to UP to restart the PHY. - phy_stop aborts the running test and moves to **PHY_HALTED**h](hXPHY is performing a cable test. Packet reception/sending is not expected to work, carrier will be indicated as down. PHY will be poll once per second, or on interrupt for it current state. Once complete, move to UP to restart the PHY. - phy_stop aborts the running test and moves to }(hjrhhhNhNubj)}(h**PHY_HALTED**h]h PHY_HALTED}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjrubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjcpubeh}(h]h ]h"]h$]h&]uh1jhjGpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_c45_device_ids (C struct)c.phy_c45_device_idshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_c45_device_idsh]h)}(hstruct phy_c45_device_idsh](h)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhjshM ubj)}(hphy_c45_device_idsh]j%)}(hjrh]hphy_c45_device_ids}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjrhhhjshM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrhhhjshM ubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjshM hjrhhubjS)}(hhh]jX)}(h802.3-c45 Device Identifiersh]h802.3-c45 Device Identifiers}(hj6shhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj3shhubah}(h]h ]h"]h$]h&]uh1jRhjrhhhjshM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjNsjxjNsjyjzj{uh1hhhhjnhNhNubj})}(hXT**Definition**:: struct phy_c45_device_ids { u32 devices_in_package; u32 mmds_present; u32 device_ids[MDIO_MMD_NUM]; }; **Members** ``devices_in_package`` IEEE 802.3 devices in package register value. ``mmds_present`` bit vector of MMDs present. ``device_ids`` The device identifier for each present device.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjZshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVsubh:}(hjVshhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjRsubjU)}(hrstruct phy_c45_device_ids { u32 devices_in_package; u32 mmds_present; u32 device_ids[MDIO_MMD_NUM]; };h]hrstruct phy_c45_device_ids { u32 devices_in_package; u32 mmds_present; u32 device_ids[MDIO_MMD_NUM]; };}hjsssbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjRsubjX)}(h **Members**h]j)}(hjsh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjRsubj)}(hhh](j)}(hE``devices_in_package`` IEEE 802.3 devices in package register value. h](j)}(h``devices_in_package``h]j)}(hjsh]hdevices_in_package}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjsubj)}(hhh]jX)}(h-IEEE 802.3 devices in package register value.h]h-IEEE 802.3 devices in package register value.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubj)}(h-``mmds_present`` bit vector of MMDs present. h](j)}(h``mmds_present``h]j)}(hjsh]h mmds_present}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjsubj)}(hhh]jX)}(hbit vector of MMDs present.h]hbit vector of MMDs present.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshM hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshM hjsubj)}(h=``device_ids`` The device identifier for each present device.h](j)}(h``device_ids``h]j)}(hjth]h device_ids}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjtubj)}(hhh]jX)}(h.The device identifier for each present device.h]h.The device identifier for each present device.}(hj.thhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hj+tubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhj*thM hjsubeh}(h]h ]h"]h$]h&]uh1jhjRsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_oatc14_sqi_capability (C struct)c.phy_oatc14_sqi_capabilityhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_oatc14_sqi_capabilityh]h)}(h struct phy_oatc14_sqi_capabilityh](h)}(hjh]hstruct}(hjothhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkthhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hj}thhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkthhhj|thMubj)}(hphy_oatc14_sqi_capabilityh]j%)}(hjith]hphy_oatc14_sqi_capability}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkthhhj|thMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjgthhhj|thMubah}(h]jbtah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|thMhjdthhubjS)}(hhh]jX)}(h4SQI capability information for OATC14 10Base-T1S PHYh]h4SQI capability information for OATC14 10Base-T1S PHY}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjthhubah}(h]h ]h"]h$]h&]uh1jRhjdthhhj|thMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1hhhhjnhNhNubj})}(hX**Definition**:: struct phy_oatc14_sqi_capability { bool updated; int sqi_max; u8 sqiplus_bits; }; **Members** ``updated`` Indicates whether the SQI capability fields have been updated. ``sqi_max`` Maximum supported Signal Quality Indicator (SQI) level reported by the PHY. ``sqiplus_bits`` Bits for SQI+ levels supported by the PHY. 0 - SQI+ is not supported 3 - SQI+ is supported, using 3 bits (8 levels) 4 - SQI+ is supported, using 4 bits (16 levels) 5 - SQI+ is supported, using 5 bits (32 levels) 6 - SQI+ is supported, using 6 bits (64 levels) 7 - SQI+ is supported, using 7 bits (128 levels) 8 - SQI+ is supported, using 8 bits (256 levels)h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh:}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjtubjU)}(h]struct phy_oatc14_sqi_capability { bool updated; int sqi_max; u8 sqiplus_bits; };h]h]struct phy_oatc14_sqi_capability { bool updated; int sqi_max; u8 sqiplus_bits; };}hjtsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjtubjX)}(h **Members**h]j)}(hjth]hMembers}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM#hjtubj)}(hhh](j)}(hK``updated`` Indicates whether the SQI capability fields have been updated. h](j)}(h ``updated``h]j)}(hjuh]hupdated}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjuubj)}(hhh]jX)}(h>Indicates whether the SQI capability fields have been updated.h]h>Indicates whether the SQI capability fields have been updated.}(hj7uhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3uhMhj4uubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhj3uhMhjuubj)}(hX``sqi_max`` Maximum supported Signal Quality Indicator (SQI) level reported by the PHY. h](j)}(h ``sqi_max``h]j)}(hjWuh]hsqi_max}(hjYuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjQuubj)}(hhh]jX)}(hKMaximum supported Signal Quality Indicator (SQI) level reported by the PHY.h]hKMaximum supported Signal Quality Indicator (SQI) level reported by the PHY.}(hjpuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjmuubah}(h]h ]h"]h$]h&]uh1jhjQuubeh}(h]h ]h"]h$]h&]uh1jhjluhMhjuubj)}(hXv``sqiplus_bits`` Bits for SQI+ levels supported by the PHY. 0 - SQI+ is not supported 3 - SQI+ is supported, using 3 bits (8 levels) 4 - SQI+ is supported, using 4 bits (16 levels) 5 - SQI+ is supported, using 5 bits (32 levels) 6 - SQI+ is supported, using 6 bits (64 levels) 7 - SQI+ is supported, using 7 bits (128 levels) 8 - SQI+ is supported, using 8 bits (256 levels)h](j)}(h``sqiplus_bits``h]j)}(hjuh]h sqiplus_bits}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM#hjuubj)}(hhh]jX)}(hXeBits for SQI+ levels supported by the PHY. 0 - SQI+ is not supported 3 - SQI+ is supported, using 3 bits (8 levels) 4 - SQI+ is supported, using 4 bits (16 levels) 5 - SQI+ is supported, using 5 bits (32 levels) 6 - SQI+ is supported, using 6 bits (64 levels) 7 - SQI+ is supported, using 7 bits (128 levels) 8 - SQI+ is supported, using 8 bits (256 levels)h]hXeBits for SQI+ levels supported by the PHY. 0 - SQI+ is not supported 3 - SQI+ is supported, using 3 bits (8 levels) 4 - SQI+ is supported, using 4 bits (16 levels) 5 - SQI+ is supported, using 5 bits (32 levels) 6 - SQI+ is supported, using 6 bits (64 levels) 7 - SQI+ is supported, using 7 bits (128 levels) 8 - SQI+ is supported, using 8 bits (256 levels)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhM#hjuubeh}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM'hjnhhubjX)}(hThis structure is used by the OATC14 10Base-T1S PHY driver to store the SQI and SQI+ capability information retrieved from the PHY.h]hThis structure is used by the OATC14 10Base-T1S PHY driver to store the SQI and SQI+ capability information retrieved from the PHY.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM$hjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_device (C struct) c.phy_devicehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h phy_deviceh]h)}(hstruct phy_deviceh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM*ubj)}(h h]h }(hj vhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvhhhjvhM*ubj)}(h phy_deviceh]j%)}(hj vh]h phy_device}(hj2vhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.vubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjvhhhjvhM*ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj vhhhjvhM*ubah}(h]jvah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjvhM*hjvhhubjS)}(hhh]jX)}(hAn instance of a PHYh]hAn instance of a PHY}(hjTvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM/hjQvhhubah}(h]h ]h"]h$]h&]uh1jRhjvhhhjvhM*ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjlvjxjlvjyjzj{uh1hhhhjnhNhNubj})}(hXi **Definition**:: struct phy_device { struct mdio_device mdio; const struct phy_driver *drv; struct device_link *devlink; u32 phyindex; u32 phy_id; struct phy_c45_device_ids c45_ids; unsigned is_c45:1; unsigned is_internal:1; unsigned is_pseudo_fixed_link:1; unsigned is_gigabit_capable:1; unsigned has_fixups:1; unsigned suspended:1; unsigned suspended_by_mdio_bus:1; unsigned sysfs_links:1; unsigned loopback_enabled:1; unsigned downshifted_rate:1; unsigned is_on_sfp_module:1; unsigned mac_managed_pm:1; unsigned wol_enabled:1; unsigned is_genphy_driven:1; unsigned autoneg:1; unsigned link:1; unsigned autoneg_complete:1; bool pause:1; bool asym_pause:1; unsigned interrupts:1; unsigned irq_suspended:1; unsigned irq_rerun:1; unsigned default_timestamp:1; int rate_matching; enum phy_state state; u32 dev_flags; phy_interface_t interface; unsigned long possible_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; int speed; int duplex; int port; u8 master_slave_get; u8 master_slave_set; u8 master_slave_state; unsigned long supported[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long adv_old[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long supported_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long eee_disabled_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool enable_tx_lpi; bool eee_active; struct eee_config eee_cfg; unsigned long host_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; #ifdef CONFIG_LED_TRIGGER_PHY; struct phy_led_trigger *phy_led_triggers; unsigned int phy_num_led_triggers; struct phy_led_trigger *last_triggered; struct phy_led_trigger *led_link_trigger; #endif; struct list_head leds; int irq; void *priv; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared; #endif; struct sk_buff *skb; void *ehdr; struct nlattr *nest; struct delayed_work state_queue; struct mutex lock; bool sfp_bus_attached; struct sfp_bus *sfp_bus; struct phylink *phylink; struct net_device *attached_dev; struct mii_timestamper *mii_ts; struct pse_control *psec; struct list_head ports; int n_ports; int max_n_ports; u8 mdix; u8 mdix_ctrl; int pma_extable; unsigned int link_down_events; void (*phy_link_change)(struct phy_device *phydev, bool up); void (*adjust_link)(struct net_device *dev); #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; struct phy_oatc14_sqi_capability oatc14_sqi_capability; }; **Members** ``mdio`` MDIO bus this PHY is on ``drv`` Pointer to the driver for this PHY instance ``devlink`` Create a link between phy dev and mac dev, if the external phy used by current mac interface is managed by another mac interface. ``phyindex`` Unique id across the phy's parent tree of phys to address the PHY from userspace, similar to ifindex. A zero index means the PHY wasn't assigned an id yet. ``phy_id`` UID for this device found during discovery ``c45_ids`` 802.3-c45 Device Identifiers if is_c45. ``is_c45`` Set to true if this PHY uses clause 45 addressing. ``is_internal`` Set to true if this PHY is internal to a MAC. ``is_pseudo_fixed_link`` Set to true if this PHY is an Ethernet switch, etc. ``is_gigabit_capable`` Set to true if PHY supports 1000Mbps ``has_fixups`` Set to true if this PHY has fixups/quirks. ``suspended`` Set to true if this PHY has been suspended successfully. ``suspended_by_mdio_bus`` Set to true if this PHY was suspended by MDIO bus. ``sysfs_links`` Internal boolean tracking sysfs symbolic links setup/removal. ``loopback_enabled`` Set true if this PHY has been loopbacked successfully. ``downshifted_rate`` Set true if link speed has been downshifted. ``is_on_sfp_module`` Set true if PHY is located on an SFP module. ``mac_managed_pm`` Set true if MAC driver takes of suspending/resuming PHY ``wol_enabled`` Set to true if the PHY or the attached MAC have Wake-on-LAN enabled. ``is_genphy_driven`` PHY is driven by one of the generic PHY drivers ``autoneg`` Flag autoneg being used ``link`` Current link state ``autoneg_complete`` Flag auto negotiation of the link has completed ``pause`` Current pause ``asym_pause`` Current asymmetric pause ``interrupts`` Flag interrupts have been enabled ``irq_suspended`` Flag indicating PHY is suspended and therefore interrupt handling shall be postponed until PHY has resumed ``irq_rerun`` Flag indicating interrupts occurred while PHY was suspended, requiring a rerun of the interrupt handler after resume ``default_timestamp`` Flag indicating whether we are using the phy timestamp as the default one ``rate_matching`` Current rate matching mode ``state`` State of the PHY for management purposes ``dev_flags`` Device-specific flags used by the PHY driver. ``interface`` enum phy_interface_t value ``possible_interfaces`` bitmap if interface modes that the attached PHY will switch between depending on media speed. ``speed`` Current link speed ``duplex`` Current duplex ``port`` Current port ``master_slave_get`` Current master/slave advertisement ``master_slave_set`` User requested master/slave configuration ``master_slave_state`` Current master/slave configuration ``supported`` Combined MAC/PHY supported linkmodes ``advertising`` Currently advertised linkmodes ``lp_advertising`` Current link partner advertised linkmodes ``adv_old`` Saved advertised while power saving for WoL ``supported_eee`` supported PHY EEE linkmodes ``advertising_eee`` Currently advertised EEE linkmodes ``eee_disabled_modes`` Energy efficient ethernet modes not to be advertised ``enable_tx_lpi`` When True, MAC should transmit LPI to PHY ``eee_active`` phylib private state, indicating that EEE has been negotiated ``eee_cfg`` User configuration of EEE ``host_interfaces`` PHY interface modes supported by host ``phy_led_triggers`` Array of LED triggers ``phy_num_led_triggers`` Number of triggers in **phy_led_triggers** ``last_triggered`` last LED trigger for link speed ``led_link_trigger`` LED trigger for link up/down ``leds`` list of PHY LED structures ``irq`` IRQ number of the PHY's interrupt (-1 if none) ``priv`` Pointer to driver private data ``shared`` Pointer to private data shared by phys in one package ``skb`` Netlink message for cable diagnostics ``ehdr`` nNtlink header for cable diagnostics ``nest`` Netlink nest used for cable diagnostics ``state_queue`` Work queue for state machine ``lock`` Mutex for serialization access to PHY ``sfp_bus_attached`` Flag indicating whether the SFP bus has been attached ``sfp_bus`` SFP bus attached to this PHY's fiber port ``phylink`` Pointer to phylink instance for this PHY ``attached_dev`` The attached enet driver's device instance ptr ``mii_ts`` Pointer to time stamper callbacks ``psec`` Pointer to Power Sourcing Equipment control struct ``ports`` List of PHY ports structures ``n_ports`` Number of ports currently attached to the PHY ``max_n_ports`` Max number of ports this PHY can expose ``mdix`` Current crossover ``mdix_ctrl`` User setting of crossover ``pma_extable`` Cached value of PMA/PMD Extended Abilities Register ``link_down_events`` Number of times link was lost ``phy_link_change`` Callback for phylink for notification of link change ``adjust_link`` Callback for the enet controller to respond to changes: in the link state. ``macsec_ops`` MACsec offloading ops. ``oatc14_sqi_capability`` SQI capability information for OATC14 10Base-T1S PHYh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjxvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtvubh:}(hjtvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM3hjpvubjU)}(hX{ struct phy_device { struct mdio_device mdio; const struct phy_driver *drv; struct device_link *devlink; u32 phyindex; u32 phy_id; struct phy_c45_device_ids c45_ids; unsigned is_c45:1; unsigned is_internal:1; unsigned is_pseudo_fixed_link:1; unsigned is_gigabit_capable:1; unsigned has_fixups:1; unsigned suspended:1; unsigned suspended_by_mdio_bus:1; unsigned sysfs_links:1; unsigned loopback_enabled:1; unsigned downshifted_rate:1; unsigned is_on_sfp_module:1; unsigned mac_managed_pm:1; unsigned wol_enabled:1; unsigned is_genphy_driven:1; unsigned autoneg:1; unsigned link:1; unsigned autoneg_complete:1; bool pause:1; bool asym_pause:1; unsigned interrupts:1; unsigned irq_suspended:1; unsigned irq_rerun:1; unsigned default_timestamp:1; int rate_matching; enum phy_state state; u32 dev_flags; phy_interface_t interface; unsigned long possible_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; int speed; int duplex; int port; u8 master_slave_get; u8 master_slave_set; u8 master_slave_state; unsigned long supported[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long adv_old[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long supported_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long eee_disabled_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool enable_tx_lpi; bool eee_active; struct eee_config eee_cfg; unsigned long host_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; #ifdef CONFIG_LED_TRIGGER_PHY; struct phy_led_trigger *phy_led_triggers; unsigned int phy_num_led_triggers; struct phy_led_trigger *last_triggered; struct phy_led_trigger *led_link_trigger; #endif; struct list_head leds; int irq; void *priv; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared; #endif; struct sk_buff *skb; void *ehdr; struct nlattr *nest; struct delayed_work state_queue; struct mutex lock; bool sfp_bus_attached; struct sfp_bus *sfp_bus; struct phylink *phylink; struct net_device *attached_dev; struct mii_timestamper *mii_ts; struct pse_control *psec; struct list_head ports; int n_ports; int max_n_ports; u8 mdix; u8 mdix_ctrl; int pma_extable; unsigned int link_down_events; void (*phy_link_change)(struct phy_device *phydev, bool up); void (*adjust_link)(struct net_device *dev); #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; struct phy_oatc14_sqi_capability oatc14_sqi_capability; };h]hX{ struct phy_device { struct mdio_device mdio; const struct phy_driver *drv; struct device_link *devlink; u32 phyindex; u32 phy_id; struct phy_c45_device_ids c45_ids; unsigned is_c45:1; unsigned is_internal:1; unsigned is_pseudo_fixed_link:1; unsigned is_gigabit_capable:1; unsigned has_fixups:1; unsigned suspended:1; unsigned suspended_by_mdio_bus:1; unsigned sysfs_links:1; unsigned loopback_enabled:1; unsigned downshifted_rate:1; unsigned is_on_sfp_module:1; unsigned mac_managed_pm:1; unsigned wol_enabled:1; unsigned is_genphy_driven:1; unsigned autoneg:1; unsigned link:1; unsigned autoneg_complete:1; bool pause:1; bool asym_pause:1; unsigned interrupts:1; unsigned irq_suspended:1; unsigned irq_rerun:1; unsigned default_timestamp:1; int rate_matching; enum phy_state state; u32 dev_flags; phy_interface_t interface; unsigned long possible_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; int speed; int duplex; int port; u8 master_slave_get; u8 master_slave_set; u8 master_slave_state; unsigned long supported[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long adv_old[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long supported_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long advertising_eee[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long eee_disabled_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool enable_tx_lpi; bool eee_active; struct eee_config eee_cfg; unsigned long host_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; #ifdef CONFIG_LED_TRIGGER_PHY; struct phy_led_trigger *phy_led_triggers; unsigned int phy_num_led_triggers; struct phy_led_trigger *last_triggered; struct phy_led_trigger *led_link_trigger; #endif; struct list_head leds; int irq; void *priv; #if IS_ENABLED(CONFIG_PHY_PACKAGE); struct phy_package_shared *shared; #endif; struct sk_buff *skb; void *ehdr; struct nlattr *nest; struct delayed_work state_queue; struct mutex lock; bool sfp_bus_attached; struct sfp_bus *sfp_bus; struct phylink *phylink; struct net_device *attached_dev; struct mii_timestamper *mii_ts; struct pse_control *psec; struct list_head ports; int n_ports; int max_n_ports; u8 mdix; u8 mdix_ctrl; int pma_extable; unsigned int link_down_events; void (*phy_link_change)(struct phy_device *phydev, bool up); void (*adjust_link)(struct net_device *dev); #if IS_ENABLED(CONFIG_MACSEC); const struct macsec_ops *macsec_ops; #endif; struct phy_oatc14_sqi_capability oatc14_sqi_capability; };}hjvsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM5hjpvubjX)}(h **Members**h]j)}(hjvh]hMembers}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpvubj)}(hhh](j)}(h!``mdio`` MDIO bus this PHY is on h](j)}(h``mdio``h]j)}(hjvh]hmdio}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM2hjvubj)}(hhh]jX)}(hMDIO bus this PHY is onh]hMDIO bus this PHY is on}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhM2hjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhM2hjvubj)}(h4``drv`` Pointer to the driver for this PHY instance h](j)}(h``drv``h]j)}(hjvh]hdrv}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM3hjvubj)}(hhh]jX)}(h+Pointer to the driver for this PHY instanceh]h+Pointer to the driver for this PHY instance}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhM3hjwubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjwhM3hjvubj)}(h``devlink`` Create a link between phy dev and mac dev, if the external phy used by current mac interface is managed by another mac interface. h](j)}(h ``devlink``h]j)}(hj3wh]hdevlink}(hj5whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1wubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM5hj-wubj)}(hhh]jX)}(hCreate a link between phy dev and mac dev, if the external phy used by current mac interface is managed by another mac interface.h]hCreate a link between phy dev and mac dev, if the external phy used by current mac interface is managed by another mac interface.}(hjLwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM4hjIwubah}(h]h ]h"]h$]h&]uh1jhj-wubeh}(h]h ]h"]h$]h&]uh1jhjHwhM5hjvubj)}(h``phyindex`` Unique id across the phy's parent tree of phys to address the PHY from userspace, similar to ifindex. A zero index means the PHY wasn't assigned an id yet. h](j)}(h ``phyindex``h]j)}(hjmwh]hphyindex}(hjowhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM8hjgwubj)}(hhh]jX)}(hUnique id across the phy's parent tree of phys to address the PHY from userspace, similar to ifindex. A zero index means the PHY wasn't assigned an id yet.h]hUnique id across the phy’s parent tree of phys to address the PHY from userspace, similar to ifindex. A zero index means the PHY wasn’t assigned an id yet.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM6hjwubah}(h]h ]h"]h$]h&]uh1jhjgwubeh}(h]h ]h"]h$]h&]uh1jhjwhM8hjvubj)}(h6``phy_id`` UID for this device found during discovery h](j)}(h ``phy_id``h]j)}(hjwh]hphy_id}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM9hjwubj)}(hhh]jX)}(h*UID for this device found during discoveryh]h*UID for this device found during discovery}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhM9hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM9hjvubj)}(h4``c45_ids`` 802.3-c45 Device Identifiers if is_c45. h](j)}(h ``c45_ids``h]j)}(hjwh]hc45_ids}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM:hjwubj)}(hhh]jX)}(h'802.3-c45 Device Identifiers if is_c45.h]h'802.3-c45 Device Identifiers if is_c45.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhM:hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM:hjvubj)}(h>``is_c45`` Set to true if this PHY uses clause 45 addressing. h](j)}(h ``is_c45``h]j)}(hjxh]his_c45}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM;hjxubj)}(hhh]jX)}(h2Set to true if this PHY uses clause 45 addressing.h]h2Set to true if this PHY uses clause 45 addressing.}(hj2xhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.xhM;hj/xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj.xhM;hjvubj)}(h>``is_internal`` Set to true if this PHY is internal to a MAC. h](j)}(h``is_internal``h]j)}(hjRxh]h is_internal}(hjTxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjLxubj)}(hhh]jX)}(h-Set to true if this PHY is internal to a MAC.h]h-Set to true if this PHY is internal to a MAC.}(hjkxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjgxhM<hjhxubah}(h]h ]h"]h$]h&]uh1jhjLxubeh}(h]h ]h"]h$]h&]uh1jhjgxhM<hjvubj)}(hM``is_pseudo_fixed_link`` Set to true if this PHY is an Ethernet switch, etc. h](j)}(h``is_pseudo_fixed_link``h]j)}(hjxh]his_pseudo_fixed_link}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM=hjxubj)}(hhh]jX)}(h3Set to true if this PHY is an Ethernet switch, etc.h]h3Set to true if this PHY is an Ethernet switch, etc.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM=hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM=hjvubj)}(h<``is_gigabit_capable`` Set to true if PHY supports 1000Mbps h](j)}(h``is_gigabit_capable``h]j)}(hjxh]his_gigabit_capable}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM>hjxubj)}(hhh]jX)}(h$Set to true if PHY supports 1000Mbpsh]h$Set to true if PHY supports 1000Mbps}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxhM>hjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhM>hjvubj)}(h:``has_fixups`` Set to true if this PHY has fixups/quirks. h](j)}(h``has_fixups``h]j)}(hjxh]h has_fixups}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM?hjxubj)}(hhh]jX)}(h*Set to true if this PHY has fixups/quirks.h]h*Set to true if this PHY has fixups/quirks.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhM?hjyubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjyhM?hjvubj)}(hG``suspended`` Set to true if this PHY has been suspended successfully. h](j)}(h ``suspended``h]j)}(hj6yh]h suspended}(hj8yhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4yubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM@hj0yubj)}(hhh]jX)}(h8Set to true if this PHY has been suspended successfully.h]h8Set to true if this PHY has been suspended successfully.}(hjOyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKyhM@hjLyubah}(h]h ]h"]h$]h&]uh1jhj0yubeh}(h]h ]h"]h$]h&]uh1jhjKyhM@hjvubj)}(hM``suspended_by_mdio_bus`` Set to true if this PHY was suspended by MDIO bus. h](j)}(h``suspended_by_mdio_bus``h]j)}(hjoyh]hsuspended_by_mdio_bus}(hjqyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmyubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMAhjiyubj)}(hhh]jX)}(h2Set to true if this PHY was suspended by MDIO bus.h]h2Set to true if this PHY was suspended by MDIO bus.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhMAhjyubah}(h]h ]h"]h$]h&]uh1jhjiyubeh}(h]h ]h"]h$]h&]uh1jhjyhMAhjvubj)}(hN``sysfs_links`` Internal boolean tracking sysfs symbolic links setup/removal. h](j)}(h``sysfs_links``h]j)}(hjyh]h sysfs_links}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMBhjyubj)}(hhh]jX)}(h=Internal boolean tracking sysfs symbolic links setup/removal.h]h=Internal boolean tracking sysfs symbolic links setup/removal.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhMBhjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMBhjvubj)}(hL``loopback_enabled`` Set true if this PHY has been loopbacked successfully. h](j)}(h``loopback_enabled``h]j)}(hjyh]hloopback_enabled}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMChjyubj)}(hhh]jX)}(h6Set true if this PHY has been loopbacked successfully.h]h6Set true if this PHY has been loopbacked successfully.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhMChjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjyhMChjvubj)}(hB``downshifted_rate`` Set true if link speed has been downshifted. h](j)}(h``downshifted_rate``h]j)}(hjzh]hdownshifted_rate}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMDhjzubj)}(hhh]jX)}(h,Set true if link speed has been downshifted.h]h,Set true if link speed has been downshifted.}(hj3zhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/zhMDhj0zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj/zhMDhjvubj)}(hB``is_on_sfp_module`` Set true if PHY is located on an SFP module. h](j)}(h``is_on_sfp_module``h]j)}(hjSzh]his_on_sfp_module}(hjUzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEhjMzubj)}(hhh]jX)}(h,Set true if PHY is located on an SFP module.h]h,Set true if PHY is located on an SFP module.}(hjlzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhzhMEhjizubah}(h]h ]h"]h$]h&]uh1jhjMzubeh}(h]h ]h"]h$]h&]uh1jhjhzhMEhjvubj)}(hK``mac_managed_pm`` Set true if MAC driver takes of suspending/resuming PHY h](j)}(h``mac_managed_pm``h]j)}(hjzh]hmac_managed_pm}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMFhjzubj)}(hhh]jX)}(h7Set true if MAC driver takes of suspending/resuming PHYh]h7Set true if MAC driver takes of suspending/resuming PHY}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMFhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMFhjvubj)}(hU``wol_enabled`` Set to true if the PHY or the attached MAC have Wake-on-LAN enabled. h](j)}(h``wol_enabled``h]j)}(hjzh]h wol_enabled}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMHhjzubj)}(hhh]jX)}(hDSet to true if the PHY or the attached MAC have Wake-on-LAN enabled.h]hDSet to true if the PHY or the attached MAC have Wake-on-LAN enabled.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMGhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMHhjvubj)}(hE``is_genphy_driven`` PHY is driven by one of the generic PHY drivers h](j)}(h``is_genphy_driven``h]j)}(hjzh]his_genphy_driven}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMIhjzubj)}(hhh]jX)}(h/PHY is driven by one of the generic PHY driversh]h/PHY is driven by one of the generic PHY drivers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMIhj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMIhjvubj)}(h$``autoneg`` Flag autoneg being used h](j)}(h ``autoneg``h]j)}(hj8{h]hautoneg}(hj:{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMlhj2{ubj)}(hhh]jX)}(hFlag autoneg being usedh]hFlag autoneg being used}(hjQ{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjM{hMlhjN{ubah}(h]h ]h"]h$]h&]uh1jhj2{ubeh}(h]h ]h"]h$]h&]uh1jhjM{hMlhjvubj)}(h``link`` Current link state h](j)}(h``link``h]j)}(hjq{h]hlink}(hjs{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMnhjk{ubj)}(hhh]jX)}(hCurrent link stateh]hCurrent link state}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMnhj{ubah}(h]h ]h"]h$]h&]uh1jhjk{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMnhjvubj)}(hE``autoneg_complete`` Flag auto negotiation of the link has completed h](j)}(h``autoneg_complete``h]j)}(hj{h]hautoneg_complete}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMohj{ubj)}(hhh]jX)}(h/Flag auto negotiation of the link has completedh]h/Flag auto negotiation of the link has completed}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMohj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMohjvubj)}(h``pause`` Current pause h](j)}(h ``pause``h]j)}(hj{h]hpause}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM_hj{ubj)}(hhh]jX)}(h Current pauseh]h Current pause}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hM_hj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hM_hjvubj)}(h(``asym_pause`` Current asymmetric pause h](j)}(h``asym_pause``h]j)}(hj|h]h asym_pause}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM`hj|ubj)}(hhh]jX)}(hCurrent asymmetric pauseh]hCurrent asymmetric pause}(hj5|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1|hM`hj2|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj1|hM`hjvubj)}(h1``interrupts`` Flag interrupts have been enabled h](j)}(h``interrupts``h]j)}(hjU|h]h interrupts}(hjW|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMshjO|ubj)}(hhh]jX)}(h!Flag interrupts have been enabledh]h!Flag interrupts have been enabled}(hjn|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjj|hMshjk|ubah}(h]h ]h"]h$]h&]uh1jhjO|ubeh}(h]h ]h"]h$]h&]uh1jhjj|hMshjvubj)}(h}``irq_suspended`` Flag indicating PHY is suspended and therefore interrupt handling shall be postponed until PHY has resumed h](j)}(h``irq_suspended``h]j)}(hj|h]h irq_suspended}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMuhj|ubj)}(hhh]jX)}(hjFlag indicating PHY is suspended and therefore interrupt handling shall be postponed until PHY has resumedh]hjFlag indicating PHY is suspended and therefore interrupt handling shall be postponed until PHY has resumed}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMthj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMuhjvubj)}(h``irq_rerun`` Flag indicating interrupts occurred while PHY was suspended, requiring a rerun of the interrupt handler after resume h](j)}(h ``irq_rerun``h]j)}(hj|h]h irq_rerun}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMwhj|ubj)}(hhh]jX)}(htFlag indicating interrupts occurred while PHY was suspended, requiring a rerun of the interrupt handler after resumeh]htFlag indicating interrupts occurred while PHY was suspended, requiring a rerun of the interrupt handler after resume}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMvhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|hMwhjvubj)}(h```default_timestamp`` Flag indicating whether we are using the phy timestamp as the default one h](j)}(h``default_timestamp``h]j)}(hj}h]hdefault_timestamp}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMyhj|ubj)}(hhh]jX)}(hIFlag indicating whether we are using the phy timestamp as the default oneh]hIFlag indicating whether we are using the phy timestamp as the default one}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMxhj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj}hMyhjvubj)}(h-``rate_matching`` Current rate matching mode h](j)}(h``rate_matching``h]j)}(hj<}h]h rate_matching}(hj>}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMmhj6}ubj)}(hhh]jX)}(hCurrent rate matching modeh]hCurrent rate matching mode}(hjU}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQ}hMmhjR}ubah}(h]h ]h"]h$]h&]uh1jhj6}ubeh}(h]h ]h"]h$]h&]uh1jhjQ}hMmhjvubj)}(h3``state`` State of the PHY for management purposes h](j)}(h ``state``h]j)}(hju}h]hstate}(hjw}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMJhjo}ubj)}(hhh]jX)}(h(State of the PHY for management purposesh]h(State of the PHY for management purposes}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMJhj}ubah}(h]h ]h"]h$]h&]uh1jhjo}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMJhjvubj)}(h<``dev_flags`` Device-specific flags used by the PHY driver. h](j)}(h ``dev_flags``h]j)}(hj}h]h dev_flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMKhj}ubj)}(hhh]jX)}(h-Device-specific flags used by the PHY driver.h]h-Device-specific flags used by the PHY driver.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMKhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMKhjvubj)}(h)``interface`` enum phy_interface_t value h](j)}(h ``interface``h]j)}(hj}h]h interface}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMzhj}ubj)}(hhh]jX)}(henum phy_interface_t valueh]henum phy_interface_t value}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMzhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMzhjvubj)}(hv``possible_interfaces`` bitmap if interface modes that the attached PHY will switch between depending on media speed. h](j)}(h``possible_interfaces``h]j)}(hj ~h]hpossible_interfaces}(hj"~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM|hj~ubj)}(hhh]jX)}(h]bitmap if interface modes that the attached PHY will switch between depending on media speed.h]h]bitmap if interface modes that the attached PHY will switch between depending on media speed.}(hj9~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM{hj6~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj5~hM|hjvubj)}(h``speed`` Current link speed h](j)}(h ``speed``h]j)}(hjZ~h]hspeed}(hj\~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\hjT~ubj)}(hhh]jX)}(hCurrent link speedh]hCurrent link speed}(hjs~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjo~hM\hjp~ubah}(h]h ]h"]h$]h&]uh1jhjT~ubeh}(h]h ]h"]h$]h&]uh1jhjo~hM\hjvubj)}(h``duplex`` Current duplex h](j)}(h ``duplex``h]j)}(hj~h]hduplex}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM]hj~ubj)}(hhh]jX)}(hCurrent duplexh]hCurrent duplex}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hM]hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM]hjvubj)}(h``port`` Current port h](j)}(h``port``h]j)}(hj~h]hport}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hj~ubj)}(hhh]jX)}(h Current porth]h Current port}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~hM^hj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hM^hjvubj)}(h8``master_slave_get`` Current master/slave advertisement h](j)}(h``master_slave_get``h]j)}(hjh]hmaster_slave_get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj~ubj)}(hhh]jX)}(h"Current master/slave advertisementh]h"Current master/slave advertisement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h?``master_slave_set`` User requested master/slave configuration h](j)}(h``master_slave_set``h]j)}(hj>h]hmaster_slave_set}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj8ubj)}(hhh]jX)}(h)User requested master/slave configurationh]h)User requested master/slave configuration}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjShMhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjvubj)}(h:``master_slave_state`` Current master/slave configuration h](j)}(h``master_slave_state``h]j)}(hjwh]hmaster_slave_state}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubj)}(hhh]jX)}(h"Current master/slave configurationh]h"Current master/slave configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h3``supported`` Combined MAC/PHY supported linkmodes h](j)}(h ``supported``h]j)}(hjh]h supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMahjubj)}(hhh]jX)}(h$Combined MAC/PHY supported linkmodesh]h$Combined MAC/PHY supported linkmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjvubj)}(h/``advertising`` Currently advertised linkmodes h](j)}(h``advertising``h]j)}(hjh]h advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMbhjubj)}(hhh]jX)}(hCurrently advertised linkmodesh]hCurrently advertised linkmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjvubj)}(h=``lp_advertising`` Current link partner advertised linkmodes h](j)}(h``lp_advertising``h]j)}(hj"h]hlp_advertising}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMihjubj)}(hhh]jX)}(h)Current link partner advertised linkmodesh]h)Current link partner advertised linkmodes}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMihj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMihjvubj)}(h8``adv_old`` Saved advertised while power saving for WoL h](j)}(h ``adv_old``h]j)}(hj[h]hadv_old}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMchjUubj)}(hhh]jX)}(h+Saved advertised while power saving for WoLh]h+Saved advertised while power saving for WoL}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMchjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMchjvubj)}(h.``supported_eee`` supported PHY EEE linkmodes h](j)}(h``supported_eee``h]j)}(hjh]h supported_eee}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMdhjubj)}(hhh]jX)}(hsupported PHY EEE linkmodesh]hsupported PHY EEE linkmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjvubj)}(h7``advertising_eee`` Currently advertised EEE linkmodes h](j)}(h``advertising_eee``h]j)}(hj̀h]hadvertising_eee}(hjπhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˀubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMehjǀubj)}(hhh]jX)}(h"Currently advertised EEE linkmodesh]h"Currently advertised EEE linkmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjǀubeh}(h]h ]h"]h$]h&]uh1jhjhMehjvubj)}(hL``eee_disabled_modes`` Energy efficient ethernet modes not to be advertised h](j)}(h``eee_disabled_modes``h]j)}(hjh]heee_disabled_modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMkhjubj)}(hhh]jX)}(h4Energy efficient ethernet modes not to be advertisedh]h4Energy efficient ethernet modes not to be advertised}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjvubj)}(h<``enable_tx_lpi`` When True, MAC should transmit LPI to PHY h](j)}(h``enable_tx_lpi``h]j)}(hj?h]h enable_tx_lpi}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMfhj9ubj)}(hhh]jX)}(h)When True, MAC should transmit LPI to PHYh]h)When True, MAC should transmit LPI to PHY}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMfhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMfhjvubj)}(hM``eee_active`` phylib private state, indicating that EEE has been negotiated h](j)}(h``eee_active``h]j)}(hjxh]h eee_active}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjrubj)}(hhh]jX)}(h=phylib private state, indicating that EEE has been negotiatedh]h=phylib private state, indicating that EEE has been negotiated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMghjvubj)}(h&``eee_cfg`` User configuration of EEE h](j)}(h ``eee_cfg``h]j)}(hjh]heee_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhhjubj)}(hhh]jX)}(hUser configuration of EEEh]hUser configuration of EEE}(hjʁhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjƁhMhhjǁubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƁhMhhjvubj)}(h:``host_interfaces`` PHY interface modes supported by host h](j)}(h``host_interfaces``h]j)}(hjh]hhost_interfaces}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMjhjubj)}(hhh]jX)}(h%PHY interface modes supported by hosth]h%PHY interface modes supported by host}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjvubj)}(h+``phy_led_triggers`` Array of LED triggers h](j)}(h``phy_led_triggers``h]j)}(hj#h]hphy_led_triggers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hArray of LED triggersh]hArray of LED triggers}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjvubj)}(hD``phy_num_led_triggers`` Number of triggers in **phy_led_triggers** h](j)}(h``phy_num_led_triggers``h]j)}(hj\h]hphy_num_led_triggers}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjVubj)}(hhh]jX)}(h*Number of triggers in **phy_led_triggers**h](hNumber of triggers in }(hjuhhhNhNubj)}(h**phy_led_triggers**h]hphy_led_triggers}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jWhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjvubj)}(h3``last_triggered`` last LED trigger for link speed h](j)}(h``last_triggered``h]j)}(hjh]hlast_triggered}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hlast LED trigger for link speedh]hlast LED trigger for link speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h2``led_link_trigger`` LED trigger for link up/down h](j)}(h``led_link_trigger``h]j)}(hj܂h]hled_link_trigger}(hjނhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڂubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjւubj)}(hhh]jX)}(hLED trigger for link up/downh]hLED trigger for link up/down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjւubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h$``leds`` list of PHY LED structures h](j)}(h``leds``h]j)}(hjh]hleds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hlist of PHY LED structuresh]hlist of PHY LED structures}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjvubj)}(h7``irq`` IRQ number of the PHY's interrupt (-1 if none) h](j)}(h``irq``h]j)}(hjNh]hirq}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRhjHubj)}(hhh]jX)}(h.IRQ number of the PHY's interrupt (-1 if none)h]h0IRQ number of the PHY’s interrupt (-1 if none)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchMRhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMRhjvubj)}(h(``priv`` Pointer to driver private data h](j)}(h``priv``h]j)}(hjh]hpriv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hPointer to driver private datah]hPointer to driver private data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(hA``shared`` Pointer to private data shared by phys in one package h](j)}(h ``shared``h]j)}(hjh]hshared}(hjƒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h5Pointer to private data shared by phys in one packageh]h5Pointer to private data shared by phys in one package}(hjكhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjՃhMhjփubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՃhMhjvubj)}(h.``skb`` Netlink message for cable diagnostics h](j)}(h``skb``h]j)}(hjh]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM}hjubj)}(hhh]jX)}(h%Netlink message for cable diagnosticsh]h%Netlink message for cable diagnostics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjvubj)}(h.``ehdr`` nNtlink header for cable diagnostics h](j)}(h``ehdr``h]j)}(hj2h]hehdr}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj,ubj)}(hhh]jX)}(h$nNtlink header for cable diagnosticsh]h$nNtlink header for cable diagnostics}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjvubj)}(h1``nest`` Netlink nest used for cable diagnostics h](j)}(h``nest``h]j)}(hjkh]hnest}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM~hjeubj)}(hhh]jX)}(h'Netlink nest used for cable diagnosticsh]h'Netlink nest used for cable diagnostics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjvubj)}(h-``state_queue`` Work queue for state machine h](j)}(h``state_queue``h]j)}(hjh]h state_queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hWork queue for state machineh]hWork queue for state machine}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h/``lock`` Mutex for serialization access to PHY h](j)}(h``lock``h]j)}(hj݄h]hlock}(hj߄hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۄubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjׄubj)}(hhh]jX)}(h%Mutex for serialization access to PHYh]h%Mutex for serialization access to PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjׄubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(hK``sfp_bus_attached`` Flag indicating whether the SFP bus has been attached h](j)}(h``sfp_bus_attached``h]j)}(hjh]hsfp_bus_attached}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjubj)}(hhh]jX)}(h5Flag indicating whether the SFP bus has been attachedh]h5Flag indicating whether the SFP bus has been attached}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMThj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMThjvubj)}(h6``sfp_bus`` SFP bus attached to this PHY's fiber port h](j)}(h ``sfp_bus``h]j)}(hjOh]hsfp_bus}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhjIubj)}(hhh]jX)}(h)SFP bus attached to this PHY's fiber porth]h+SFP bus attached to this PHY’s fiber port}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMUhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMUhjvubj)}(h5``phylink`` Pointer to phylink instance for this PHY h](j)}(h ``phylink``h]j)}(hjh]hphylink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMShjubj)}(hhh]jX)}(h(Pointer to phylink instance for this PHYh]h(Pointer to phylink instance for this PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjvubj)}(h@``attached_dev`` The attached enet driver's device instance ptr h](j)}(h``attached_dev``h]j)}(hjh]h attached_dev}(hjÅhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhjubj)}(hhh]jX)}(h.The attached enet driver's device instance ptrh]h0The attached enet driver’s device instance ptr}(hjڅhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjօhMVhjׅubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjօhMVhjvubj)}(h-``mii_ts`` Pointer to time stamper callbacks h](j)}(h ``mii_ts``h]j)}(hjh]hmii_ts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h!Pointer to time stamper callbacksh]h!Pointer to time stamper callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h<``psec`` Pointer to Power Sourcing Equipment control struct h](j)}(h``psec``h]j)}(hj3h]hpsec}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj-ubj)}(hhh]jX)}(h2Pointer to Power Sourcing Equipment control structh]h2Pointer to Power Sourcing Equipment control struct}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHhMhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjvubj)}(h'``ports`` List of PHY ports structures h](j)}(h ``ports``h]j)}(hjlh]hports}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjfubj)}(hhh]jX)}(hList of PHY ports structuresh]hList of PHY ports structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h:``n_ports`` Number of ports currently attached to the PHY h](j)}(h ``n_ports``h]j)}(hjh]hn_ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h-Number of ports currently attached to the PHYh]h-Number of ports currently attached to the PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h8``max_n_ports`` Max number of ports this PHY can expose h](j)}(h``max_n_ports``h]j)}(hjކh]h max_n_ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj܆ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj؆ubj)}(hhh]jX)}(h'Max number of ports this PHY can exposeh]h'Max number of ports this PHY can expose}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj؆ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubj)}(h``mdix`` Current crossover h](j)}(h``mdix``h]j)}(hjh]hmdix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMphjubj)}(hhh]jX)}(hCurrent crossoverh]hCurrent crossover}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,hMphj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMphjvubj)}(h(``mdix_ctrl`` User setting of crossover h](j)}(h ``mdix_ctrl``h]j)}(hjPh]h mdix_ctrl}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMqhjJubj)}(hhh]jX)}(hUser setting of crossoverh]hUser setting of crossover}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMqhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMqhjvubj)}(hD``pma_extable`` Cached value of PMA/PMD Extended Abilities Register h](j)}(h``pma_extable``h]j)}(hjh]h pma_extable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMrhjubj)}(hhh]jX)}(h3Cached value of PMA/PMD Extended Abilities Registerh]h3Cached value of PMA/PMD Extended Abilities Register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMrhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMrhjvubj)}(h3``link_down_events`` Number of times link was lost h](j)}(h``link_down_events``h]j)}(hj‡h]hlink_down_events}(hjćhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hNumber of times link was losth]hNumber of times link was lost}(hjۇhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjׇhMhj؇ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjׇhMhjvubj)}(hI``phy_link_change`` Callback for phylink for notification of link change h](j)}(h``phy_link_change``h]j)}(hjh]hphy_link_change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMYhjubj)}(hhh]jX)}(h4Callback for phylink for notification of link changeh]h4Callback for phylink for notification of link change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjvubj)}(h[``adjust_link`` Callback for the enet controller to respond to changes: in the link state. h](j)}(h``adjust_link``h]j)}(hj4h]h adjust_link}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMXhj.ubj)}(hhh]jX)}(hJCallback for the enet controller to respond to changes: in the link state.h]hJCallback for the enet controller to respond to changes: in the link state.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMWhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMXhjvubj)}(h&``macsec_ops`` MACsec offloading ops. h](j)}(h``macsec_ops``h]j)}(hjnh]h macsec_ops}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMZhjhubj)}(hhh]jX)}(hMACsec offloading ops.h]hMACsec offloading ops.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjvubj)}(hN``oatc14_sqi_capability`` SQI capability information for OATC14 10Base-T1S PHYh](j)}(h``oatc14_sqi_capability``h]j)}(hjh]hoatc14_sqi_capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h4SQI capability information for OATC14 10Base-T1S PHYh]h4SQI capability information for OATC14 10Base-T1S PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjpvubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubj )}(h- Bits [15:0] are free to use by the PHY driver to communicate driver specific behavior. - Bits [23:16] are currently reserved for future use. - Bits [31:24] are reserved for defining generic PHY driver behavior. h]j4H)}(hhh](j9H)}(hVBits [15:0] are free to use by the PHY driver to communicate driver specific behavior.h]jX)}(hVBits [15:0] are free to use by the PHY driver to communicate driver specific behavior.h]hVBits [15:0] are free to use by the PHY driver to communicate driver specific behavior.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMKhjubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(h3Bits [23:16] are currently reserved for future use.h]jX)}(hj"h]h3Bits [23:16] are currently reserved for future use.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMMhj ubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hDBits [31:24] are reserved for defining generic PHY driver behavior. h]jX)}(hCBits [31:24] are reserved for defining generic PHY driver behavior.h]hCBits [31:24] are reserved for defining generic PHY driver behavior.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMNhj8ubah}(h]h ]h"]h$]h&]uh1j8Hhjubeh}(h]h ]h"]h$]h&]jIjw-uh1j3HhjhMKhjubah}(h]h ]h"]h$]h&]uh1j hjhMKhjnhhubjX)}(hinterrupts currently only supports enabled or disabled, but could be changed in the future to support enabling and disabling specific interruptsh]hinterrupts currently only supports enabled or disabled, but could be changed in the future to support enabling and disabling specific interrupts}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMQhjnhhubjX)}(hqContains some infrastructure for polling and interrupt handling, as well as handling shifts in PHY hardware stateh]hqContains some infrastructure for polling and interrupt handling, as well as handling shifts in PHY hardware state}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_tdr_config (C struct)c.phy_tdr_confighNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_tdr_configh]h)}(hstruct phy_tdr_configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM[ubj)}(hphy_tdr_configh]j%)}(hjh]hphy_tdr_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM[ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM[ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM[hjhhubjS)}(hhh]jX)}(hConfiguration of a TDR raw testh]hConfiguration of a TDR raw test}(hj։hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM7hjӉhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM[ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXM**Definition**:: struct phy_tdr_config { u32 first; u32 last; u32 step; s8 pair; }; **Members** ``first`` Distance for first data collection point ``last`` Distance for last data collection point ``step`` Step between data collection points ``pair`` Bitmap of cable pairs to collect data forh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM;hjubjU)}(hRstruct phy_tdr_config { u32 first; u32 last; u32 step; s8 pair; };h]hRstruct phy_tdr_config { u32 first; u32 last; u32 step; s8 pair; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM=hjubjX)}(h **Members**h]j)}(hj$h]hMembers}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMDhjubj)}(hhh](j)}(h3``first`` Distance for first data collection point h](j)}(h ``first``h]j)}(hjCh]hfirst}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM:hj=ubj)}(hhh]jX)}(h(Distance for first data collection pointh]h(Distance for first data collection point}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhM:hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM:hj:ubj)}(h1``last`` Distance for last data collection point h](j)}(h``last``h]j)}(hj|h]hlast}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM;hjvubj)}(hhh]jX)}(h'Distance for last data collection pointh]h'Distance for last data collection point}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM;hj:ubj)}(h-``step`` Step between data collection points h](j)}(h``step``h]j)}(hjh]hstep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjubj)}(hhh]jX)}(h#Step between data collection pointsh]h#Step between data collection points}(hjΊhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʊhM<hjˊubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʊhM<hj:ubj)}(h2``pair`` Bitmap of cable pairs to collect data forh](j)}(h``pair``h]j)}(hjh]hpair}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjubj)}(hhh]jX)}(h)Bitmap of cable pairs to collect data forh]h)Bitmap of cable pairs to collect data for}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hj:ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM@hjnhhubjX)}(hA structure containing possible configuration parameters for a TDR cable test. The driver does not need to implement all the parameters, but should report what is actually used. All distances are in centimeters.h]hA structure containing possible configuration parameters for a TDR cable test. The driver does not need to implement all the parameters, but should report what is actually used. All distances are in centimeters.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM=hjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hlink_inband_signalling (C enum)c.link_inband_signallinghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hlink_inband_signallingh]h)}(henum link_inband_signallingh](h)}(hhh]henum}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkhhhj|hMEubj)}(hlink_inband_signallingh]j%)}(hjih]hlink_inband_signalling}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjkhhhj|hMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjghhhj|hMEubah}(h]jbah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj|hMEhjdhhubjS)}(hhh]jX)}(h+in-band signalling modes that are supportedh]h+in-band signalling modes that are supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMLhjhhubah}(h]h ]h"]h$]h&]uh1jRhjdhhhj|hMEubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjɋjxjɋjyjzj{uh1hhhhjnhNhNubj})}(h**Constants** ``LINK_INBAND_DISABLE`` in-band signalling can be disabled ``LINK_INBAND_ENABLE`` in-band signalling can be enabled without bypass ``LINK_INBAND_BYPASS`` in-band signalling can be enabled with bypassh](jX)}(h **Constants**h]j)}(hjӋh]h Constants}(hjՋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjыubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMPhj͋ubj)}(hhh](j)}(h;``LINK_INBAND_DISABLE`` in-band signalling can be disabled h](j)}(h``LINK_INBAND_DISABLE``h]j)}(hjh]hLINK_INBAND_DISABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMShjubj)}(hhh]jX)}(h"in-band signalling can be disabledh]h"in-band signalling can be disabled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMShjubj)}(hH``LINK_INBAND_ENABLE`` in-band signalling can be enabled without bypass h](j)}(h``LINK_INBAND_ENABLE``h]j)}(hj+h]hLINK_INBAND_ENABLE}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhj%ubj)}(hhh]jX)}(h0in-band signalling can be enabled without bypassh]h0in-band signalling can be enabled without bypass}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMVhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMVhjubj)}(hD``LINK_INBAND_BYPASS`` in-band signalling can be enabled with bypassh](j)}(h``LINK_INBAND_BYPASS``h]j)}(hjdh]hLINK_INBAND_BYPASS}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMXhj^ubj)}(hhh]jX)}(h-in-band signalling can be enabled with bypassh]h-in-band signalling can be enabled with bypass}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMYhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMXhjubeh}(h]h ]h"]h$]h&]uh1jhj͋ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM[hjnhhubjX)}(hThe possible and required bits can only be used if the valid bit is set. If possible is clear, that means inband signalling can not be used. Required is only valid when possible is set, and means that inband signalling must be used.h]hThe possible and required bits can only be used if the valid bit is set. If possible is clear, that means inband signalling can not be used. Required is only valid when possible is set, and means that inband signalling must be used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMQhjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_plca_cfg (C struct)c.phy_plca_cfghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h phy_plca_cfgh]h)}(hstruct phy_plca_cfgh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMYubj)}(h phy_plca_cfgh]j%)}(hjߌh]h phy_plca_cfg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMYubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj݌hhhjhMYubah}(h]j،ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMYhjڌhhubjS)}(hhh]jX)}(hWConfiguration of the PLCA (Physical Layer Collision Avoidance) Reconciliation Sublayer.h]hWConfiguration of the PLCA (Physical Layer Collision Avoidance) Reconciliation Sublayer.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hj$hhubah}(h]h ]h"]h$]h&]uh1jRhjڌhhhjhMYubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj?jxj?jyjzj{uh1hhhhjnhNhNubj})}(hX**Definition**:: struct phy_plca_cfg { int version; int enabled; int node_id; int node_cnt; int to_tmr; int burst_cnt; int burst_tmr; }; **Members** ``version`` read-only PLCA register map version. -1 = not available. Ignored when setting the configuration. Format is the same as reported by the PLCA IDVER register (31.CA00). -1 = not available. ``enabled`` PLCA configured mode (enabled/disabled). -1 = not available / don't set. 0 = disabled, anything else = enabled. ``node_id`` the PLCA local node identifier. -1 = not available / don't set. Allowed values [0 .. 254]. 255 = node disabled. ``node_cnt`` the PLCA node count (maximum number of nodes having a TO). Only meaningful for the coordinator (node_id = 0). -1 = not available / don't set. Allowed values [1 .. 255]. ``to_tmr`` The value of the PLCA to_timer in bit-times, which determines the PLCA transmit opportunity window opening. See IEEE802.3 Clause 148 for more details. The to_timer shall be set equal over all nodes. -1 = not available / don't set. Allowed values [0 .. 255]. ``burst_cnt`` controls how many additional frames a node is allowed to send in single transmit opportunity (TO). The default value of 0 means that the node is allowed exactly one frame per TO. A value of 1 allows two frames per TO, and so on. -1 = not available / don't set. Allowed values [0 .. 255]. ``burst_tmr`` controls how many bit times to wait for the MAC to send a new frame before interrupting the burst. This value should be set to a value greater than the MAC inter-packet gap (which is typically 96 bits). -1 = not available / don't set. Allowed values [0 .. 255].h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh:}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMbhjCubjU)}(hstruct phy_plca_cfg { int version; int enabled; int node_id; int node_cnt; int to_tmr; int burst_cnt; int burst_tmr; };h]hstruct phy_plca_cfg { int version; int enabled; int node_id; int node_cnt; int to_tmr; int burst_cnt; int burst_tmr; };}hjdsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMdhjCubjX)}(h **Members**h]j)}(hjuh]hMembers}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMnhjCubj)}(hhh](j)}(h``version`` read-only PLCA register map version. -1 = not available. Ignored when setting the configuration. Format is the same as reported by the PLCA IDVER register (31.CA00). -1 = not available. h](j)}(h ``version``h]j)}(hjh]hversion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMdhjubj)}(hhh]jX)}(hread-only PLCA register map version. -1 = not available. Ignored when setting the configuration. Format is the same as reported by the PLCA IDVER register (31.CA00). -1 = not available.h]hread-only PLCA register map version. -1 = not available. Ignored when setting the configuration. Format is the same as reported by the PLCA IDVER register (31.CA00). -1 = not available.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h|``enabled`` PLCA configured mode (enabled/disabled). -1 = not available / don't set. 0 = disabled, anything else = enabled. h](j)}(h ``enabled``h]j)}(hj΍h]henabled}(hjЍhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̍ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMfhjȍubj)}(hhh]jX)}(hoPLCA configured mode (enabled/disabled). -1 = not available / don't set. 0 = disabled, anything else = enabled.h]hqPLCA configured mode (enabled/disabled). -1 = not available / don’t set. 0 = disabled, anything else = enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMehjubah}(h]h ]h"]h$]h&]uh1jhjȍubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(h|``node_id`` the PLCA local node identifier. -1 = not available / don't set. Allowed values [0 .. 254]. 255 = node disabled. h](j)}(h ``node_id``h]j)}(hjh]hnode_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhhjubj)}(hhh]jX)}(hothe PLCA local node identifier. -1 = not available / don't set. Allowed values [0 .. 254]. 255 = node disabled.h]hqthe PLCA local node identifier. -1 = not available / don’t set. Allowed values [0 .. 254]. 255 = node disabled.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(h``node_cnt`` the PLCA node count (maximum number of nodes having a TO). Only meaningful for the coordinator (node_id = 0). -1 = not available / don't set. Allowed values [1 .. 255]. h](j)}(h ``node_cnt``h]j)}(hjBh]hnode_cnt}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMkhj<ubj)}(hhh]jX)}(hthe PLCA node count (maximum number of nodes having a TO). Only meaningful for the coordinator (node_id = 0). -1 = not available / don't set. Allowed values [1 .. 255].h]hthe PLCA node count (maximum number of nodes having a TO). Only meaningful for the coordinator (node_id = 0). -1 = not available / don’t set. Allowed values [1 .. 255].}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMihjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMkhjubj)}(hX ``to_tmr`` The value of the PLCA to_timer in bit-times, which determines the PLCA transmit opportunity window opening. See IEEE802.3 Clause 148 for more details. The to_timer shall be set equal over all nodes. -1 = not available / don't set. Allowed values [0 .. 255]. h](j)}(h ``to_tmr``h]j)}(hj|h]hto_tmr}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMohjvubj)}(hhh]jX)}(hXThe value of the PLCA to_timer in bit-times, which determines the PLCA transmit opportunity window opening. See IEEE802.3 Clause 148 for more details. The to_timer shall be set equal over all nodes. -1 = not available / don't set. Allowed values [0 .. 255].h]hXThe value of the PLCA to_timer in bit-times, which determines the PLCA transmit opportunity window opening. See IEEE802.3 Clause 148 for more details. The to_timer shall be set equal over all nodes. -1 = not available / don’t set. Allowed values [0 .. 255].}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMlhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMohjubj)}(hX.``burst_cnt`` controls how many additional frames a node is allowed to send in single transmit opportunity (TO). The default value of 0 means that the node is allowed exactly one frame per TO. A value of 1 allows two frames per TO, and so on. -1 = not available / don't set. Allowed values [0 .. 255]. h](j)}(h ``burst_cnt``h]j)}(hjh]h burst_cnt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMthjubj)}(hhh]jX)}(hXcontrols how many additional frames a node is allowed to send in single transmit opportunity (TO). The default value of 0 means that the node is allowed exactly one frame per TO. A value of 1 allows two frames per TO, and so on. -1 = not available / don't set. Allowed values [0 .. 255].h]hX!controls how many additional frames a node is allowed to send in single transmit opportunity (TO). The default value of 0 means that the node is allowed exactly one frame per TO. A value of 1 allows two frames per TO, and so on. -1 = not available / don’t set. Allowed values [0 .. 255].}(hjώhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMphj̎ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjˎhMthjubj)}(hX``burst_tmr`` controls how many bit times to wait for the MAC to send a new frame before interrupting the burst. This value should be set to a value greater than the MAC inter-packet gap (which is typically 96 bits). -1 = not available / don't set. Allowed values [0 .. 255].h](j)}(h ``burst_tmr``h]j)}(hjh]h burst_tmr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMwhjubj)}(hhh]jX)}(hXcontrols how many bit times to wait for the MAC to send a new frame before interrupting the burst. This value should be set to a value greater than the MAC inter-packet gap (which is typically 96 bits). -1 = not available / don't set. Allowed values [0 .. 255].h]hXcontrols how many bit times to wait for the MAC to send a new frame before interrupting the burst. This value should be set to a value greater than the MAC inter-packet gap (which is typically 96 bits). -1 = not available / don’t set. Allowed values [0 .. 255].}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM{hjnhhubjX)}(hA structure containing configuration parameters for setting/getting the PLCA RS configuration. The driver does not need to implement all the parameters, but should report what is actually used.h]hA structure containing configuration parameters for setting/getting the PLCA RS configuration. The driver does not need to implement all the parameters, but should report what is actually used.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMxhjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_plca_status (C struct)c.phy_plca_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_plca_statush]h)}(hstruct phy_plca_statush](h)}(hjh]hstruct}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjmhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhj~hMubj)}(hphy_plca_statush]j%)}(hjkh]hphy_plca_status}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjmhhhj~hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjihhhj~hMubah}(h]jdah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hMhjfhhubjS)}(hhh]jX)}(hPStatus of the PLCA (Physical Layer Collision Avoidance) Reconciliation Sublayer.h]hPStatus of the PLCA (Physical Layer Collision Avoidance) Reconciliation Sublayer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjfhhhj~hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjˏjxjˏjyjzj{uh1hhhhjnhNhNubj})}(h**Definition**:: struct phy_plca_status { bool pst; }; **Members** ``pst`` The PLCA status as reported by the PST bit in the PLCA STATUS register(31.CA03), indicating BEACON activity.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj׏hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӏubh:}(hjӏhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjϏubjU)}(h)struct phy_plca_status { bool pst; };h]h)struct phy_plca_status { bool pst; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjϏubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjϏubj)}(hhh]j)}(ht``pst`` The PLCA status as reported by the PST bit in the PLCA STATUS register(31.CA03), indicating BEACON activity.h](j)}(h``pst``h]j)}(hj h]hpst}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hlThe PLCA status as reported by the PST bit in the PLCA STATUS register(31.CA03), indicating BEACON activity.h]hlThe PLCA status as reported by the PST bit in the PLCA STATUS register(31.CA03), indicating BEACON activity.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubah}(h]h ]h"]h$]h&]uh1jhjϏubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubjX)}(hA structure containing status information of the PLCA RS configuration. The driver does not need to implement all the parameters, but should report what is actually used.h]hA structure containing status information of the PLCA RS configuration. The driver does not need to implement all the parameters, but should report what is actually used.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_led (C struct) c.phy_ledhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_ledh]h)}(hstruct phy_ledh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_ledh]j%)}(hjh]hphy_led}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hAn LED driven by the PHYh]hAn LED driven by the PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjߐhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX7**Definition**:: struct phy_led { struct list_head list; struct phy_device *phydev; struct led_classdev led_cdev; u8 index; }; **Members** ``list`` List of LEDs ``phydev`` PHY this LED is attached to ``led_cdev`` Standard LED class structure ``index`` Number of the LEDh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjU)}(h}struct phy_led { struct list_head list; struct phy_device *phydev; struct led_classdev led_cdev; u8 index; };h]h}struct phy_led { struct list_head list; struct phy_device *phydev; struct led_classdev led_cdev; u8 index; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h **Members**h]j)}(hj0h]hMembers}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](j)}(h``list`` List of LEDs h](j)}(h``list``h]j)}(hjOh]hlist}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjIubj)}(hhh]jX)}(h List of LEDsh]h List of LEDs}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(h'``phydev`` PHY this LED is attached to h](j)}(h ``phydev``h]j)}(hjh]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hPHY this LED is attached toh]hPHY this LED is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubj)}(h*``led_cdev`` Standard LED class structure h](j)}(h ``led_cdev``h]j)}(hjh]hled_cdev}(hjÑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hStandard LED class structureh]hStandard LED class structure}(hjڑhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj֑hMhjבubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֑hMhjFubj)}(h``index`` Number of the LEDh](j)}(h ``index``h]j)}(hjh]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hNumber of the LEDh]hNumber of the LED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_mse_capability (C struct)c.phy_mse_capabilityhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_mse_capabilityh]h)}(hstruct phy_mse_capabilityh](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjahMubj)}(hphy_mse_capabilityh]j%)}(hjNh]hphy_mse_capability}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjahMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjahMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjahMhjIhhubjS)}(hhh]jX)}(h=Capabilities of Mean Square Error (MSE) measurement interfaceh]h=Capabilities of Mean Square Error (MSE) measurement interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjahMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX[**Definition**:: struct phy_mse_capability { u64 max_average_mse; u64 max_peak_mse; u64 refresh_rate_ps; u64 num_symbols; u32 supported_caps; }; **Members** ``max_average_mse`` The maximum value for an average MSE snapshot. This defines the scale for the measurement. If the PHY_MSE_CAP_AVG capability is supported, this value MUST be greater than 0. (vendor-specific units). ``max_peak_mse`` The maximum value for a peak MSE snapshot. If either PHY_MSE_CAP_PEAK or PHY_MSE_CAP_WORST_PEAK is supported, this value MUST be greater than 0. (vendor-specific units). ``refresh_rate_ps`` The typical interval, in picoseconds, between hardware updates of the MSE values. This is an estimate, and callers should not assume synchronous sampling. (vendor-specific units). ``num_symbols`` The number of symbols aggregated per hardware sample to calculate the MSE. (vendor-specific units). ``supported_caps`` A bitmask of PHY_MSE_CAP_* values indicating which measurement types (e.g., average, peak) and channels (e.g., per-pair or link-wide) are supported.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjU)}(hstruct phy_mse_capability { u64 max_average_mse; u64 max_peak_mse; u64 refresh_rate_ps; u64 num_symbols; u32 supported_caps; };h]hstruct phy_mse_capability { u64 max_average_mse; u64 max_peak_mse; u64 refresh_rate_ps; u64 num_symbols; u32 supported_caps; };}hjӒsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh](j)}(h``max_average_mse`` The maximum value for an average MSE snapshot. This defines the scale for the measurement. If the PHY_MSE_CAP_AVG capability is supported, this value MUST be greater than 0. (vendor-specific units). h](j)}(h``max_average_mse``h]j)}(hjh]hmax_average_mse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hThe maximum value for an average MSE snapshot. This defines the scale for the measurement. If the PHY_MSE_CAP_AVG capability is supported, this value MUST be greater than 0. (vendor-specific units).h]hThe maximum value for an average MSE snapshot. This defines the scale for the measurement. If the PHY_MSE_CAP_AVG capability is supported, this value MUST be greater than 0. (vendor-specific units).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``max_peak_mse`` The maximum value for a peak MSE snapshot. If either PHY_MSE_CAP_PEAK or PHY_MSE_CAP_WORST_PEAK is supported, this value MUST be greater than 0. (vendor-specific units). h](j)}(h``max_peak_mse``h]j)}(hj=h]h max_peak_mse}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hj7ubj)}(hhh]jX)}(hThe maximum value for a peak MSE snapshot. If either PHY_MSE_CAP_PEAK or PHY_MSE_CAP_WORST_PEAK is supported, this value MUST be greater than 0. (vendor-specific units).h]hThe maximum value for a peak MSE snapshot. If either PHY_MSE_CAP_PEAK or PHY_MSE_CAP_WORST_PEAK is supported, this value MUST be greater than 0. (vendor-specific units).}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhM hjubj)}(h``refresh_rate_ps`` The typical interval, in picoseconds, between hardware updates of the MSE values. This is an estimate, and callers should not assume synchronous sampling. (vendor-specific units). h](j)}(h``refresh_rate_ps``h]j)}(hjwh]hrefresh_rate_ps}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM#hjqubj)}(hhh]jX)}(hThe typical interval, in picoseconds, between hardware updates of the MSE values. This is an estimate, and callers should not assume synchronous sampling. (vendor-specific units).h]hThe typical interval, in picoseconds, between hardware updates of the MSE values. This is an estimate, and callers should not assume synchronous sampling. (vendor-specific units).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM!hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(ht``num_symbols`` The number of symbols aggregated per hardware sample to calculate the MSE. (vendor-specific units). h](j)}(h``num_symbols``h]j)}(hjh]h num_symbols}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM%hjubj)}(hhh]jX)}(hcThe number of symbols aggregated per hardware sample to calculate the MSE. (vendor-specific units).h]hcThe number of symbols aggregated per hardware sample to calculate the MSE. (vendor-specific units).}(hjʓhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM$hjǓubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƓhM%hjubj)}(h``supported_caps`` A bitmask of PHY_MSE_CAP_* values indicating which measurement types (e.g., average, peak) and channels (e.g., per-pair or link-wide) are supported.h](j)}(h``supported_caps``h]j)}(hjh]hsupported_caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM'hjubj)}(hhh]jX)}(hA bitmask of PHY_MSE_CAP_* values indicating which measurement types (e.g., average, peak) and channels (e.g., per-pair or link-wide) are supported.h]hA bitmask of PHY_MSE_CAP_* values indicating which measurement types (e.g., average, peak) and channels (e.g., per-pair or link-wide) are supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM+hjnhhubjX)}(hStandardization notes:h]hStandardization notes:}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubj4H)}(hhh](j9H)}(hPresence of MSE/SQI/pMSE is defined by OPEN Alliance specs, but numeric scaling, refresh/update rate and aggregation windows are not fixed and are vendor-/product-specific. (OA 100BASE-T1 TC1 v1.0 6.1.*; OA 1000BASE-T1 TC12 v2.2 6.1.*) h]jX)}(hPresence of MSE/SQI/pMSE is defined by OPEN Alliance specs, but numeric scaling, refresh/update rate and aggregation windows are not fixed and are vendor-/product-specific. (OA 100BASE-T1 TC1 v1.0 6.1.*; OA 1000BASE-T1 TC12 v2.2 6.1.*)h]hPresence of MSE/SQI/pMSE is defined by OPEN Alliance specs, but numeric scaling, refresh/update rate and aggregation windows are not fixed and are vendor-/product-specific. (OA 100BASE-T1 TC1 v1.0 6.1.*; OA 1000BASE-T1 TC12 v2.2 6.1.*)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjVubah}(h]h ]h"]h$]h&]uh1j8HhjSubj9H)}(hTypical recommendations: 2^16 symbols and 0..511 scaling for MSE; pMSE only defined for 100BASE-T1 (sliding window example), others are vendor extensions. Drivers must report actual scale/limits here. h]jX)}(hTypical recommendations: 2^16 symbols and 0..511 scaling for MSE; pMSE only defined for 100BASE-T1 (sliding window example), others are vendor extensions. Drivers must report actual scale/limits here.h]hTypical recommendations: 2^16 symbols and 0..511 scaling for MSE; pMSE only defined for 100BASE-T1 (sliding window example), others are vendor extensions. Drivers must report actual scale/limits here.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjoubah}(h]h ]h"]h$]h&]uh1j8HhjSubeh}(h]h ]h"]h$]h&]jIjw-uh1j3HhjhhMhjnhhubjX)}(hX Describes the MSE measurement capabilities for the current link mode. These properties are dynamic and may change when link settings are modified. Callers should re-query this capability after any link state change to ensure they have the most up-to-date information.h]hX Describes the MSE measurement capabilities for the current link mode. These properties are dynamic and may change when link settings are modified. Callers should re-query this capability after any link state change to ensure they have the most up-to-date information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjnhhubjX)}(hXCallers should only request measurements for channels and types that are indicated as supported by the **supported_caps** bitmask. If **supported_caps** is 0, the device provides no MSE diagnostics, and driver operations should typically return -EOPNOTSUPP.h](hgCallers should only request measurements for channels and types that are indicated as supported by the }(hjhhhNhNubj)}(h**supported_caps**h]hsupported_caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bitmask. If }(hjhhhNhNubj)}(h**supported_caps**h]hsupported_caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhi is 0, the device provides no MSE diagnostics, and driver operations should typically return -EOPNOTSUPP.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubjX)}(hSnapshot values for average and peak MSE can be normalized to a 0..1 ratio by dividing the raw snapshot by the corresponding **max_average_mse** or **max_peak_mse** value.h](h}Snapshot values for average and peak MSE can be normalized to a 0..1 ratio by dividing the raw snapshot by the corresponding }(hjДhhhNhNubj)}(h**max_average_mse**h]hmax_average_mse}(hjؔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjДubh or }(hjДhhhNhNubj)}(h**max_peak_mse**h]h max_peak_mse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjДubh value.}(hjДhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_mse_snapshot (C struct)c.phy_mse_snapshothNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_mse_snapshoth]h)}(hstruct phy_mse_snapshoth](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj)hMubj)}(hphy_mse_snapshoth]j%)}(hjh]hphy_mse_snapshot}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj)hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMhjhhubjS)}(hhh]jX)}(h1A snapshot of Mean Square Error (MSE) diagnosticsh]h1A snapshot of Mean Square Error (MSE) diagnostics}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM2hj[hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj)hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjvjxjvjyjzj{uh1hhhhjnhNhNubj})}(hX**Definition**:: struct phy_mse_snapshot { u64 average_mse; u64 peak_mse; u64 worst_peak_mse; }; **Members** ``average_mse`` The average MSE value over the measurement window. OPEN Alliance references MSE as a DCQ metric; recommends 2^16 symbols and 0..511 scaling. Exact scale and refresh are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.1; 1000BASE-T1 TC12 v2.2 6.1.1). ``peak_mse`` The peak MSE value observed within the measurement window. For 100BASE-T1, "pMSE" is optional and may be implemented via a sliding 128-symbol window with periodic capture; not standardized for 1000BASE-T1. (100BASE-T1 TC1 v1.0 6.1.3, Table "DCQ.peakMSE"). ``worst_peak_mse`` A latched high-water mark of the peak MSE since last read (read-to-clear if implemented). OPEN Alliance shows a latched "worst case peak MSE" for 100BASE-T1 pMSE; availability/semantics outside that are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.3, DCQ.peakMSE high byte; 1000BASE-T1 TC12 v2.2 treats DCQ details as vendor-specific.)h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh:}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM6hjzubjU)}(h[struct phy_mse_snapshot { u64 average_mse; u64 peak_mse; u64 worst_peak_mse; };h]h[struct phy_mse_snapshot { u64 average_mse; u64 peak_mse; u64 worst_peak_mse; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM8hjzubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM>hjzubj)}(hhh](j)}(hX``average_mse`` The average MSE value over the measurement window. OPEN Alliance references MSE as a DCQ metric; recommends 2^16 symbols and 0..511 scaling. Exact scale and refresh are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.1; 1000BASE-T1 TC12 v2.2 6.1.1). h](j)}(h``average_mse``h]j)}(hj˕h]h average_mse}(hj͕hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɕubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM>hjŕubj)}(hhh]jX)}(hThe average MSE value over the measurement window. OPEN Alliance references MSE as a DCQ metric; recommends 2^16 symbols and 0..511 scaling. Exact scale and refresh are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.1; 1000BASE-T1 TC12 v2.2 6.1.1).h]hThe average MSE value over the measurement window. OPEN Alliance references MSE as a DCQ metric; recommends 2^16 symbols and 0..511 scaling. Exact scale and refresh are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.1; 1000BASE-T1 TC12 v2.2 6.1.1).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM;hjubah}(h]h ]h"]h$]h&]uh1jhjŕubeh}(h]h ]h"]h$]h&]uh1jhjhM>hj•ubj)}(hX ``peak_mse`` The peak MSE value observed within the measurement window. For 100BASE-T1, "pMSE" is optional and may be implemented via a sliding 128-symbol window with periodic capture; not standardized for 1000BASE-T1. (100BASE-T1 TC1 v1.0 6.1.3, Table "DCQ.peakMSE"). h](j)}(h ``peak_mse``h]j)}(hjh]hpeak_mse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMChjubj)}(hhh]jX)}(hThe peak MSE value observed within the measurement window. For 100BASE-T1, "pMSE" is optional and may be implemented via a sliding 128-symbol window with periodic capture; not standardized for 1000BASE-T1. (100BASE-T1 TC1 v1.0 6.1.3, Table "DCQ.peakMSE").h]hXThe peak MSE value observed within the measurement window. For 100BASE-T1, “pMSE” is optional and may be implemented via a sliding 128-symbol window with periodic capture; not standardized for 1000BASE-T1. (100BASE-T1 TC1 v1.0 6.1.3, Table “DCQ.peakMSE”).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM@hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChj•ubj)}(hX_``worst_peak_mse`` A latched high-water mark of the peak MSE since last read (read-to-clear if implemented). OPEN Alliance shows a latched "worst case peak MSE" for 100BASE-T1 pMSE; availability/semantics outside that are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.3, DCQ.peakMSE high byte; 1000BASE-T1 TC12 v2.2 treats DCQ details as vendor-specific.)h](j)}(h``worst_peak_mse``h]j)}(hj?h]hworst_peak_mse}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMHhj9ubj)}(hhh]jX)}(hXLA latched high-water mark of the peak MSE since last read (read-to-clear if implemented). OPEN Alliance shows a latched "worst case peak MSE" for 100BASE-T1 pMSE; availability/semantics outside that are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.3, DCQ.peakMSE high byte; 1000BASE-T1 TC12 v2.2 treats DCQ details as vendor-specific.)h]hXPA latched high-water mark of the peak MSE since last read (read-to-clear if implemented). OPEN Alliance shows a latched “worst case peak MSE” for 100BASE-T1 pMSE; availability/semantics outside that are vendor-specific. (100BASE-T1 TC1 v1.0 6.1.3, DCQ.peakMSE high byte; 1000BASE-T1 TC12 v2.2 treats DCQ details as vendor-specific.)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMHhj•ubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMLhjnhhubjX)}(h]Holds a set of MSE diagnostic values that were all captured from a single measurement window.h]h]Holds a set of MSE diagnostic values that were all captured from a single measurement window.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM3hjnhhubjX)}(h{Values are raw, device-scaled and not normalized. Use struct phy_mse_capability to interpret the scale and sampling window.h]h{Values are raw, device-scaled and not normalized. Use struct phy_mse_capability to interpret the scale and sampling window.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM6hjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_driver (C struct) c.phy_driverhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h phy_driverh]h)}(hstruct phy_driverh](h)}(hjh]hstruct}(hjϖhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj˖hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<ubj)}(h h]h }(hjݖhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj˖hhhjܖhM<ubj)}(h phy_driverh]j%)}(hjɖh]h phy_driver}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj˖hhhjܖhM<ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjǖhhhjܖhM<ubah}(h]j–ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjܖhM<hjĖhhubjS)}(hhh]jX)}(h*Driver structure for a particular PHY typeh]h*Driver structure for a particular PHY type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMQhjhhubah}(h]h ]h"]h$]h&]uh1jRhjĖhhhjܖhM<ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhjnhNhNubj})}(hX?**Definition**:: struct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; const unsigned long * const features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *phydev); int (*config_init)(struct phy_device *phydev); int (*probe)(struct phy_device *phydev); int (*get_features)(struct phy_device *phydev); unsigned int (*inband_caps)(struct phy_device *phydev, phy_interface_t interface); int (*config_inband)(struct phy_device *phydev, unsigned int modes); int (*get_rate_matching)(struct phy_device *phydev, phy_interface_t iface); int (*suspend)(struct phy_device *phydev); int (*resume)(struct phy_device *phydev); int (*config_aneg)(struct phy_device *phydev); int (*aneg_done)(struct phy_device *phydev); int (*read_status)(struct phy_device *phydev); int (*config_intr)(struct phy_device *phydev); irqreturn_t (*handle_interrupt)(struct phy_device *phydev); void (*remove)(struct phy_device *phydev); int (*match_phy_device)(struct phy_device *phydev, const struct phy_driver *phydrv); int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*link_change_notify)(struct phy_device *dev); int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum); int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum, u16 val); int (*read_page)(struct phy_device *dev); int (*write_page)(struct phy_device *dev, int page); int (*module_info)(struct phy_device *dev, struct ethtool_modinfo *modinfo); int (*module_eeprom)(struct phy_device *dev, struct ethtool_eeprom *ee, u8 *data); int (*cable_test_start)(struct phy_device *dev); int (*cable_test_tdr_start)(struct phy_device *dev, const struct phy_tdr_config *config); int (*cable_test_get_status)(struct phy_device *dev, bool *finished); void (*get_phy_stats)(struct phy_device *dev, struct ethtool_eth_phy_stats *eth_stats, struct ethtool_phy_stats *stats); void (*get_link_stats)(struct phy_device *dev, struct ethtool_link_ext_stats *link_stats); int (*update_stats)(struct phy_device *dev); int (*get_sset_count)(struct phy_device *dev); void (*get_strings)(struct phy_device *dev, u8 *data); void (*get_stats)(struct phy_device *dev, struct ethtool_stats *stats, u64 *data); int (*get_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, void *data); int (*set_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, const void *data); int (*set_loopback)(struct phy_device *dev, bool enable, int speed); int (*get_sqi)(struct phy_device *dev); int (*get_sqi_max)(struct phy_device *dev); int (*get_mse_capability)(struct phy_device *dev, struct phy_mse_capability *cap); int (*get_mse_snapshot)(struct phy_device *dev, enum phy_mse_channel channel, struct phy_mse_snapshot *snapshot); int (*get_plca_cfg)(struct phy_device *dev, struct phy_plca_cfg *plca_cfg); int (*set_plca_cfg)(struct phy_device *dev, const struct phy_plca_cfg *plca_cfg); int (*get_plca_status)(struct phy_device *dev, struct phy_plca_status *plca_st); int (*led_brightness_set)(struct phy_device *dev, u8 index, enum led_brightness value); int (*led_blink_set)(struct phy_device *dev, u8 index, unsigned long *delay_on, unsigned long *delay_off); int (*led_hw_is_supported)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_set)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_get)(struct phy_device *dev, u8 index, unsigned long *rules); int (*led_polarity_set)(struct phy_device *dev, int index, unsigned long modes); unsigned int (*get_next_update_time)(struct phy_device *dev); int (*attach_mii_port)(struct phy_device *dev, struct phy_port *port); int (*attach_mdi_port)(struct phy_device *dev, struct phy_port *port); }; **Members** ``mdiodrv`` Data common to all MDIO devices ``phy_id`` The result of reading the UID registers of this PHY type, and ANDing them with the phy_id_mask. This driver only works for PHYs with IDs which match this field ``name`` The friendly name of this PHY type ``phy_id_mask`` Defines the important bits of the phy_id ``features`` A mandatory list of features (speed, duplex, etc) supported by this PHY ``flags`` A bitfield defining certain other features this PHY supports (like interrupts) ``driver_data`` Static driver data ``soft_reset`` Called to issue a PHY software reset ``config_init`` Called to initialize the PHY, including after a reset ``probe`` Called during discovery. Used to set up device-specific structures, if any ``get_features`` Probe the hardware to determine what abilities it has. Should only set phydev->supported. ``inband_caps`` query whether in-band is supported for the given PHY interface mode. Returns a bitmask of bits defined by enum link_inband_signalling. ``config_inband`` configure in-band mode for the PHY ``get_rate_matching`` Get the supported type of rate matching for a particular phy interface. This is used by phy consumers to determine whether to advertise lower-speed modes for that interface. It is assumed that if a rate matching mode is supported on an interface, then that interface's rate can be adapted to all slower link speeds supported by the phy. If the interface is not supported, this should return ``RATE_MATCH_NONE``. ``suspend`` Suspend the hardware, saving state if needed ``resume`` Resume the hardware, restoring state if needed ``config_aneg`` Configures the advertisement and resets autonegotiation if phydev->autoneg is on, forces the speed to the current settings in phydev if phydev->autoneg is off ``aneg_done`` Determines the auto negotiation result ``read_status`` Determines the negotiated speed and duplex ``config_intr`` Enables or disables interrupts. It should also clear any pending interrupts prior to enabling the IRQs and after disabling them. ``handle_interrupt`` Override default interrupt handling ``remove`` Clears up any memory if needed ``match_phy_device`` Returns true if this is a suitable driver for the given phydev. If NULL, matching is based on phy_id and phy_id_mask. ``set_wol`` Some devices (e.g. qnap TS-119P II) require PHY register changes to enable Wake on LAN, so set_wol is provided to be called in the ethernet driver's set_wol function. ``get_wol`` See set_wol, but for checking whether Wake on LAN is enabled. ``link_change_notify`` Called to inform a PHY device driver when the core is about to change the link state. This callback is supposed to be used as fixup hook for drivers that need to take action when the link state changes. Drivers are by no means allowed to mess with the PHY device structure in their implementations. ``read_mmd`` PHY specific driver override for reading a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD read function will be used by phy_read_mmd(), which will use either a direct read for Clause 45 PHYs or an indirect read for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. ``write_mmd`` PHY specific driver override for writing a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD write function will be used by phy_write_mmd(), which will use either a direct write for Clause 45 PHYs, or an indirect write for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. val is the value to be written. ``read_page`` Return the current PHY register page number ``write_page`` Set the current PHY register page number ``module_info`` Get the size and type of the eeprom contained within a plug-in module ``module_eeprom`` Get the eeprom information from the plug-in module ``cable_test_start`` Start a cable test ``cable_test_tdr_start`` Start a raw TDR cable test ``cable_test_get_status`` Once per second, or on interrupt, request the status of the test. ``get_phy_stats`` Retrieve PHY statistics. **dev**: The PHY device for which the statistics are retrieved. **eth_stats**: structure where Ethernet PHY stats will be stored. **stats**: structure where additional PHY-specific stats will be stored. Retrieves the supported PHY statistics and populates the provided structures. The input structures are pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace. ``get_link_stats`` Retrieve link statistics. **dev**: The PHY device for which the statistics are retrieved. **link_stats**: structure where link-specific stats will be stored. Retrieves link-related statistics for the given PHY device. The input structure is pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace. ``update_stats`` Trigger periodic statistics updates. **dev**: The PHY device for which statistics updates are triggered. Periodically gathers statistics from the PHY device to update locally maintained 64-bit counters. This is necessary for PHYs that implement reduced-width counters (e.g., 16-bit or 32-bit) which can overflow more frequently compared to 64-bit counters. By invoking this callback, drivers can fetch the current counter values, handle overflow detection, and accumulate the results into local 64-bit counters for accurate reporting through the `get_phy_stats` and `get_link_stats` interfaces. Return: 0 on success or a negative error code on failure. ``get_sset_count`` Number of statistic counters ``get_strings`` Names of the statistic counters ``get_stats`` Return the statistic counter values ``get_tunable`` Return the value of a tunable ``set_tunable`` Set the value of a tunable ``set_loopback`` Set the loopback mode of the PHY enable selects if the loopback mode is enabled or disabled. If the loopback mode is enabled, then the speed of the loopback mode can be requested with the speed argument. If the speed argument is zero, then any speed can be selected. If the speed argument is > 0, then this speed shall be selected for the loopback mode or EOPNOTSUPP shall be returned if speed selection is not supported. ``get_sqi`` Get the signal quality indication ``get_sqi_max`` Get the maximum signal quality indication ``get_mse_capability`` Get capabilities and scale of MSE measurement **dev**: PHY device **cap**: Output (filled on success) Fill **cap** with the PHY's MSE capability for the current link mode: scale limits (max_average_mse, max_peak_mse), update interval (refresh_rate_ps), sample length (num_symbols) and the capability bitmask (supported_caps). Implementations may defer capability report until hardware has converged; in that case they should return -EAGAIN and allow the caller to retry later. Return: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if the capability information is not yet available. ``get_mse_snapshot`` Retrieve a snapshot of MSE diagnostic values **dev**: PHY device **channel**: Channel identifier (PHY_MSE_CHANNEL_*) **snapshot**: Output (filled on success) Fill **snapshot** with a correlated set of MSE values from the most recent measurement window. Callers must validate **channel** against supported_caps returned by get_mse_capability(). Drivers must not coerce **channel**; if the requested selector is not implemented by the device or current link mode, the operation must fail. worst_peak_mse is latched and must be treated as read-to-clear. Return: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if measurements are not yet available. ``get_plca_cfg`` Return the current PLCA configuration ``set_plca_cfg`` Set the PLCA configuration ``get_plca_status`` Return the current PLCA status info ``led_brightness_set`` Set a PHY LED brightness. Index indicates which of the PHYs led should be set. Value follows the standard LED class meaning, e.g. LED_OFF, LED_HALF, LED_FULL. ``led_blink_set`` Set a PHY LED blinking. Index indicates which of the PHYs led should be configured to blink. Delays are in milliseconds and if both are zero then a sensible default should be chosen. The call should adjust the timings in that case and if it can't match the values specified exactly. ``led_hw_is_supported`` Can the HW support the given rules. **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The core is interested in these rules Return 0 if yes, -EOPNOTSUPP if not, or an error code. ``led_hw_control_set`` Set the HW to control the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The rules used to control the LED Returns 0, or a an error code. ``led_hw_control_get`` Get how the HW is controlling the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** Pointer to the rules used to control the LED Set ***rules** to how the HW is currently blinking. Returns 0 on success, or a error code if the current blinking cannot be represented in rules, or some other error happens. ``led_polarity_set`` Set the LED polarity modes **dev**: PHY device which has the LED **index**: Which LED of the PHY device **modes**: bitmap of LED polarity modes Configure LED with all the required polarity modes in **modes** to make it correctly turn ON or OFF. Returns 0, or an error code. ``get_next_update_time`` Get the time until the next update event **dev**: PHY device Callback to determine the time (in jiffies) until the next update event for the PHY state machine. Allows PHY drivers to dynamically adjust polling intervals based on link state or other conditions. Returns the time in jiffies until the next update event. ``attach_mii_port`` Attach the given MII port to the PHY device **dev**: PHY device to notify **port**: The port being added Called when an MII port that needs to be driven by the PHY is found. The port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties. If the port isn't initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information. The PHY driver must set the port->interfaces field to indicate the possible MII modes that this PHY can output on the port. Returns 0, or an error code. ``attach_mdi_port`` Attach the given MII port to the PHY device **dev**: PHY device to notify **port**: The port being added Called when a port that needs to be driven by the PHY is found. The number of time this will be called depends on phydev->max_n_ports, which the driver can change in .probe(). The port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties. If the port isn't initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information. Returns 0, or an error code.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh:}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhj-ubjU)}(hXstruct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; const unsigned long * const features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *phydev); int (*config_init)(struct phy_device *phydev); int (*probe)(struct phy_device *phydev); int (*get_features)(struct phy_device *phydev); unsigned int (*inband_caps)(struct phy_device *phydev, phy_interface_t interface); int (*config_inband)(struct phy_device *phydev, unsigned int modes); int (*get_rate_matching)(struct phy_device *phydev, phy_interface_t iface); int (*suspend)(struct phy_device *phydev); int (*resume)(struct phy_device *phydev); int (*config_aneg)(struct phy_device *phydev); int (*aneg_done)(struct phy_device *phydev); int (*read_status)(struct phy_device *phydev); int (*config_intr)(struct phy_device *phydev); irqreturn_t (*handle_interrupt)(struct phy_device *phydev); void (*remove)(struct phy_device *phydev); int (*match_phy_device)(struct phy_device *phydev, const struct phy_driver *phydrv); int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*link_change_notify)(struct phy_device *dev); int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum); int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum, u16 val); int (*read_page)(struct phy_device *dev); int (*write_page)(struct phy_device *dev, int page); int (*module_info)(struct phy_device *dev, struct ethtool_modinfo *modinfo); int (*module_eeprom)(struct phy_device *dev, struct ethtool_eeprom *ee, u8 *data); int (*cable_test_start)(struct phy_device *dev); int (*cable_test_tdr_start)(struct phy_device *dev, const struct phy_tdr_config *config); int (*cable_test_get_status)(struct phy_device *dev, bool *finished); void (*get_phy_stats)(struct phy_device *dev, struct ethtool_eth_phy_stats *eth_stats, struct ethtool_phy_stats *stats); void (*get_link_stats)(struct phy_device *dev, struct ethtool_link_ext_stats *link_stats); int (*update_stats)(struct phy_device *dev); int (*get_sset_count)(struct phy_device *dev); void (*get_strings)(struct phy_device *dev, u8 *data); void (*get_stats)(struct phy_device *dev, struct ethtool_stats *stats, u64 *data); int (*get_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, void *data); int (*set_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, const void *data); int (*set_loopback)(struct phy_device *dev, bool enable, int speed); int (*get_sqi)(struct phy_device *dev); int (*get_sqi_max)(struct phy_device *dev); int (*get_mse_capability)(struct phy_device *dev, struct phy_mse_capability *cap); int (*get_mse_snapshot)(struct phy_device *dev, enum phy_mse_channel channel, struct phy_mse_snapshot *snapshot); int (*get_plca_cfg)(struct phy_device *dev, struct phy_plca_cfg *plca_cfg); int (*set_plca_cfg)(struct phy_device *dev, const struct phy_plca_cfg *plca_cfg); int (*get_plca_status)(struct phy_device *dev, struct phy_plca_status *plca_st); int (*led_brightness_set)(struct phy_device *dev, u8 index, enum led_brightness value); int (*led_blink_set)(struct phy_device *dev, u8 index, unsigned long *delay_on, unsigned long *delay_off); int (*led_hw_is_supported)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_set)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_get)(struct phy_device *dev, u8 index, unsigned long *rules); int (*led_polarity_set)(struct phy_device *dev, int index, unsigned long modes); unsigned int (*get_next_update_time)(struct phy_device *dev); int (*attach_mii_port)(struct phy_device *dev, struct phy_port *port); int (*attach_mdi_port)(struct phy_device *dev, struct phy_port *port); };h]hXstruct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; const unsigned long * const features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *phydev); int (*config_init)(struct phy_device *phydev); int (*probe)(struct phy_device *phydev); int (*get_features)(struct phy_device *phydev); unsigned int (*inband_caps)(struct phy_device *phydev, phy_interface_t interface); int (*config_inband)(struct phy_device *phydev, unsigned int modes); int (*get_rate_matching)(struct phy_device *phydev, phy_interface_t iface); int (*suspend)(struct phy_device *phydev); int (*resume)(struct phy_device *phydev); int (*config_aneg)(struct phy_device *phydev); int (*aneg_done)(struct phy_device *phydev); int (*read_status)(struct phy_device *phydev); int (*config_intr)(struct phy_device *phydev); irqreturn_t (*handle_interrupt)(struct phy_device *phydev); void (*remove)(struct phy_device *phydev); int (*match_phy_device)(struct phy_device *phydev, const struct phy_driver *phydrv); int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); void (*link_change_notify)(struct phy_device *dev); int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum); int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum, u16 val); int (*read_page)(struct phy_device *dev); int (*write_page)(struct phy_device *dev, int page); int (*module_info)(struct phy_device *dev, struct ethtool_modinfo *modinfo); int (*module_eeprom)(struct phy_device *dev, struct ethtool_eeprom *ee, u8 *data); int (*cable_test_start)(struct phy_device *dev); int (*cable_test_tdr_start)(struct phy_device *dev, const struct phy_tdr_config *config); int (*cable_test_get_status)(struct phy_device *dev, bool *finished); void (*get_phy_stats)(struct phy_device *dev, struct ethtool_eth_phy_stats *eth_stats, struct ethtool_phy_stats *stats); void (*get_link_stats)(struct phy_device *dev, struct ethtool_link_ext_stats *link_stats); int (*update_stats)(struct phy_device *dev); int (*get_sset_count)(struct phy_device *dev); void (*get_strings)(struct phy_device *dev, u8 *data); void (*get_stats)(struct phy_device *dev, struct ethtool_stats *stats, u64 *data); int (*get_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, void *data); int (*set_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, const void *data); int (*set_loopback)(struct phy_device *dev, bool enable, int speed); int (*get_sqi)(struct phy_device *dev); int (*get_sqi_max)(struct phy_device *dev); int (*get_mse_capability)(struct phy_device *dev, struct phy_mse_capability *cap); int (*get_mse_snapshot)(struct phy_device *dev, enum phy_mse_channel channel, struct phy_mse_snapshot *snapshot); int (*get_plca_cfg)(struct phy_device *dev, struct phy_plca_cfg *plca_cfg); int (*set_plca_cfg)(struct phy_device *dev, const struct phy_plca_cfg *plca_cfg); int (*get_plca_status)(struct phy_device *dev, struct phy_plca_status *plca_st); int (*led_brightness_set)(struct phy_device *dev, u8 index, enum led_brightness value); int (*led_blink_set)(struct phy_device *dev, u8 index, unsigned long *delay_on, unsigned long *delay_off); int (*led_hw_is_supported)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_set)(struct phy_device *dev, u8 index, unsigned long rules); int (*led_hw_control_get)(struct phy_device *dev, u8 index, unsigned long *rules); int (*led_polarity_set)(struct phy_device *dev, int index, unsigned long modes); unsigned int (*get_next_update_time)(struct phy_device *dev); int (*attach_mii_port)(struct phy_device *dev, struct phy_port *port); int (*attach_mdi_port)(struct phy_device *dev, struct phy_port *port); };}hjNsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMWhj-ubjX)}(h **Members**h]j)}(hj_h]hMembers}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj-ubj)}(hhh](j)}(h,``mdiodrv`` Data common to all MDIO devices h](j)}(h ``mdiodrv``h]j)}(hj~h]hmdiodrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjxubj)}(hhh]jX)}(hData common to all MDIO devicesh]hData common to all MDIO devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhMThjuubj)}(h``phy_id`` The result of reading the UID registers of this PHY type, and ANDing them with the phy_id_mask. This driver only works for PHYs with IDs which match this field h](j)}(h ``phy_id``h]j)}(hjh]hphy_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMWhjubj)}(hhh]jX)}(hThe result of reading the UID registers of this PHY type, and ANDing them with the phy_id_mask. This driver only works for PHYs with IDs which match this fieldh]hThe result of reading the UID registers of this PHY type, and ANDing them with the phy_id_mask. This driver only works for PHYs with IDs which match this field}(hjЗhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhj͗ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̗hMWhjuubj)}(h,``name`` The friendly name of this PHY type h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMXhjubj)}(hhh]jX)}(h"The friendly name of this PHY typeh]h"The friendly name of this PHY type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjuubj)}(h9``phy_id_mask`` Defines the important bits of the phy_id h](j)}(h``phy_id_mask``h]j)}(hj*h]h phy_id_mask}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMYhj$ubj)}(hhh]jX)}(h(Defines the important bits of the phy_idh]h(Defines the important bits of the phy_id}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMYhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMYhjuubj)}(hU``features`` A mandatory list of features (speed, duplex, etc) supported by this PHY h](j)}(h ``features``h]j)}(hjch]hfeatures}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM[hj]ubj)}(hhh]jX)}(hGA mandatory list of features (speed, duplex, etc) supported by this PHYh]hGA mandatory list of features (speed, duplex, etc) supported by this PHY}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMZhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhM[hjuubj)}(hY``flags`` A bitfield defining certain other features this PHY supports (like interrupts) h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM]hjubj)}(hhh]jX)}(hNA bitfield defining certain other features this PHY supports (like interrupts)h]hNA bitfield defining certain other features this PHY supports (like interrupts)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjuubj)}(h#``driver_data`` Static driver data h](j)}(h``driver_data``h]j)}(hjטh]h driver_data}(hj٘hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj՘ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hjјubj)}(hhh]jX)}(hStatic driver datah]hStatic driver data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjјubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjuubj)}(h4``soft_reset`` Called to issue a PHY software reset h](j)}(h``soft_reset``h]j)}(hjh]h soft_reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMrhj ubj)}(hhh]jX)}(h$Called to issue a PHY software reseth]h$Called to issue a PHY software reset}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hMrhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMrhjuubj)}(hF``config_init`` Called to initialize the PHY, including after a reset h](j)}(h``config_init``h]j)}(hjIh]h config_init}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMxhjCubj)}(hhh]jX)}(h5Called to initialize the PHY, including after a reseth]h5Called to initialize the PHY, including after a reset}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMwhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMxhjuubj)}(hV``probe`` Called during discovery. Used to set up device-specific structures, if any h](j)}(h ``probe``h]j)}(hjh]hprobe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM~hj}ubj)}(hhh]jX)}(hKCalled during discovery. Used to set up device-specific structures, if anyh]hKCalled during discovery. Used to set up device-specific structures, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM}hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjuubj)}(hl``get_features`` Probe the hardware to determine what abilities it has. Should only set phydev->supported. h](j)}(h``get_features``h]j)}(hjh]h get_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hZProbe the hardware to determine what abilities it has. Should only set phydev->supported.h]hZProbe the hardware to determine what abilities it has. Should only set phydev->supported.}(hj֙hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjәubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҙhMhjuubj)}(h``inband_caps`` query whether in-band is supported for the given PHY interface mode. Returns a bitmask of bits defined by enum link_inband_signalling. h](j)}(h``inband_caps``h]j)}(hjh]h inband_caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hquery whether in-band is supported for the given PHY interface mode. Returns a bitmask of bits defined by enum link_inband_signalling.h]hquery whether in-band is supported for the given PHY interface mode. Returns a bitmask of bits defined by enum link_inband_signalling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjuubj)}(h5``config_inband`` configure in-band mode for the PHY h](j)}(h``config_inband``h]j)}(hj1h]h config_inband}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj+ubj)}(hhh]jX)}(h"configure in-band mode for the PHYh]h"configure in-band mode for the PHY}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjuubj)}(hX``get_rate_matching`` Get the supported type of rate matching for a particular phy interface. This is used by phy consumers to determine whether to advertise lower-speed modes for that interface. It is assumed that if a rate matching mode is supported on an interface, then that interface's rate can be adapted to all slower link speeds supported by the phy. If the interface is not supported, this should return ``RATE_MATCH_NONE``. h](j)}(h``get_rate_matching``h]j)}(hjjh]hget_rate_matching}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjdubj)}(hhh]jX)}(hXGet the supported type of rate matching for a particular phy interface. This is used by phy consumers to determine whether to advertise lower-speed modes for that interface. It is assumed that if a rate matching mode is supported on an interface, then that interface's rate can be adapted to all slower link speeds supported by the phy. If the interface is not supported, this should return ``RATE_MATCH_NONE``.h](hXGet the supported type of rate matching for a particular phy interface. This is used by phy consumers to determine whether to advertise lower-speed modes for that interface. It is assumed that if a rate matching mode is supported on an interface, then that interface’s rate can be adapted to all slower link speeds supported by the phy. If the interface is not supported, this should return }(hjhhhNhNubj)}(h``RATE_MATCH_NONE``h]hRATE_MATCH_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h9``suspend`` Suspend the hardware, saving state if needed h](j)}(h ``suspend``h]j)}(hjh]hsuspend}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h,Suspend the hardware, saving state if neededh]h,Suspend the hardware, saving state if needed}(hjϚhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj˚hMhj̚ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj˚hMhjuubj)}(h:``resume`` Resume the hardware, restoring state if needed h](j)}(h ``resume``h]j)}(hjh]hresume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h.Resume the hardware, restoring state if neededh]h.Resume the hardware, restoring state if needed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h``config_aneg`` Configures the advertisement and resets autonegotiation if phydev->autoneg is on, forces the speed to the current settings in phydev if phydev->autoneg is off h](j)}(h``config_aneg``h]j)}(hj(h]h config_aneg}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj"ubj)}(hhh]jX)}(hConfigures the advertisement and resets autonegotiation if phydev->autoneg is on, forces the speed to the current settings in phydev if phydev->autoneg is offh]hConfigures the advertisement and resets autonegotiation if phydev->autoneg is on, forces the speed to the current settings in phydev if phydev->autoneg is off}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjuubj)}(h5``aneg_done`` Determines the auto negotiation result h](j)}(h ``aneg_done``h]j)}(hjbh]h aneg_done}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj\ubj)}(hhh]jX)}(h&Determines the auto negotiation resulth]h&Determines the auto negotiation result}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjuubj)}(h;``read_status`` Determines the negotiated speed and duplex h](j)}(h``read_status``h]j)}(hjh]h read_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h*Determines the negotiated speed and duplexh]h*Determines the negotiated speed and duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h``config_intr`` Enables or disables interrupts. It should also clear any pending interrupts prior to enabling the IRQs and after disabling them. h](j)}(h``config_intr``h]j)}(hjԛh]h config_intr}(hj֛hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjқubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjΛubj)}(hhh]jX)}(hEnables or disables interrupts. It should also clear any pending interrupts prior to enabling the IRQs and after disabling them.h]hEnables or disables interrupts. It should also clear any pending interrupts prior to enabling the IRQs and after disabling them.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjΛubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h9``handle_interrupt`` Override default interrupt handling h](j)}(h``handle_interrupt``h]j)}(hjh]hhandle_interrupt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h#Override default interrupt handlingh]h#Override default interrupt handling}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjuubj)}(h*``remove`` Clears up any memory if needed h](j)}(h ``remove``h]j)}(hjGh]hremove}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubj)}(hhh]jX)}(hClears up any memory if neededh]hClears up any memory if needed}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhjuubj)}(h``match_phy_device`` Returns true if this is a suitable driver for the given phydev. If NULL, matching is based on phy_id and phy_id_mask. h](j)}(h``match_phy_device``h]j)}(hjh]hmatch_phy_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjzubj)}(hhh]jX)}(hvReturns true if this is a suitable driver for the given phydev. If NULL, matching is based on phy_id and phy_id_mask.h]hvReturns true if this is a suitable driver for the given phydev. If NULL, matching is based on phy_id and phy_id_mask.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.h5hMhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h``set_wol`` Some devices (e.g. qnap TS-119P II) require PHY register changes to enable Wake on LAN, so set_wol is provided to be called in the ethernet driver's set_wol function. h](j)}(h ``set_wol``h]j)}(hjh]hset_wol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hSome devices (e.g. qnap TS-119P II) require PHY register changes to enable Wake on LAN, so set_wol is provided to be called in the ethernet driver's set_wol function.h]hSome devices (e.g. qnap TS-119P II) require PHY register changes to enable Wake on LAN, so set_wol is provided to be called in the ethernet driver’s set_wol function.}(hjӜhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjМubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjϜhMhjuubj)}(hJ``get_wol`` See set_wol, but for checking whether Wake on LAN is enabled. h](j)}(h ``get_wol``h]j)}(hjh]hget_wol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h=See set_wol, but for checking whether Wake on LAN is enabled.h]h=See set_wol, but for checking whether Wake on LAN is enabled.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjuubj)}(hXB``link_change_notify`` Called to inform a PHY device driver when the core is about to change the link state. This callback is supposed to be used as fixup hook for drivers that need to take action when the link state changes. Drivers are by no means allowed to mess with the PHY device structure in their implementations. h](j)}(h``link_change_notify``h]j)}(hj.h]hlink_change_notify}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj(ubj)}(hhh]jX)}(hX*Called to inform a PHY device driver when the core is about to change the link state. This callback is supposed to be used as fixup hook for drivers that need to take action when the link state changes. Drivers are by no means allowed to mess with the PHY device structure in their implementations.h]hX*Called to inform a PHY device driver when the core is about to change the link state. This callback is supposed to be used as fixup hook for drivers that need to take action when the link state changes. Drivers are by no means allowed to mess with the PHY device structure in their implementations.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChMhjuubj)}(hX``read_mmd`` PHY specific driver override for reading a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD read function will be used by phy_read_mmd(), which will use either a direct read for Clause 45 PHYs or an indirect read for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. h](j)}(h ``read_mmd``h]j)}(hjhh]hread_mmd}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjbubj)}(hhh]jX)}(hXPHY specific driver override for reading a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD read function will be used by phy_read_mmd(), which will use either a direct read for Clause 45 PHYs or an indirect read for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device.h]hXPHY specific driver override for reading a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD read function will be used by phy_read_mmd(), which will use either a direct read for Clause 45 PHYs or an indirect read for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjuubj)}(hX``write_mmd`` PHY specific driver override for writing a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD write function will be used by phy_write_mmd(), which will use either a direct write for Clause 45 PHYs, or an indirect write for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. val is the value to be written. h](j)}(h ``write_mmd``h]j)}(hjh]h write_mmd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hXPHY specific driver override for writing a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD write function will be used by phy_write_mmd(), which will use either a direct write for Clause 45 PHYs, or an indirect write for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. val is the value to be written.h]hXPHY specific driver override for writing a MMD register. This function is optional for PHY specific drivers. When not provided, the default MMD write function will be used by phy_write_mmd(), which will use either a direct write for Clause 45 PHYs, or an indirect write for Clause 22 PHYs. devnum is the MMD device number within the PHY device, regnum is the register within the selected MMD device. val is the value to be written.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h:``read_page`` Return the current PHY register page number h](j)}(h ``read_page``h]j)}(hjܝh]h read_page}(hjޝhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڝubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj֝ubj)}(hhh]jX)}(h+Return the current PHY register page numberh]h+Return the current PHY register page number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֝ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h8``write_page`` Set the current PHY register page number h](j)}(h``write_page``h]j)}(hjh]h write_page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h(Set the current PHY register page numberh]h(Set the current PHY register page number}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*hMhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hMhjuubj)}(hV``module_info`` Get the size and type of the eeprom contained within a plug-in module h](j)}(h``module_info``h]j)}(hjNh]h module_info}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjHubj)}(hhh]jX)}(hEGet the size and type of the eeprom contained within a plug-in moduleh]hEGet the size and type of the eeprom contained within a plug-in module}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjuubj)}(hE``module_eeprom`` Get the eeprom information from the plug-in module h](j)}(h``module_eeprom``h]j)}(hjh]h module_eeprom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh]jX)}(h2Get the eeprom information from the plug-in moduleh]h2Get the eeprom information from the plug-in module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjuubj)}(h(``cable_test_start`` Start a cable test h](j)}(h``cable_test_start``h]j)}(hjžh]hcable_test_start}(hjĞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hStart a cable testh]hStart a cable test}(hj۞hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjמhMhj؞ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjמhMhjuubj)}(h4``cable_test_tdr_start`` Start a raw TDR cable test h](j)}(h``cable_test_tdr_start``h]j)}(hjh]hcable_test_tdr_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hStart a raw TDR cable testh]hStart a raw TDR cable test}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h\``cable_test_get_status`` Once per second, or on interrupt, request the status of the test. h](j)}(h``cable_test_get_status``h]j)}(hj4h]hcable_test_get_status}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj.ubj)}(hhh]jX)}(hAOnce per second, or on interrupt, request the status of the test.h]hAOnce per second, or on interrupt, request the status of the test.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhMhjuubj)}(hX>``get_phy_stats`` Retrieve PHY statistics. **dev**: The PHY device for which the statistics are retrieved. **eth_stats**: structure where Ethernet PHY stats will be stored. **stats**: structure where additional PHY-specific stats will be stored. Retrieves the supported PHY statistics and populates the provided structures. The input structures are pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace. h](j)}(h``get_phy_stats``h]j)}(hjnh]h get_phy_stats}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM&hjhubj)}(hhh](jX)}(hRetrieve PHY statistics. **dev**: The PHY device for which the statistics are retrieved. **eth_stats**: structure where Ethernet PHY stats will be stored. **stats**: structure where additional PHY-specific stats will be stored.h](hRetrieve PHY statistics. }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9: The PHY device for which the statistics are retrieved. }(hjhhhNhNubj)}(h **eth_stats**h]h eth_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5: structure where Ethernet PHY stats will be stored. }(hjhhhNhNubj)}(h **stats**h]hstats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh?: structure where additional PHY-specific stats will be stored.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hXFRetrieves the supported PHY statistics and populates the provided structures. The input structures are pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace.h](h|Retrieves the supported PHY statistics and populates the provided structures. The input structures are pre-initialized with }(hj̟hhhNhNubj)}(h`ETHTOOL_STAT_NOT_SET`h]hETHTOOL_STAT_NOT_SET}(hjԟhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̟ubhw, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to }(hj̟hhhNhNubj)}(h`ETHTOOL_STAT_NOT_SET`h]hETHTOOL_STAT_NOT_SET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̟ubh' and will not be returned to userspace.}(hj̟hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM"hjubeh}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjuubj)}(hX``get_link_stats`` Retrieve link statistics. **dev**: The PHY device for which the statistics are retrieved. **link_stats**: structure where link-specific stats will be stored. Retrieves link-related statistics for the given PHY device. The input structure is pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace. h](j)}(h``get_link_stats``h]j)}(hjh]hget_link_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM5hj ubj)}(hhh](jX)}(hRetrieve link statistics. **dev**: The PHY device for which the statistics are retrieved. **link_stats**: structure where link-specific stats will be stored.h](hRetrieve link statistics. }(hj*hhhNhNubj)}(h**dev**h]hdev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh9: The PHY device for which the statistics are retrieved. }(hj*hhhNhNubj)}(h**link_stats**h]h link_stats}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh5: structure where link-specific stats will be stored.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM-hj'ubjX)}(hX2Retrieves link-related statistics for the given PHY device. The input structure is pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace.h](hhRetrieves link-related statistics for the given PHY device. The input structure is pre-initialized with }(hj]hhhNhNubj)}(h`ETHTOOL_STAT_NOT_SET`h]hETHTOOL_STAT_NOT_SET}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubhw, and the driver must only modify members corresponding to supported statistics. Unmodified members will remain set to }(hj]hhhNhNubj)}(h`ETHTOOL_STAT_NOT_SET`h]hETHTOOL_STAT_NOT_SET}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh' and will not be returned to userspace.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM1hj'ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hM5hjuubj)}(hX``update_stats`` Trigger periodic statistics updates. **dev**: The PHY device for which statistics updates are triggered. Periodically gathers statistics from the PHY device to update locally maintained 64-bit counters. This is necessary for PHYs that implement reduced-width counters (e.g., 16-bit or 32-bit) which can overflow more frequently compared to 64-bit counters. By invoking this callback, drivers can fetch the current counter values, handle overflow detection, and accumulate the results into local 64-bit counters for accurate reporting through the `get_phy_stats` and `get_link_stats` interfaces. Return: 0 on success or a negative error code on failure. h](j)}(h``update_stats``h]j)}(hjh]h update_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMGhjubj)}(hhh](jX)}(hhTrigger periodic statistics updates. **dev**: The PHY device for which statistics updates are triggered.h](h%Trigger periodic statistics updates. }(hjhhhNhNubj)}(h**dev**h]hdev}(hjàhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh<: The PHY device for which statistics updates are triggered.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM;hjubjX)}(hXPeriodically gathers statistics from the PHY device to update locally maintained 64-bit counters. This is necessary for PHYs that implement reduced-width counters (e.g., 16-bit or 32-bit) which can overflow more frequently compared to 64-bit counters. By invoking this callback, drivers can fetch the current counter values, handle overflow detection, and accumulate the results into local 64-bit counters for accurate reporting through the `get_phy_stats` and `get_link_stats` interfaces.h](hXPeriodically gathers statistics from the PHY device to update locally maintained 64-bit counters. This is necessary for PHYs that implement reduced-width counters (e.g., 16-bit or 32-bit) which can overflow more frequently compared to 64-bit counters. By invoking this callback, drivers can fetch the current counter values, handle overflow detection, and accumulate the results into local 64-bit counters for accurate reporting through the }(hjܠhhhNhNubj)}(h`get_phy_stats`h]h get_phy_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܠubh and }(hjܠhhhNhNubj)}(h`get_link_stats`h]hget_link_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܠubh interfaces.}(hjܠhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM>hjubjX)}(h9Return: 0 on success or a negative error code on failure.h]h9Return: 0 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMGhjuubj)}(h0``get_sset_count`` Number of statistic counters h](j)}(h``get_sset_count``h]j)}(hj/h]hget_sset_count}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMKhj)ubj)}(hhh]jX)}(hNumber of statistic countersh]hNumber of statistic counters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhMKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMKhjuubj)}(h0``get_strings`` Names of the statistic counters h](j)}(h``get_strings``h]j)}(hjhh]h get_strings}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMMhjbubj)}(hhh]jX)}(hNames of the statistic countersh]hNames of the statistic counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMMhjuubj)}(h2``get_stats`` Return the statistic counter values h](j)}(h ``get_stats``h]j)}(hjh]h get_stats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMOhjubj)}(hhh]jX)}(h#Return the statistic counter valuesh]h#Return the statistic counter values}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMOhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMOhjuubj)}(h.``get_tunable`` Return the value of a tunable h](j)}(h``get_tunable``h]j)}(hjڡh]h get_tunable}(hjܡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjءubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjԡubj)}(hhh]jX)}(hReturn the value of a tunableh]hReturn the value of a tunable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjԡubeh}(h]h ]h"]h$]h&]uh1jhjhMThjuubj)}(h+``set_tunable`` Set the value of a tunable h](j)}(h``set_tunable``h]j)}(hjh]h set_tunable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMWhj ubj)}(hhh]jX)}(hSet the value of a tunableh]hSet the value of a tunable}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMWhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMWhjuubj)}(hX``set_loopback`` Set the loopback mode of the PHY enable selects if the loopback mode is enabled or disabled. If the loopback mode is enabled, then the speed of the loopback mode can be requested with the speed argument. If the speed argument is zero, then any speed can be selected. If the speed argument is > 0, then this speed shall be selected for the loopback mode or EOPNOTSUPP shall be returned if speed selection is not supported. h](j)}(h``set_loopback``h]j)}(hjLh]h set_loopback}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMbhjFubj)}(hhh]jX)}(hXSet the loopback mode of the PHY enable selects if the loopback mode is enabled or disabled. If the loopback mode is enabled, then the speed of the loopback mode can be requested with the speed argument. If the speed argument is zero, then any speed can be selected. If the speed argument is > 0, then this speed shall be selected for the loopback mode or EOPNOTSUPP shall be returned if speed selection is not supported.h]hXSet the loopback mode of the PHY enable selects if the loopback mode is enabled or disabled. If the loopback mode is enabled, then the speed of the loopback mode can be requested with the speed argument. If the speed argument is zero, then any speed can be selected. If the speed argument is > 0, then this speed shall be selected for the loopback mode or EOPNOTSUPP shall be returned if speed selection is not supported.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMbhjuubj)}(h.``get_sqi`` Get the signal quality indication h](j)}(h ``get_sqi``h]j)}(hjh]hget_sqi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMehjubj)}(hhh]jX)}(h!Get the signal quality indicationh]h!Get the signal quality indication}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMehjuubj)}(h:``get_sqi_max`` Get the maximum signal quality indication h](j)}(h``get_sqi_max``h]j)}(hjh]h get_sqi_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjubj)}(hhh]jX)}(h)Get the maximum signal quality indicationh]h)Get the maximum signal quality indication}(hjآhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjԢhMghjբubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԢhMghjuubj)}(hX``get_mse_capability`` Get capabilities and scale of MSE measurement **dev**: PHY device **cap**: Output (filled on success) Fill **cap** with the PHY's MSE capability for the current link mode: scale limits (max_average_mse, max_peak_mse), update interval (refresh_rate_ps), sample length (num_symbols) and the capability bitmask (supported_caps). Implementations may defer capability report until hardware has converged; in that case they should return -EAGAIN and allow the caller to retry later. Return: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if the capability information is not yet available. h](j)}(h``get_mse_capability``h]j)}(hjh]hget_mse_capability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM{hjubj)}(hhh](jX)}(hhGet capabilities and scale of MSE measurement **dev**: PHY device **cap**: Output (filled on success)h](h.Get capabilities and scale of MSE measurement }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: PHY device }(hjhhhNhNubj)}(h**cap**h]hcap}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: Output (filled on success)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMkhjubjX)}(hFill **cap** with the PHY's MSE capability for the current link mode: scale limits (max_average_mse, max_peak_mse), update interval (refresh_rate_ps), sample length (num_symbols) and the capability bitmask (supported_caps).h](hFill }(hjDhhhNhNubj)}(h**cap**h]hcap}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh with the PHY’s MSE capability for the current link mode: scale limits (max_average_mse, max_peak_mse), update interval (refresh_rate_ps), sample length (num_symbols) and the capability bitmask (supported_caps).}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMohjubjX)}(hImplementations may defer capability report until hardware has converged; in that case they should return -EAGAIN and allow the caller to retry later.h]hImplementations may defer capability report until hardware has converged; in that case they should return -EAGAIN and allow the caller to retry later.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMthjubjX)}(hReturn: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if the capability information is not yet available.h]hReturn: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if the capability information is not yet available.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMxhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM{hjuubj)}(hX``get_mse_snapshot`` Retrieve a snapshot of MSE diagnostic values **dev**: PHY device **channel**: Channel identifier (PHY_MSE_CHANNEL_*) **snapshot**: Output (filled on success) Fill **snapshot** with a correlated set of MSE values from the most recent measurement window. Callers must validate **channel** against supported_caps returned by get_mse_capability(). Drivers must not coerce **channel**; if the requested selector is not implemented by the device or current link mode, the operation must fail. worst_peak_mse is latched and must be treated as read-to-clear. Return: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if measurements are not yet available. h](j)}(h``get_mse_snapshot``h]j)}(hjh]hget_mse_snapshot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hRetrieve a snapshot of MSE diagnostic values **dev**: PHY device **channel**: Channel identifier (PHY_MSE_CHANNEL_*) **snapshot**: Output (filled on success)h](h-Retrieve a snapshot of MSE diagnostic values }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: PHY device }(hjhhhNhNubj)}(h **channel**h]hchannel}(hjȣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh*: Channel identifier (PHY_MSE_CHANNEL_*) }(hjhhhNhNubj)}(h **snapshot**h]hsnapshot}(hjڣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: Output (filled on success)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h^Fill **snapshot** with a correlated set of MSE values from the most recent measurement window.h](hFill }(hjhhhNhNubj)}(h **snapshot**h]hsnapshot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhM with a correlated set of MSE values from the most recent measurement window.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hCallers must validate **channel** against supported_caps returned by get_mse_capability(). Drivers must not coerce **channel**; if the requested selector is not implemented by the device or current link mode, the operation must fail.h](hCallers must validate }(hjhhhNhNubj)}(h **channel**h]hchannel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhR against supported_caps returned by get_mse_capability(). Drivers must not coerce }(hjhhhNhNubj)}(h **channel**h]hchannel}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhk; if the requested selector is not implemented by the device or current link mode, the operation must fail.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h?worst_peak_mse is latched and must be treated as read-to-clear.h]h?worst_peak_mse is latched and must be treated as read-to-clear.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hReturn: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if measurements are not yet available.h]hReturn: 0 on success. On failure, returns a negative errno code, such as -EOPNOTSUPP if MSE measurement is not supported by the PHY or in the current link mode, or -EAGAIN if measurements are not yet available.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h7``get_plca_cfg`` Return the current PLCA configuration h](j)}(h``get_plca_cfg``h]j)}(hjwh]h get_plca_cfg}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjqubj)}(hhh]jX)}(h%Return the current PLCA configurationh]h%Return the current PLCA configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h,``set_plca_cfg`` Set the PLCA configuration h](j)}(h``set_plca_cfg``h]j)}(hjh]h set_plca_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hSet the PLCA configurationh]hSet the PLCA configuration}(hjɤhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjŤhMhjƤubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŤhMhjuubj)}(h8``get_plca_status`` Return the current PLCA status info h](j)}(h``get_plca_status``h]j)}(hjh]hget_plca_status}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h#Return the current PLCA status infoh]h#Return the current PLCA status info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h``led_brightness_set`` Set a PHY LED brightness. Index indicates which of the PHYs led should be set. Value follows the standard LED class meaning, e.g. LED_OFF, LED_HALF, LED_FULL. h](j)}(h``led_brightness_set``h]j)}(hj"h]hled_brightness_set}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hSet a PHY LED brightness. Index indicates which of the PHYs led should be set. Value follows the standard LED class meaning, e.g. LED_OFF, LED_HALF, LED_FULL.h]hSet a PHY LED brightness. Index indicates which of the PHYs led should be set. Value follows the standard LED class meaning, e.g. LED_OFF, LED_HALF, LED_FULL.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjuubj)}(hX/``led_blink_set`` Set a PHY LED blinking. Index indicates which of the PHYs led should be configured to blink. Delays are in milliseconds and if both are zero then a sensible default should be chosen. The call should adjust the timings in that case and if it can't match the values specified exactly. h](j)}(h``led_blink_set``h]j)}(hj\h]h led_blink_set}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjVubj)}(hhh]jX)}(hXSet a PHY LED blinking. Index indicates which of the PHYs led should be configured to blink. Delays are in milliseconds and if both are zero then a sensible default should be chosen. The call should adjust the timings in that case and if it can't match the values specified exactly.h]hXSet a PHY LED blinking. Index indicates which of the PHYs led should be configured to blink. Delays are in milliseconds and if both are zero then a sensible default should be chosen. The call should adjust the timings in that case and if it can’t match the values specified exactly.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjuubj)}(h``led_hw_is_supported`` Can the HW support the given rules. **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The core is interested in these rules Return 0 if yes, -EOPNOTSUPP if not, or an error code. h](j)}(h``led_hw_is_supported``h]j)}(hjh]hled_hw_is_supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hCan the HW support the given rules. **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The core is interested in these rulesh](h$Can the HW support the given rules. }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: PHY device which has the LED }(hjhhhNhNubj)}(h **index**h]hindex}(hjɥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: Which LED of the PHY device }(hjhhhNhNubj)}(h **rules**h]hrules}(hjۥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& The core is interested in these rules}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h7Return 0 if yes, -EOPNOTSUPP if not, or an error code.h]h7Return 0 if yes, -EOPNOTSUPP if not, or an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(h``led_hw_control_set`` Set the HW to control the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The rules used to control the LED Returns 0, or a an error code. h](j)}(h``led_hw_control_set``h]j)}(hjh]hled_hw_control_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hSet the HW to control the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** The rules used to control the LEDh](hSet the HW to control the LED }(hj-hhhNhNubj)}(h**dev**h]hdev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh: PHY device which has the LED }(hj-hhhNhNubj)}(h **index**h]hindex}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh: Which LED of the PHY device }(hj-hhhNhNubj)}(h **rules**h]hrules}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh" The rules used to control the LED}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj*ubjX)}(hReturns 0, or a an error code.h]hReturns 0, or a an error code.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)hMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjuubj)}(hXq``led_hw_control_get`` Get how the HW is controlling the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** Pointer to the rules used to control the LED Set ***rules** to how the HW is currently blinking. Returns 0 on success, or a error code if the current blinking cannot be represented in rules, or some other error happens. h](j)}(h``led_hw_control_get``h]j)}(hjh]hled_hw_control_get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hGet how the HW is controlling the LED **dev**: PHY device which has the LED **index**: Which LED of the PHY device **rules** Pointer to the rules used to control the LEDh](h&Get how the HW is controlling the LED }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: PHY device which has the LED }(hjhhhNhNubj)}(h **index**h]hindex}(hjŦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: Which LED of the PHY device }(hjhhhNhNubj)}(h **rules**h]hrules}(hjצhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- Pointer to the rules used to control the LED}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hSet ***rules** to how the HW is currently blinking. Returns 0 on success, or a error code if the current blinking cannot be represented in rules, or some other error happens.h](hSet }(hjhhhNhNubj)}(h ***rules**h]h*rules}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to how the HW is currently blinking. Returns 0 on success, or a error code if the current blinking cannot be represented in rules, or some other error happens.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubj)}(hX)``led_polarity_set`` Set the LED polarity modes **dev**: PHY device which has the LED **index**: Which LED of the PHY device **modes**: bitmap of LED polarity modes Configure LED with all the required polarity modes in **modes** to make it correctly turn ON or OFF. Returns 0, or an error code. h](j)}(h``led_polarity_set``h]j)}(hj#h]hled_polarity_set}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hSet the LED polarity modes **dev**: PHY device which has the LED **index**: Which LED of the PHY device **modes**: bitmap of LED polarity modesh](hSet the LED polarity modes }(hj<hhhNhNubj)}(h**dev**h]hdev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh: PHY device which has the LED }(hj<hhhNhNubj)}(h **index**h]hindex}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh: Which LED of the PHY device }(hj<hhhNhNubj)}(h **modes**h]hmodes}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh: bitmap of LED polarity modes}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj9ubjX)}(hdConfigure LED with all the required polarity modes in **modes** to make it correctly turn ON or OFF.h](h6Configure LED with all the required polarity modes in }(hjhhhNhNubj)}(h **modes**h]hmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% to make it correctly turn ON or OFF.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj9ubjX)}(hReturns 0, or an error code.h]hReturns 0, or an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMhj9ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjuubj)}(hXY``get_next_update_time`` Get the time until the next update event **dev**: PHY device Callback to determine the time (in jiffies) until the next update event for the PHY state machine. Allows PHY drivers to dynamically adjust polling intervals based on link state or other conditions. Returns the time in jiffies until the next update event. h](j)}(h``get_next_update_time``h]j)}(hj§h]hget_next_update_time}(hjħhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](jX)}(hmediums and port->lanes fields must be set, possibly according to strapping information. The PHY driver must set the port->interfaces field to indicate the possible MII modes that this PHY can output on the port. Returns 0, or an error code. h](j)}(h``attach_mii_port``h]j)}(hj+h]hattach_mii_port}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj%ubj)}(hhh](jX)}(hhAttach the given MII port to the PHY device **dev**: PHY device to notify **port**: The port being addedh](h,Attach the given MII port to the PHY device }(hjDhhhNhNubj)}(h**dev**h]hdev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh: PHY device to notify }(hjDhhhNhNubj)}(h**port**h]hport}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh: The port being added}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubjX)}(hDCalled when an MII port that needs to be driven by the PHY is found.h]hDCalled when an MII port that needs to be driven by the PHY is found.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubjX)}(hThe port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties.h]hThe port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubjX)}(hIf the port isn't initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information.h]hIf the port isn’t initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubjX)}(h{The PHY driver must set the port->interfaces field to indicate the possible MII modes that this PHY can output on the port.h]h{The PHY driver must set the port->interfaces field to indicate the possible MII modes that this PHY can output on the port.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjAubjX)}(hReturns 0, or an error code.h]hReturns 0, or an error code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhjuubj)}(hX``attach_mdi_port`` Attach the given MII port to the PHY device **dev**: PHY device to notify **port**: The port being added Called when a port that needs to be driven by the PHY is found. The number of time this will be called depends on phydev->max_n_ports, which the driver can change in .probe(). The port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties. If the port isn't initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information. Returns 0, or an error code.h](j)}(h``attach_mdi_port``h]j)}(hjӨh]hattach_mdi_port}(hjըhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjѨubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjͨubj)}(hhh](jX)}(hhAttach the given MII port to the PHY device **dev**: PHY device to notify **port**: The port being addedh](h,Attach the given MII port to the PHY device }(hjhhhNhNubj)}(h**dev**h]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: PHY device to notify }(hjhhhNhNubj)}(h**port**h]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: The port being added}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubjX)}(hCalled when a port that needs to be driven by the PHY is found. The number of time this will be called depends on phydev->max_n_ports, which the driver can change in .probe().h]hCalled when a port that needs to be driven by the PHY is found. The number of time this will be called depends on phydev->max_n_ports, which the driver can change in .probe().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hThe port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties.h]hThe port that is being passed may or may not be initialized. If it is already initialized, it is by the generic port representation from devicetree, which superseeds any strapping or vendor-specific properties.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hIf the port isn't initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information.h]hIf the port isn’t initialized, the port->mediums and port->lanes fields must be set, possibly according to strapping information.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hReturns 0, or an error code.h]hReturns 0, or an error code.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ]h"]h$]h&]uh1jhjͨubeh}(h]h ]h"]h$]h&]uh1jhjhMhjuubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubjX)}(h**Description**h]j)}(hjvh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubjX)}(hXAll functions are optional. If config_aneg or read_status are not implemented, the phy core uses the genphy versions. Note that none of these functions should be called from interrupt time. The goal is for the bus read/write functions to be able to block when the bus transaction is happening, and be freed up by an interrupt (The MPC85xx has this ability, though it is not currently supported in the driver).h]hXAll functions are optional. If config_aneg or read_status are not implemented, the phy core uses the genphy versions. Note that none of these functions should be called from interrupt time. The goal is for the bus read/write functions to be able to block when the bus transaction is happening, and be freed up by an interrupt (The MPC85xx has this ability, though it is not currently supported in the driver).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hjnhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_id_compare (C function)c.phy_id_comparehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0bool phy_id_compare (u32 id1, u32 id2, u32 mask)h]h)}(h/bool phy_id_compare(u32 id1, u32 id2, u32 mask)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM*ubj)}(h h]h }(hj©hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM*ubj)}(hphy_id_compareh]j%)}(hphy_id_compareh]hphy_id_compare}(hjԩhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjЩubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM*ubj)}(h(u32 id1, u32 id2, u32 mask)h](j)}(hu32 id1h](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj֩sbc.phy_id_compareasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hid1h]hid1}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu32 id2h](h)}(hhh]j%)}(hu32h]hu32}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]jc.phy_id_compareasbuh1hhj6ubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj%)}(hid2h]hid2}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu32 maskh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_id_compareasbuh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~ubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM*ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM*ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM*hjhhubjS)}(hhh]jX)}(h7compare **id1** with **id2** taking account of **mask**h](hcompare }(hj۪hhhNhNubj)}(h**id1**h]hid1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۪ubh with }(hj۪hhhNhNubj)}(h**id2**h]hid2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۪ubh taking account of }(hj۪hhhNhNubj)}(h**mask**h]hmask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۪ubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM*hjتhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM*ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhjnhNhNubj})}(hX=**Parameters** ``u32 id1`` first PHY ID ``u32 id2`` second PHY ID ``u32 mask`` the PHY ID mask, set bits are significant in matching **Description** Return true if the bits from **id1** and **id2** specified by **mask** match. This uses an equivalent test to (**id** & **mask**) == (**phy_id** & **mask**).h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM.hj)ubj)}(hhh](j)}(h``u32 id1`` first PHY ID h](j)}(h ``u32 id1``h]j)}(hjNh]hu32 id1}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM+hjHubj)}(hhh]jX)}(h first PHY IDh]h first PHY ID}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjchM+hjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchM+hjEubj)}(h``u32 id2`` second PHY ID h](j)}(h ``u32 id2``h]j)}(hjh]hu32 id2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM,hjubj)}(hhh]jX)}(h second PHY IDh]h second PHY ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjEubj)}(hC``u32 mask`` the PHY ID mask, set bits are significant in matching h](j)}(h ``u32 mask``h]j)}(hjh]hu32 mask}(hj«hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM-hjubj)}(hhh]jX)}(h5the PHY ID mask, set bits are significant in matchingh]h5the PHY ID mask, set bits are significant in matching}(hj٫hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjիhM-hj֫ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjիhM-hjEubeh}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM/hj)ubjX)}(hReturn true if the bits from **id1** and **id2** specified by **mask** match. This uses an equivalent test to (**id** & **mask**) == (**phy_id** & **mask**).h](hReturn true if the bits from }(hjhhhNhNubj)}(h**id1**h]hid1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**id2**h]hid2}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh specified by }(hjhhhNhNubj)}(h**mask**h]hmask}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) match. This uses an equivalent test to (}(hjhhhNhNubj)}(h**id**h]hid}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h**mask**h]hmask}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) == (}(hjhhhNhNubj)}(h **phy_id**h]hphy_id}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }hjsbj)}(h**mask**h]hmask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM.hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_id_compare_vendor (C function)c.phy_id_compare_vendorhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4bool phy_id_compare_vendor (u32 id, u32 vendor_mask)h]h)}(h3bool phy_id_compare_vendor(u32 id, u32 vendor_mask)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM8ubj)}(h h]h }(hj̬hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjˬhM8ubj)}(hphy_id_compare_vendorh]j%)}(hphy_id_compare_vendorh]hphy_id_compare_vendor}(hjެhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjڬubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjˬhM8ubj)}(h(u32 id, u32 vendor_mask)h](j)}(hu32 idh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_id_compare_vendorasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hidh]hid}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu32 vendor_maskh](h)}(hhh]j%)}(hu32h]hu32}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]jc.phy_id_compare_vendorasbuh1hhj@ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj%)}(h vendor_maskh]h vendor_mask}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjˬhM8ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjˬhM8ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjˬhM8hjhhubjS)}(hhh]jX)}(h#compare **id** with **vendor** maskh](hcompare }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with }(hjhhhNhNubj)}(h **vendor**h]hvendor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh mask}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM8hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjˬhM8ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj٭jxj٭jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``u32 id`` PHY ID ``u32 vendor_mask`` PHY Vendor mask **Return** true if the bits from **id** match **vendor** using the generic PHY Vendor mask.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjݭubj)}(hhh](j)}(h``u32 id`` PHY ID h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM9hjubj)}(hhh]jX)}(hPHY IDh]hPHY ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM9hjubj)}(h$``u32 vendor_mask`` PHY Vendor mask h](j)}(h``u32 vendor_mask``h]j)}(hj;h]hu32 vendor_mask}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM:hj5ubj)}(hhh]jX)}(hPHY Vendor maskh]hPHY Vendor mask}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhM:hjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhM:hjubeh}(h]h ]h"]h$]h&]uh1jhjݭubjX)}(h **Return**h]j)}(hjvh]hReturn}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjݭubjX)}(hPtrue if the bits from **id** match **vendor** using the generic PHY Vendor mask.h](htrue if the bits from }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh match }(hjhhhNhNubj)}(h **vendor**h]hvendor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# using the generic PHY Vendor mask.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjݭubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_id_compare_model (C function)c.phy_id_compare_modelhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2bool phy_id_compare_model (u32 id, u32 model_mask)h]h)}(h1bool phy_id_compare_model(u32 id, u32 model_mask)h](j)}(hjTh]hbool}(hj߮hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۮhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjۮhhhjhMEubj)}(hphy_id_compare_modelh]j%)}(hphy_id_compare_modelh]hphy_id_compare_model}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjۮhhhjhMEubj)}(h(u32 id, u32 model_mask)h](j)}(hu32 idh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.phy_id_compare_modelasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hidh]hid}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu32 model_maskh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjjmodnameN classnameNjj!)}j$]j:c.phy_id_compare_modelasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj%)}(h model_maskh]h model_mask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjۮhhhjhMEubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj׮hhhjhMEubah}(h]jҮah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMEhjԮhhubjS)}(hhh]jX)}(h"compare **id** with **model** maskh](hcompare }(hjhhhNhNubj)}(h**id**h]hid}(hjƯhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with }(hjhhhNhNubj)}(h **model**h]hmodel}(hjدhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh mask}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEhjhhubah}(h]h ]h"]h$]h&]uh1jRhjԮhhhjhMEubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``u32 id`` PHY ID ``u32 model_mask`` PHY Model mask **Return** true if the bits from **id** match **model** using the generic PHY Model mask.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMIhjubj)}(hhh](j)}(h``u32 id`` PHY ID h](j)}(h ``u32 id``h]j)}(hj#h]hu32 id}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMFhjubj)}(hhh]jX)}(hPHY IDh]hPHY ID}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8hMFhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMFhjubj)}(h"``u32 model_mask`` PHY Model mask h](j)}(h``u32 model_mask``h]j)}(hj\h]hu32 model_mask}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMGhjVubj)}(hhh]jX)}(hPHY Model maskh]hPHY Model mask}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqhMGhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMGhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMIhjubjX)}(hNtrue if the bits from **id** match **model** using the generic PHY Model mask.h](htrue if the bits from }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh match }(hjhhhNhNubj)}(h **model**h]hmodel}(hjǰhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" using the generic PHY Model mask.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphydev_id_compare (C function)c.phydev_id_comparehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h:bool phydev_id_compare (struct phy_device *phydev, u32 id)h]h)}(h9bool phydev_id_compare(struct phy_device *phydev, u32 id)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMRubj)}(hphydev_id_compareh]j%)}(hphydev_id_compareh]hphydev_id_compare}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMRubj)}(h#(struct phy_device *phydev, u32 id)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj"sbc.phydev_id_compareasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubj)}(hu32 idh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jvc.phydev_id_compareasbuh1hhjubj)}(h h]h }(hjϱhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hidh]hid}(hjݱhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMRubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMRhjhhubjS)}(hhh]jX)}(h*compare **id** with the PHY's Clause 22 IDh](hcompare }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh with the PHY’s Clause 22 ID}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhjnhNhNubj})}(hX2**Parameters** ``struct phy_device *phydev`` the PHY device ``u32 id`` the PHY ID to be matched **Description** Compare the **phydev** clause 22 ID with the provided **id** and return true or false depending whether it matches, using the bound driver mask. The **phydev** must be bound to a driver.h](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhj5ubj)}(hhh](j)}(h-``struct phy_device *phydev`` the PHY device h](j)}(h``struct phy_device *phydev``h]j)}(hjZh]hstruct phy_device *phydev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMShjTubj)}(hhh]jX)}(hthe PHY deviceh]hthe PHY device}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjohMShjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMShjQubj)}(h$``u32 id`` the PHY ID to be matched h](j)}(h ``u32 id``h]j)}(hjh]hu32 id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMThjubj)}(hhh]jX)}(hthe PHY ID to be matchedh]hthe PHY ID to be matched}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubjX)}(h**Description**h]j)}(hjβh]h Description}(hjвhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̲ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMVhj5ubjX)}(hCompare the **phydev** clause 22 ID with the provided **id** and return true or false depending whether it matches, using the bound driver mask. The **phydev** must be bound to a driver.h](h Compare the }(hjhhhNhNubj)}(h **phydev**h]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh clause 22 ID with the provided }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhY and return true or false depending whether it matches, using the bound driver mask. The }(hjhhhNhNubj)}(h **phydev**h]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh must be bound to a driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMUhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_is_started (C function)c.phy_is_startedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/bool phy_is_started (struct phy_device *phydev)h]h)}(h.bool phy_is_started(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMfubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEhhhjVhMfubj)}(hphy_is_startedh]j%)}(hphy_is_startedh]hphy_is_started}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjEhhhjVhMfubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjksbc.phy_is_startedasbuh1hhjubj)}(h h]h }(hjóhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjѳhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj޳hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubah}(h]h ]h"]h$]h&]j<j=uh1jhjEhhhjVhMfubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjAhhhjVhMfubah}(h]j<ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjVhMfhj>hhubjS)}(hhh]jX)}(h4Convenience function to check whether PHY is startedh]h4Convenience function to check whether PHY is started}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMfhjhhubah}(h]h ]h"]h$]h&]uh1jRhj>hhhjVhMfubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` The phy_device structh](jX)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMjhj$ubj)}(hhh]j)}(h3``struct phy_device *phydev`` The phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjIh]hstruct phy_device *phydev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMlhjCubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMlhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_driver_is_genphy (C function)c.phy_driver_is_genphyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h5bool phy_driver_is_genphy (struct phy_device *phydev)h]h)}(h4bool phy_driver_is_genphy(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMoubj)}(hphy_driver_is_genphyh]j%)}(hphy_driver_is_genphyh]hphy_driver_is_genphy}(hjôhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMoubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjߴhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj۴ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj۴ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjŴsbc.phy_driver_is_genphyasbuh1hhj۴ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj۴ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj۴ubj%)}(hphydevh]hphydev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj۴ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj״ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMoubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMoubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMohjhhubjS)}(hhh]jX)}(hUConvenience function to check whether PHY is driven by one of the generic PHY driversh]hUConvenience function to check whether PHY is driven by one of the generic PHY drivers}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMohj_hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMoubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct **Return** true if PHY is driven by one of the genphy driversh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMshj~ubj)}(hhh]j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMqhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMqhjubah}(h]h ]h"]h$]h&]uh1jhj~ubjX)}(h **Return**h]j)}(hj޵h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܵubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMshj~ubjX)}(h2true if PHY is driven by one of the genphy driversh]h2true if PHY is driven by one of the genphy drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMrhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_disable_eee_mode (C function)c.phy_disable_eee_modehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDvoid phy_disable_eee_mode (struct phy_device *phydev, u32 link_mode)h]h)}(hCvoid phy_disable_eee_mode(struct phy_device *phydev, u32 link_mode)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMzubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj1hMzubj)}(hphy_disable_eee_modeh]j%)}(hphy_disable_eee_modeh]hphy_disable_eee_mode}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj1hMzubj)}(h*(struct phy_device *phydev, u32 link_mode)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjFsbc.phy_disable_eee_modeasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(h u32 link_modeh](h)}(hhh]j%)}(hu32h]hu32}(hjնhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjҶubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj׶modnameN classnameNjj!)}j$]jc.phy_disable_eee_modeasbuh1hhjζubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjζubj%)}(h link_modeh]h link_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjζubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj1hMzubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMzubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMzhjhhubjS)}(hhh]jX)}(hDon't advertise an EEE mode.h]hDon’t advertise an EEE mode.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMzhj(hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMzubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhjnhNhNubj})}(hv**Parameters** ``struct phy_device *phydev`` The phy_device struct ``u32 link_mode`` The EEE mode to be disabledh](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM~hjGubj)}(hhh](j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjlh]hstruct phy_device *phydev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM{hjfubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjcubj)}(h-``u32 link_mode`` The EEE mode to be disabledh](j)}(h``u32 link_mode``h]j)}(hjh]h u32 link_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM}hjubj)}(hhh]jX)}(hThe EEE mode to be disabledh]hThe EEE mode to be disabled}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjcubeh}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_can_wakeup (C function)c.phy_can_wakeuphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/bool phy_can_wakeup (struct phy_device *phydev)h]h)}(h.bool phy_can_wakeup(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hphy_can_wakeuph]j%)}(hphy_can_wakeuph]hphy_can_wakeup}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]j')}jj!sbc.phy_can_wakeupasbuh1hhj7ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h9indicate whether PHY has driver model wakeup capabilitiesh]h9indicate whether PHY has driver model wakeup capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjָjxjָjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct **Return** true/false depending on the PHY driver's device_set_wakeup_capable() setting.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj޸ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjڸubj)}(hhh]j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjڸubjX)}(h **Return**h]j)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjڸubjX)}(hMtrue/false depending on the PHY driver's device_set_wakeup_capable() setting.h]hOtrue/false depending on the PHY driver’s device_set_wakeup_capable() setting.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjڸubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_may_wakeup (C function)c.phy_may_wakeuphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/bool phy_may_wakeup (struct phy_device *phydev)h]h)}(h.bool phy_may_wakeup(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{hhhjhMubj)}(hphy_may_wakeuph]j%)}(hphy_may_wakeuph]hphy_may_wakeup}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj{hhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjȹhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjٹhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjֹubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj۹modnameN classnameNjj!)}j$]j')}jjsbc.phy_may_wakeupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjwhhhjhMubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjthhubjS)}(hhh]jX)}(h'indicate whether PHY has wakeup enabledh]h'indicate whether PHY has wakeup enabled}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj;hhubah}(h]h ]h"]h$]h&]uh1jRhjthhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjVjxjVjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` The phy_device struct **Return** true/false depending on the PHY driver's device_set_wakeup_enabled() setting if using the driver model, otherwise the legacy determination.h](jX)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjZubj)}(hhh]j)}(h4``struct phy_device *phydev`` The phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjyubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjZubjX)}(htrue/false depending on the PHY driver's device_set_wakeup_enabled() setting if using the driver model, otherwise the legacy determination.h]htrue/false depending on the PHY driver’s device_set_wakeup_enabled() setting if using the driver model, otherwise the legacy determination.}(hjкhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_read (C function) c.phy_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h4int phy_read (struct phy_device *phydev, u32 regnum)h]h)}(h3int phy_read(struct phy_device *phydev, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hphy_readh]j%)}(hphy_readh]hphy_read}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h'(struct phy_device *phydev, u32 regnum)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj8ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj"sb c.phy_readasbuh1hhj8ubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jv c.phy_readasbuh1hhjubj)}(h h]h }(hjϻhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjݻhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h5Convenience function for reading a given PHY registerh]h5Convenience function for reading a given PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to read **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj#ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjHh]hstruct phy_device *phydev}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjBubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMhj?ubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj{ubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj#ubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjҼhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_read (C function) c.__phy_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int __phy_read (struct phy_device *phydev, u32 regnum)h]h)}(h5int __phy_read(struct phy_device *phydev, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h __phy_readh]j%)}(h __phy_readh]h __phy_read}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h'(struct phy_device *phydev, u32 regnum)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j')}jj$sb c.__phy_readasbuh1hhj:ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jx c.__phy_readasbuh1hhjubj)}(h h]h }(hjѽhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj߽hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj6ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h5convenience function for reading a given PHY registerh]h5convenience function for reading a given PHY register}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!jxj!jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to read **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj%ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjJh]hstruct phy_device *phydev}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjDubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjAubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj}ubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj%ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj%ubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjԾhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_write (C function) c.phy_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h>int phy_write (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(h=int phy_write(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h phy_writeh]j%)}(h phy_writeh]h phy_write}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj<ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]j')}jj&sb c.phy_writeasbuh1hhj<ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj<ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jz c.phy_writeasbuh1hhjubj)}(h h]h }(hjӿhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8ubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jz c.phy_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj8ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h5Convenience function for writing a given PHY registerh]h5Convenience function for writing a given PHY register}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjkjxjkjyjzj{uh1hhhhjnhNhNubj})}(hX,**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjoubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjoubjX)}(h**NOTE**h]j)}(hjOh]hNOTE}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjoubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_write (C function) c.__phy_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h@int __phy_write (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(h?int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h __phy_writeh]j%)}(h __phy_writeh]h __phy_write}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.__phy_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j  c.__phy_writeasbuh1hhj?ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hregnumh]hregnum}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j  c.__phy_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h5Convenience function for writing a given PHY registerh]h5Convenience function for writing a given PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj%h]hstruct phy_device *phydev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj^h]h u32 regnum}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjXubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!__phy_modify_changed (C function)c.__phy_modify_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hSint __phy_modify_changed (struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h]h)}(hRint __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhj3hMubj)}(h__phy_modify_changedh]j%)}(h__phy_modify_changedh]h__phy_modify_changed}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj!hhhj3hMubj)}(h:(struct phy_device *phydev, u32 regnum, u16 mask, u16 set)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjHsbc.__phy_modify_changedasbuh1hhj^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]jc.__phy_modify_changedasbuh1hhjubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]jc.__phy_modify_changedasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubeh}(h]h ]h"]h$]h&]j<j=uh1jhj!hhhj3hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj3hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj3hMhjhhubjS)}(hhh]jX)}(h1Convenience function for modifying a PHY registerh]h1Convenience function for modifying a PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj3hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` ``u32 regnum`` register number ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Description** Unlocked helper function which allows a PHY register to be modified as new register value = (old register value & ~mask) | set Returns negative errno, 0 if there was no change, and 1 in case of changeh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](j)}(hV``struct phy_device *phydev`` a pointer to a :c:type:`struct phy_device ` h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h7a pointer to a :c:type:`struct phy_device `h](ha pointer to a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hj!h]hstruct phy_device}(hj#hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u32 regnum`` register number h](j)}(h``u32 regnum``h]j)}(hjVh]h u32 regnum}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjPubj)}(hhh]jX)}(hregister numberh]hregister number}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h~Unlocked helper function which allows a PHY register to be modified as new register value = (old register value & ~mask) | seth]h~Unlocked helper function which allows a PHY register to be modified as new register value = (old register value & ~mask) | set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(hIReturns negative errno, 0 if there was no change, and 1 in case of changeh]hIReturns negative errno, 0 if there was no change, and 1 in case of change}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_read_mmd_poll_timeout (C macro)c.phy_read_mmd_poll_timeouthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_read_mmd_poll_timeouth]h)}(hphy_read_mmd_poll_timeouth]j)}(hphy_read_mmd_poll_timeouth]j%)}(hjQh]hphy_read_mmd_poll_timeout}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjShhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubah}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjnhMubah}(h]jJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjLhhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhjLhhhjnhMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubjX)}(hk``phy_read_mmd_poll_timeout (phydev, devaddr, regnum, val, cond, sleep_us, timeout_us, sleep_before_read)``h]j)}(hjh]hgphy_read_mmd_poll_timeout (phydev, devaddr, regnum, val, cond, sleep_us, timeout_us, sleep_before_read)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjnhhubj )}(hNPeriodically poll a PHY register until a condition is met or a timeout occurs h]jX)}(hMPeriodically poll a PHY register until a condition is met or a timeout occursh]hMPeriodically poll a PHY register until a condition is met or a timeout occurs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhjnhhubj})}(hX**Parameters** ``phydev`` The phy_device struct ``devaddr`` The MMD to read from ``regnum`` The register on the MMD to read ``val`` Variable to read the register into ``cond`` Break condition (usually involving **val**) ``sleep_us`` Maximum time to sleep between reads in us (0 tight-loops). Please read usleep_range() function description for details and limitations. ``timeout_us`` Timeout in us, 0 means never timeout ``sleep_before_read`` if it is true, sleep **sleep_us** before read. **Return** 0 on success and -ETIMEDOUT upon a timeout. In either case, the last read value at **args** is stored in **val**. Must not be called from atomic context if sleep_us or timeout_us are used.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](j)}(h!``phydev`` The phy_device struct h](j)}(h ``phydev``h]j)}(hjh]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hThe phy_device structh]hThe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h!``devaddr`` The MMD to read from h](j)}(h ``devaddr``h]j)}(hjh]hdevaddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hThe MMD to read fromh]hThe MMD to read from}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(h+``regnum`` The register on the MMD to read h](j)}(h ``regnum``h]j)}(hjSh]hregnum}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjMubj)}(hhh]jX)}(hThe register on the MMD to readh]hThe register on the MMD to read}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h+``val`` Variable to read the register into h](j)}(h``val``h]j)}(hjh]hval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h"Variable to read the register intoh]h"Variable to read the register into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``cond`` Break condition (usually involving **val**) h](j)}(h``cond``h]j)}(hjh]hcond}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h+Break condition (usually involving **val**)h](h#Break condition (usually involving }(hjhhhNhNubj)}(h**val**h]hval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``sleep_us`` Maximum time to sleep between reads in us (0 tight-loops). Please read usleep_range() function description for details and limitations. h](j)}(h ``sleep_us``h]j)}(hjh]hsleep_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj ubj)}(hhh]jX)}(hMaximum time to sleep between reads in us (0 tight-loops). Please read usleep_range() function description for details and limitations.h]hMaximum time to sleep between reads in us (0 tight-loops). Please read usleep_range() function description for details and limitations.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h4``timeout_us`` Timeout in us, 0 means never timeout h](j)}(h``timeout_us``h]j)}(hjJh]h timeout_us}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjDubj)}(hhh]jX)}(h$Timeout in us, 0 means never timeouth]h$Timeout in us, 0 means never timeout}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(hE``sleep_before_read`` if it is true, sleep **sleep_us** before read. h](j)}(h``sleep_before_read``h]j)}(hjh]hsleep_before_read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hj}ubj)}(hhh]jX)}(h.if it is true, sleep **sleep_us** before read.h](hif it is true, sleep }(hjhhhNhNubj)}(h **sleep_us**h]hsleep_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh before read.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubjX)}(h0 on success and -ETIMEDOUT upon a timeout. In either case, the last read value at **args** is stored in **val**. Must not be called from atomic context if sleep_us or timeout_us are used.h](hS0 on success and -ETIMEDOUT upon a timeout. In either case, the last read value at }(hjhhhNhNubj)}(h**args**h]hargs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is stored in }(hjhhhNhNubj)}(h**val**h]hval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL. Must not be called from atomic context if sleep_us or timeout_us are used.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_set_bits (C function)c.__phy_set_bitshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hCint __phy_set_bits (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(hBint __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMAubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhjGhMAubj)}(h__phy_set_bitsh]j%)}(h__phy_set_bitsh]h__phy_set_bits}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhjGhMAubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj\sbc.__phy_set_bitsasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.__phy_set_bitsasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]jc.__phy_set_bitsasbuh1hhj,ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj%)}(hvalh]hval}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhjGhMAubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj1hhhjGhMAubah}(h]j,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGhMAhj.hhubjS)}(hhh]jX)}(h7Convenience function for setting bits in a PHY registerh]h7Convenience function for setting bits in a PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMAhjhhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhjGhMAubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` bits to set **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMBhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMChjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMChjubj)}(h``u16 val`` bits to set h](j)}(h ``u16 val``h]j)}(hj<h]hu16 val}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMDhj6ubj)}(hhh]jX)}(h bits to seth]h bits to set}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMDhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMDhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMFhjubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMEhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_clear_bits (C function)c.__phy_clear_bitshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint __phy_clear_bits (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(hDint __phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMNubj)}(h__phy_clear_bitsh]j%)}(h__phy_clear_bitsh]h__phy_clear_bits}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMNubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_clear_bitsasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]j3c.__phy_clear_bitsasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j3c.__phy_clear_bitsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMNubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMNubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMNhjhhubjS)}(hhh]jX)}(h8Convenience function for clearing bits in a PHY registerh]h8Convenience function for clearing bits in a PHY register}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMNhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMNubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$jxj$jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` bits to clear **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRhj(ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjMh]hstruct phy_device *phydev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMOhjGubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbhMOhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMOhjDubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMPhjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjDubj)}(h``u16 val`` bits to clear h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMQhjubj)}(hhh]jX)}(h bits to clearh]h bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjDubeh}(h]h ]h"]h$]h&]uh1jhj(ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMShj(ubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMRhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_set_bits (C function)c.phy_set_bitshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hAint phy_set_bits (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(h@int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhjMhM\ubj)}(h phy_set_bitsh]j%)}(h phy_set_bitsh]h phy_set_bits}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhjMhM\ubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjbsbc.phy_set_bitsasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_set_bitsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;modnameN classnameNjj!)}j$]jc.phy_set_bitsasbuh1hhj2ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj%)}(hvalh]hval}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubeh}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhjMhM\ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhjMhM\ubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhM\hj4hhubjS)}(hhh]jX)}(h7Convenience function for setting bits in a PHY registerh]h7Convenience function for setting bits in a PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM\hjhhubah}(h]h ]h"]h$]h&]uh1jRhj4hhhjMhM\ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` bits to seth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM`hjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM]hjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj h]h u32 regnum}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM^hjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM^hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubj)}(h``u16 val`` bits to seth](j)}(h ``u16 val``h]j)}(hjBh]hu16 val}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM`hj<ubj)}(hhh]jX)}(h bits to seth]h bits to set}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM_hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM`hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_clear_bits (C function)c.phy_clear_bitshNtauh1hhjnhhhNhNubh)}(hhh](h)}(hCint phy_clear_bits (struct phy_device *phydev, u32 regnum, u16 val)h]h)}(hBint phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMgubj)}(hphy_clear_bitsh]j%)}(hphy_clear_bitsh]hphy_clear_bits}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMgubj)}(h0(struct phy_device *phydev, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_clear_bitsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]jc.phy_clear_bitsasbuh1hhjGubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj%)}(hregnumh]hregnum}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_clear_bitsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMgubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMghjhhubjS)}(hhh]jX)}(h8Convenience function for clearing bits in a PHY registerh]h8Convenience function for clearing bits in a PHY register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMghjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMgubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``u32 regnum`` register number to write ``u16 val`` bits to clearh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMkhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj-h]hstruct phy_device *phydev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhhj'ubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhMhhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhhj$ubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjfh]h u32 regnum}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMihj`ubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMihj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMihj$ubj)}(h``u16 val`` bits to clearh](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMkhjubj)}(hhh]jX)}(h bits to clearh]h bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__phy_set_bits_mmd (C function)c.__phy_set_bits_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hRint __phy_set_bits_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hQint __phy_set_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMrubj)}(h__phy_set_bits_mmdh]j%)}(h__phy_set_bits_mmdh]h__phy_set_bits_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMrubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVmodnameN classnameNjj!)}j$]j')}jjsbc.__phy_set_bits_mmdasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jpc.__phy_set_bits_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*modnameN classnameNjj!)}j$]jpc.__phy_set_bits_mmdasbuh1hhj!ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj%)}(hvalh]hval}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMrubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMrubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMrhjhhubjS)}(hhh]jX)}(h:Convenience function for setting bits in a register on MMDh]h:Convenience function for setting bits in a register on MMD}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMrhj{hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMrubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 val`` bits to set **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMvhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMthjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMuhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMuhjubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hj1h]h u32 regnum}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMvhj+ubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMvhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMvhjubj)}(h``u16 val`` bits to set h](j)}(h ``u16 val``h]j)}(hjjh]hu16 val}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMwhjdubj)}(hhh]jX)}(h bits to seth]h bits to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMyhjubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!__phy_clear_bits_mmd (C function)c.__phy_clear_bits_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hTint __phy_clear_bits_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hSint __phy_clear_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h__phy_clear_bits_mmdh]j%)}(h__phy_clear_bits_mmdh]h__phy_clear_bits_mmd}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]j')}jj sbc.__phy_clear_bits_mmdasbuh1hhj#ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj;)}(hj>h]h*}(hjshhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj#ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jac.__phy_clear_bits_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jac.__phy_clear_bits_mmdasbuh1hhjubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h;Convenience function for clearing bits in a register on MMDh]h;Convenience function for clearing bits in a register on MMD}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 val`` bits to clear **Description** The caller must have taken the MDIO bus lock.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hj"h]h u32 regnum}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubj)}(h``u16 val`` bits to clear h](j)}(h ``u16 val``h]j)}(hj[h]hu16 val}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjUubj)}(hhh]jX)}(h bits to clearh]h bits to clear}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h-The caller must have taken the MDIO bus lock.h]h-The caller must have taken the MDIO bus lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_set_bits_mmd (C function)c.phy_set_bits_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hPint phy_set_bits_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hOint phy_set_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_set_bits_mmdh]j%)}(hphy_set_bits_mmdh]hphy_set_bits_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj8modnameN classnameNjj!)}j$]j')}jjsbc.phy_set_bits_mmdasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jRc.phy_set_bits_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jRc.phy_set_bits_mmdasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h:Convenience function for setting bits in a register on MMDh]h:Convenience function for setting bits in a register on MMD}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjxjxjxjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 val`` bits to seth](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj|ubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj ubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjubj)}(h``u16 val`` bits to seth](j)}(h ``u16 val``h]j)}(hjLh]hu16 val}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjFubj)}(hhh]jX)}(h bits to seth]h bits to set}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_clear_bits_mmd (C function)c.phy_clear_bits_mmdhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hRint phy_clear_bits_mmd (struct phy_device *phydev, int devad, u32 regnum, u16 val)h]h)}(hQint phy_clear_bits_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_clear_bits_mmdh]j%)}(hphy_clear_bits_mmdh]hphy_clear_bits_mmd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h;(struct phy_device *phydev, int devad, u32 regnum, u16 val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_clear_bits_mmdasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj%)}(hdevadh]hdevad}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_clear_bits_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_clear_bits_mmdasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h;Convenience function for clearing bits in a register on MMDh]h;Convenience function for clearing bits in a register on MMD}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj(hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct ``int devad`` the MMD containing register to modify ``u32 regnum`` register number to modify ``u16 val`` bits to clearh](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjGubj)}(hhh](j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjlh]hstruct phy_device *phydev}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjfubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h4``int devad`` the MMD containing register to modify h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h%the MMD containing register to modifyh]h%the MMD containing register to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjcubj)}(h``u16 val`` bits to clearh](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(h bits to clearh]h bits to clear}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjcubeh}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_interrupt_is_valid (C function)c.phy_interrupt_is_validhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7bool phy_interrupt_is_valid (struct phy_device *phydev)h]h)}(h6bool phy_interrupt_is_valid(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjmhhhj~hMubj)}(hphy_interrupt_is_validh]j%)}(hphy_interrupt_is_validh]hphy_interrupt_is_valid}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjmhhhj~hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_interrupt_is_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjmhhhj~hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjihhhj~hMubah}(h]jdah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj~hMhjfhhubjS)}(hhh]jX)}(h0Convenience function for testing a given PHY irqh]h0Convenience function for testing a given PHY irq}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1jRhjfhhhj~hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` the phy_device struct **NOTE** must be kept in sync with addition/removal of PHY_POLL and PHY_MAC_INTERRUPTh](jX)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjLubj)}(hhh]j)}(h4``struct phy_device *phydev`` the phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjqh]hstruct phy_device *phydev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjkubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjLubjX)}(hLmust be kept in sync with addition/removal of PHY_POLL and PHY_MAC_INTERRUPTh]hLmust be kept in sync with addition/removal of PHY_POLL and PHY_MAC_INTERRUPT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_polling_mode (C function)c.phy_polling_modehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1bool phy_polling_mode (struct phy_device *phydev)h]h)}(h0bool phy_polling_mode(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_polling_modeh]j%)}(hphy_polling_modeh]hphy_polling_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj)ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjMmodnameN classnameNjj!)}j$]j')}jjsbc.phy_polling_modeasbuh1hhj)ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)ubj;)}(hj>h]h*}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj)ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hUConvenience function for testing whether polling is used to detect PHY status changesh]hUConvenience function for testing whether polling is used to detect PHY status changes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_has_hwtstamp (C function)c.phy_has_hwtstamphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1bool phy_has_hwtstamp (struct phy_device *phydev)h]h)}(h0bool phy_has_hwtstamp(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhjXhMubj)}(hphy_has_hwtstamph]j%)}(hphy_has_hwtstamph]hphy_has_hwtstamp}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhjXhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjmsbc.phy_has_hwtstampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhjXhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjXhMubah}(h]j>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhMhj@hhubjS)}(hhh]jX)}(h-Tests whether a PHY time stamp configuration.h]h-Tests whether a PHY time stamp configuration.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhjXhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj"jxj"jyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj&ubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjKh]hstruct phy_device *phydev}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjEubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_has_rxtstamp (C function)c.phy_has_rxtstamphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1bool phy_has_rxtstamp (struct phy_device *phydev)h]h)}(h0bool phy_has_rxtstamp(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_has_rxtstamph]j%)}(hphy_has_rxtstamph]hphy_has_rxtstamp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_has_rxtstampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h3Tests whether a PHY supports receive time stamping.h]h3Tests whether a PHY supports receive time stamping.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjahhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|jxj|jyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_has_tsinfo (C function)c.phy_has_tsinfohNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/bool phy_has_tsinfo (struct phy_device *phydev)h]h)}(h.bool phy_has_tsinfo(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(hphy_has_tsinfoh]j%)}(hphy_has_tsinfoh]hphy_has_tsinfo}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]j')}jj!sbc.phy_has_tsinfoasbuh1hhj7ubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(hQTests whether a PHY reports time stamping and/or PTP hardware clock capabilities.h]hQTests whether a PHY reports time stamping and/or PTP hardware clock capabilities.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_has_txtstamp (C function)c.phy_has_txtstamphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1bool phy_has_txtstamp (struct phy_device *phydev)h]h)}(h0bool phy_has_txtstamp(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjfhMubj)}(hphy_has_txtstamph]j%)}(hphy_has_txtstamph]hphy_has_txtstamp}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjUhhhjfhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj{sbc.phy_has_txtstampasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjUhhhjfhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjQhhhjfhMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjfhMhjNhhubjS)}(hhh]jX)}(h4Tests whether a PHY supports transmit time stamping.h]h4Tests whether a PHY supports transmit time stamping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjNhhhjfhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj4ubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjYh]hstruct phy_device *phydev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjSubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_is_default_hwtstamp (C function)c.phy_is_default_hwtstamphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h8bool phy_is_default_hwtstamp (struct phy_device *phydev)h]h)}(h7bool phy_is_default_hwtstamp(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hphy_is_default_hwtstamph]j%)}(hphy_is_default_hwtstamph]hphy_is_default_hwtstamp}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_is_default_hwtstampasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h)Is the PHY hwtstamp the default timestamph]h)Is the PHY hwtstamp the default timestamp}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjohhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hXj**Parameters** ``struct phy_device *phydev`` Pointer to phy_device **Description** This is used to get default timestamping device taking into account the new API choice, which is selecting the timestamping from MAC by default if the phydev does not have default_timestamp flag enabled. **Return** True if phy is the default hw timestamp, false otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh]j)}(h4``struct phy_device *phydev`` Pointer to phy_device h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh]jX)}(hPointer to phy_deviceh]hPointer to phy_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubjX)}(hThis is used to get default timestamping device taking into account the new API choice, which is selecting the timestamping from MAC by default if the phydev does not have default_timestamp flag enabled.h]hThis is used to get default timestamping device taking into account the new API choice, which is selecting the timestamping from MAC by default if the phydev does not have default_timestamp flag enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubjX)}(h9True if phy is the default hw timestamp, false otherwise.h]h9True if phy is the default hw timestamp, false otherwise.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_on_sfp (C function) c.phy_on_sfphNtauh1hhjnhhhNhNubh)}(hhh](h)}(h+bool phy_on_sfp (struct phy_device *phydev)h]h)}(h*bool phy_on_sfp(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVhhhjghMubj)}(h phy_on_sfph]j%)}(h phy_on_sfph]h phy_on_sfp}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjVhhhjghMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj|sb c.phy_on_sfpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjVhhhjghMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjRhhhjghMubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjghMhjOhhubjS)}(hhh]jX)}(h=Convenience function for testing if a PHY is on an SFP moduleh]h=Convenience function for testing if a PHY is on an SFP module}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjghMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhj5ubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjZh]hstruct phy_device *phydev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjTubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phy_interface_mode_is_rgmii (C function)c.phy_interface_mode_is_rgmiihNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7bool phy_interface_mode_is_rgmii (phy_interface_t mode)h]h)}(h6bool phy_interface_mode_is_rgmii(phy_interface_t mode)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM!ubj)}(hphy_interface_mode_is_rgmiih]j%)}(hphy_interface_mode_is_rgmiih]hphy_interface_mode_is_rgmii}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM!ubj)}(h(phy_interface_t mode)h]j)}(hphy_interface_t modeh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_interface_mode_is_rgmiiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmodeh]hmode}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM!ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM!ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM!hjhhubjS)}(hhh]jX)}(hPConvenience function for testing if a PHY interface mode is RGMII (all variants)h]hPConvenience function for testing if a PHY interface mode is RGMII (all variants)}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM!hjHhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM!ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1hhhhjnhNhNubj})}(hM**Parameters** ``phy_interface_t mode`` the :c:type:`phy_interface_t` enumh](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM%hjgubj)}(hhh]j)}(h;``phy_interface_t mode`` the :c:type:`phy_interface_t` enumh](j)}(h``phy_interface_t mode``h]j)}(hjh]hphy_interface_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM'hjubj)}(hhh]jX)}(h"the :c:type:`phy_interface_t` enumh](hthe }(hjhhhNhNubh)}(h:c:type:`phy_interface_t`h]j)}(hjh]hphy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM#hjubh enum}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phy_interface_mode_is_8023z (C function)c.phy_interface_mode_is_8023zhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7bool phy_interface_mode_is_8023z (phy_interface_t mode)h]h)}(h6bool phy_interface_mode_is_8023z(phy_interface_t mode)h](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM,ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM,ubj)}(hphy_interface_mode_is_8023zh]j%)}(hphy_interface_mode_is_8023zh]hphy_interface_mode_is_8023z}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM,ubj)}(h(phy_interface_t mode)h]j)}(hphy_interface_t modeh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]j')}jj+sbc.phy_interface_mode_is_8023zasbuh1hhjAubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj%)}(hmodeh]hmode}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM,ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM,ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM,hjhhubjS)}(hhh]jX)}(h2does the PHY interface mode use 802.3z negotiationh]h2does the PHY interface mode use 802.3z negotiation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM,hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM,ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``phy_interface_t mode`` one of :c:type:`enum phy_interface_t ` **Description** Returns true if the PHY interface mode uses the 16-bit negotiation word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM0hjubj)}(hhh]j)}(hQ``phy_interface_t mode`` one of :c:type:`enum phy_interface_t ` h](j)}(h``phy_interface_t mode``h]j)}(hjh]hphy_interface_t mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM.hjubj)}(hhh]jX)}(h7one of :c:type:`enum phy_interface_t `h](hone of }(hjhhhNhNubh)}(h0:c:type:`enum phy_interface_t `h]j)}(hjh]henum phy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhM.hjubeh}(h]h ]h"]h$]h&]uh1jWhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj;h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM0hjubjX)}(hReturns true if the PHY interface mode uses the 16-bit negotiation word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)h]hReturns true if the PHY interface mode uses the 16-bit negotiation word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_interface_is_rgmii (C function)c.phy_interface_is_rgmiihNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7bool phy_interface_is_rgmii (struct phy_device *phydev)h]h)}(h6bool phy_interface_is_rgmii(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM:ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|hhhjhM:ubj)}(hphy_interface_is_rgmiih]j%)}(hphy_interface_is_rgmiih]hphy_interface_is_rgmii}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj|hhhjhM:ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_interface_is_rgmiiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj|hhhjhM:ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjxhhhjhM:ubah}(h]jsah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM:hjuhhubjS)}(hhh]jX)}(hKConvenience function for testing if a PHY interface is RGMII (all variants)h]hKConvenience function for testing if a PHY interface is RGMII (all variants)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM:hj<hhubah}(h]h ]h"]h$]h&]uh1jRhjuhhhjhM:ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM>hj[ubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM@hjzubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM<hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phy_is_pseudo_fixed_link (C function)c.phy_is_pseudo_fixed_linkhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9bool phy_is_pseudo_fixed_link (struct phy_device *phydev)h]h)}(h8bool phy_is_pseudo_fixed_link(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMDubj)}(hphy_is_pseudo_fixed_linkh]j%)}(hphy_is_pseudo_fixed_linkh]hphy_is_pseudo_fixed_link}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMDubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6modnameN classnameNjj!)}j$]j')}jjsbc.phy_is_pseudo_fixed_linkasbuh1hhjubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMDubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMDhjhhubjS)}(hhh]jX)}(hkConvenience function for testing if this PHY is the CPU port facing side of an Ethernet switch, or similar.h]hkConvenience function for testing if this PHY is the CPU port facing side of an Ethernet switch, or similar.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMDhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` the phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMHhjubj)}(hhh]j)}(h3``struct phy_device *phydev`` the phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMJhjubj)}(hhh]jX)}(hthe phy_device structh]hthe phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_module_driver (C macro)c.phy_module_driverhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hphy_module_driverh]h)}(hphy_module_driverh]j)}(hphy_module_driverh]j%)}(hj.h]hphy_module_driver}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM ubah}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj,hhhjKhM ubah}(h]j'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhM hj)hhubjS)}(hhh]h}(h]h ]h"]h$]h&]uh1jRhj)hhhjKhM ubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjnhNhNubjX)}(h.``phy_module_driver (__phy_drivers, __count)``h]j)}(hjjh]h*phy_module_driver (__phy_drivers, __count)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjnhhubj )}(h)Helper macro for registering PHY drivers h]jX)}(h(Helper macro for registering PHY driversh]h(Helper macro for registering PHY drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubah}(h]h ]h"]h$]h&]uh1j hjhM hjnhhubj})}(hX7**Parameters** ``__phy_drivers`` array of PHY drivers to register ``__count`` Numbers of members in array **Description** Helper macro for PHY drivers which do not do anything special in module init/exit. Each module may only use this macro once, and calling it replaces module_init() and module_exit().h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh](j)}(h3``__phy_drivers`` array of PHY drivers to register h](j)}(h``__phy_drivers``h]j)}(hjh]h __phy_drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh]jX)}(h array of PHY drivers to registerh]h array of PHY drivers to register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h(``__count`` Numbers of members in array h](j)}(h ``__count``h]j)}(hjh]h__count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubj)}(hhh]jX)}(hNumbers of members in arrayh]hNumbers of members in array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubjX)}(hHelper macro for PHY drivers which do not do anything special in module init/exit. Each module may only use this macro once, and calling it replaces module_init() and module_exit().h]hHelper macro for PHY drivers which do not do anything special in module init/exit. Each module may only use this macro once, and calling it replaces module_init() and module_exit().}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:125: ./include/linux/phy.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$genphy_match_phy_device (C function)c.genphy_match_phy_devicehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hXint genphy_match_phy_device (struct phy_device *phydev, const struct phy_driver *phydrv)h]h)}(hWint genphy_match_phy_device(struct phy_device *phydev, const struct phy_driver *phydrv)h](j)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjshhhjhMubj)}(hgenphy_match_phy_deviceh]j%)}(hgenphy_match_phy_deviceh]hgenphy_match_phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjshhhjhMubj)}(h<(struct phy_device *phydev, const struct phy_driver *phydrv)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.genphy_match_phy_deviceasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst struct phy_driver *phydrvh](h)}(hjh]hconst}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj"ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(hhh]j%)}(h phy_driverh]h phy_driver}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]jc.genphy_match_phy_deviceasbuh1hhj"ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj"ubj%)}(hphydrvh]hphydrv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjohhhjhMubah}(h]jjah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjlhhubjS)}(hhh]jX)}(h$match a PHY device with a PHY driverh]h$match a PHY device with a PHY driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``const struct phy_driver *phydrv`` target phy_driver struct **Description** Checks whether the given PHY device matches the specified PHY driver. For Clause 45 PHYs, iterates over the available device identifiers and compares them against the driver's expected PHY ID, applying the provided mask. For Clause 22 PHYs, a direct ID comparison is performed. **Return** 1 if the PHY device matches the driver, 0 otherwise.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h=``const struct phy_driver *phydrv`` target phy_driver struct h](j)}(h#``const struct phy_driver *phydrv``h]j)}(hj<h]hconst struct phy_driver *phydrv}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj6ubj)}(hhh]jX)}(htarget phy_driver structh]htarget phy_driver struct}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubjX)}(hXChecks whether the given PHY device matches the specified PHY driver. For Clause 45 PHYs, iterates over the available device identifiers and compares them against the driver's expected PHY ID, applying the provided mask. For Clause 22 PHYs, a direct ID comparison is performed.h]hXChecks whether the given PHY device matches the specified PHY driver. For Clause 45 PHYs, iterates over the available device identifiers and compares them against the driver’s expected PHY ID, applying the provided mask. For Clause 22 PHYs, a direct ID comparison is performed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubjX)}(h41 if the PHY device matches the driver, 0 otherwise.h]h41 if the PHY device matches the driver, 0 otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hget_phy_device (C function)c.get_phy_devicehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOstruct phy_device * get_phy_device (struct mii_bus *bus, int addr, bool is_c45)h]h)}(hMstruct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jget_phy_devicesbc.get_phy_deviceasbuh1hhjhhhjhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hj1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(hget_phy_deviceh]j%)}(hj h]hget_phy_device}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h,(struct mii_bus *bus, int addr, bool is_c45)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}modnameN classnameNjj!)}j$]jc.get_phy_deviceasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjYubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(h bool is_c45h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(his_c45h]his_c45}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hDreads the specified PHY device and returns its **phy_device** structh](h/reads the specified PHY device and returns its }(hjGhhhNhNubj)}(h**phy_device**h]h phy_device}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh struct}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjqjxjqjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the target MII bus ``int addr`` PHY address on the MII bus ``bool is_c45`` If true the PHY uses the 802.3 clause 45 protocol **Description** Probe for a PHY at **addr** on **bus**. When probing for a clause 22 PHY, then read the ID registers. If we find a valid ID, allocate and return a :c:type:`struct phy_device `. When probing for a clause 45 PHY, read the "devices in package" registers. If the "devices in package" appears valid, read the ID registers for each MMD, allocate and return a :c:type:`struct phy_device `. Returns an allocated :c:type:`struct phy_device ` on success, ``-ENODEV`` if there is no PHY present, or ``-EIO`` on bus access error.h](jX)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM!hjuubj)}(hhh](j)}(h+``struct mii_bus *bus`` the target MII bus h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hthe target MII bush]hthe target MII bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``int addr`` PHY address on the MII bus h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(hPHY address on the MII bush]hPHY address on the MII bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hB``bool is_c45`` If true the PHY uses the 802.3 clause 45 protocol h](j)}(h``bool is_c45``h]j)}(hj h]h bool is_c45}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM!hjubj)}(hhh]jX)}(h1If true the PHY uses the 802.3 clause 45 protocolh]h1If true the PHY uses the 802.3 clause 45 protocol}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hM!hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM!hjubeh}(h]h ]h"]h$]h&]uh1jhjuubjX)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM#hjuubjX)}(h'Probe for a PHY at **addr** on **bus**.h](hProbe for a PHY at }(hj]hhhNhNubj)}(h**addr**h]haddr}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh on }(hj]hhhNhNubj)}(h**bus**h]hbus}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM"hjuubjX)}(hWhen probing for a clause 22 PHY, then read the ID registers. If we find a valid ID, allocate and return a :c:type:`struct phy_device `.h](hkWhen probing for a clause 22 PHY, then read the ID registers. If we find a valid ID, allocate and return a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM$hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM$hjuubjX)}(hWhen probing for a clause 45 PHY, read the "devices in package" registers. If the "devices in package" appears valid, read the ID registers for each MMD, allocate and return a :c:type:`struct phy_device `.h](hWhen probing for a clause 45 PHY, read the “devices in package” registers. If the “devices in package” appears valid, read the ID registers for each MMD, allocate and return a }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM'hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM'hjuubjX)}(hReturns an allocated :c:type:`struct phy_device ` on success, ``-ENODEV`` if there is no PHY present, or ``-EIO`` on bus access error.h](hReturns an allocated }(hjhhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hjh]hstruct phy_device}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM+hjubh on success, }(hjhhhNhNubj)}(h ``-ENODEV``h]h-ENODEV}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if there is no PHY present, or }(hjhhhNhNubj)}(h``-EIO``h]h-EIO}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh on bus access error.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM+hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_device_register (C function)c.phy_device_registerhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3int phy_device_register (struct phy_device *phydev)h]h)}(h2int phy_device_register(struct phy_device *phydev)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMRubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjxhMRubj)}(hphy_device_registerh]j%)}(hphy_device_registerh]hphy_device_register}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfhhhjxhMRubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phy_device_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjfhhhjxhMRubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbhhhjxhMRubah}(h]j]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjxhMRhj_hhubjS)}(hhh]jX)}(h'Register the phy device on the MDIO bush]h'Register the phy device on the MDIO bus}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMRhj'hhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhjxhMRubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhjnhNhNubj})}(h`**Parameters** ``struct phy_device *phydev`` phy_device structure to be added to the MDIO bush](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMVhjFubj)}(hhh]j)}(hN``struct phy_device *phydev`` phy_device structure to be added to the MDIO bush](j)}(h``struct phy_device *phydev``h]j)}(hjkh]hstruct phy_device *phydev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMXhjeubj)}(hhh]jX)}(h0phy_device structure to be added to the MDIO bush]h0phy_device structure to be added to the MDIO bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMShjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMXhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_device_remove (C function)c.phy_device_removehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2void phy_device_remove (struct phy_device *phydev)h]h)}(h1void phy_device_remove(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMyubj)}(hphy_device_removeh]j%)}(hphy_device_removeh]hphy_device_remove}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMyubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jjsbc.phy_device_removeasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj[hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMyubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMyubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMyhjhhubjS)}(hhh]jX)}(h;Remove a previously registered phy device from the MDIO bush]h;Remove a previously registered phy device from the MDIO bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMyubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` phy_device structure to remove **Description** This doesn't free the phy_device itself, it merely reverses the effects of phy_device_register(). Use phy_device_free() to free the device after calling this function.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM}hjubj)}(hhh]j)}(h=``struct phy_device *phydev`` phy_device structure to remove h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMzhjubj)}(hhh]jX)}(hphy_device structure to removeh]hphy_device structure to remove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM|hjubjX)}(hThis doesn't free the phy_device itself, it merely reverses the effects of phy_device_register(). Use phy_device_free() to free the device after calling this function.h]hThis doesn’t free the phy_device itself, it merely reverses the effects of phy_device_register(). Use phy_device_free() to free the device after calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM{hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_get_c45_ids (C function)c.phy_get_c45_idshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/int phy_get_c45_ids (struct phy_device *phydev)h]h)}(h.int phy_get_c45_ids(struct phy_device *phydev)h](j)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBhhhjThMubj)}(hphy_get_c45_idsh]j%)}(hphy_get_c45_idsh]hphy_get_c45_ids}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjBhhhjThMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjisbc.phy_get_c45_idsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubah}(h]h ]h"]h$]h&]j<j=uh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj>hhhjThMubah}(h]j9ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjThMhj;hhubjS)}(hhh]jX)}(h"Read 802.3-c45 IDs for phy device.h]h"Read 802.3-c45 IDs for phy device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhjThMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` phy_device structure to read 802.3-c45 IDs **Description** Returns zero on success, ``-EIO`` on bus access error, or ``-ENODEV`` if the "devices in package" is invalid.h](jX)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj"ubj)}(hhh]j)}(hI``struct phy_device *phydev`` phy_device structure to read 802.3-c45 IDs h](j)}(h``struct phy_device *phydev``h]j)}(hjGh]hstruct phy_device *phydev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjAubj)}(hhh]jX)}(h*phy_device structure to read 802.3-c45 IDsh]h*phy_device structure to read 802.3-c45 IDs}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj"ubjX)}(hmReturns zero on success, ``-EIO`` on bus access error, or ``-ENODEV`` if the "devices in package" is invalid.h](hReturns zero on success, }(hjhhhNhNubj)}(h``-EIO``h]h-EIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh on bus access error, or }(hjhhhNhNubj)}(h ``-ENODEV``h]h-ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, if the “devices in package” is invalid.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_find_next (C function)c.phy_find_nexthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOstruct phy_device * phy_find_next (struct mii_bus *bus, struct phy_device *pos)h]h)}(hMstruct phy_device *phy_find_next(struct mii_bus *bus, struct phy_device *pos)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}j phy_find_nextsbc.phy_find_nextasbuh1hhjhhhjhMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(h phy_find_nexth]j%)}(hj(h]h phy_find_next}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h-(struct mii_bus *bus, struct phy_device *pos)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j&c.phy_find_nextasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjaubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubj)}(hstruct phy_device *posh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j&c.phy_find_nextasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hposh]hpos}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj]ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h$finds the next PHY device on the bush]h$finds the next PHY device on the bus}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjShhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjnjxjnjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct mii_bus *bus`` the target MII bus ``struct phy_device *pos`` cursor **Return** next phy_device on the bus, or NULLh](jX)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjrubj)}(hhh](j)}(h+``struct mii_bus *bus`` the target MII bus h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hthe target MII bush]hthe target MII bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h"``struct phy_device *pos`` cursor h](j)}(h``struct phy_device *pos``h]j)}(hjh]hstruct phy_device *pos}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hcursorh]hcursor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjrubjX)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjrubjX)}(h#next phy_device on the bus, or NULLh]h#next phy_device on the bus, or NULL}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_connect_direct (C function)c.phy_connect_directhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hint phy_connect_direct (struct net_device *dev, struct phy_device *phydev, void (*handler)(struct net_device *), phy_interface_t interface)h]h)}(hint phy_connect_direct(struct net_device *dev, struct phy_device *phydev, void (*handler)(struct net_device*), phy_interface_t interface)h](j)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLhhhj^hMubj)}(hphy_connect_directh]j%)}(hphy_connect_directh]hphy_connect_direct}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjmubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjLhhhj^hMubj)}(hs(struct net_device *dev, struct phy_device *phydev, void (*handler)(struct net_device*), phy_interface_t interface)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjssbc.phy_connect_directasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_connect_directasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h#void (*handler)(struct net_device*)h](j)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubj;)}(hjmh]h(}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj%)}(hhandlerh]hhandler}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjkubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj;)}(hjmh]h(}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_connect_directasbuh1hhjkubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]jc.phy_connect_directasbuh1hhj*ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj%)}(h interfaceh]h interface}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjLhhhj^hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhj^hMubah}(h]jCah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^hMhjEhhubjS)}(hhh]jX)}(h3connect an ethernet device to a specific phy_deviceh]h3connect an ethernet device to a specific phy_device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjEhhhj^hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct net_device *dev`` the network device to connect ``struct phy_device *phydev`` the pointer to the phy device ``void (*handler)(struct net_device *)`` callback function for state change notifications ``phy_interface_t interface`` PHY device's interfaceh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh](j)}(h9``struct net_device *dev`` the network device to connect h](j)}(h``struct net_device *dev``h]j)}(hjh]hstruct net_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hthe network device to connecth]hthe network device to connect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``struct phy_device *phydev`` the pointer to the phy device h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hthe pointer to the phy deviceh]hthe pointer to the phy device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hZ``void (*handler)(struct net_device *)`` callback function for state change notifications h](j)}(h(``void (*handler)(struct net_device *)``h]j)}(hj:h]h$void (*handler)(struct net_device *)}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj4ubj)}(hhh]jX)}(h0callback function for state change notificationsh]h0callback function for state change notifications}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhjubj)}(h4``phy_interface_t interface`` PHY device's interfaceh](j)}(h``phy_interface_t interface``h]j)}(hjsh]hphy_interface_t interface}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjmubj)}(hhh]jX)}(hPHY device's interfaceh]hPHY device’s interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_connect (C function) c.phy_connecthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hstruct phy_device * phy_connect (struct net_device *dev, const char *bus_id, void (*handler)(struct net_device *), phy_interface_t interface)h]h)}(hstruct phy_device *phy_connect(struct net_device *dev, const char *bus_id, void (*handler)(struct net_device*), phy_interface_t interface)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}j phy_connectsb c.phy_connectasbuh1hhjhhhjhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhjhMubj)}(h phy_connecth]j%)}(hj h]h phy_connect}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hl(struct net_device *dev, const char *bus_id, void (*handler)(struct net_device*), phy_interface_t interface)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjCubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]j c.phy_connectasbuh1hhjCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjCubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjCubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(hconst char *bus_idh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbus_idh]hbus_id}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(h#void (*handler)(struct net_device*)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hjmh]h(}(hj0hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hhandlerh]hhandler}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubj;)}(hjh]h)}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjmh]h(}(hjehhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubh)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.phy_connectasbuh1hhjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj;)}(hjh]h)}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.phy_connectasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h*connect an ethernet device to a PHY deviceh]h*connect an ethernet device to a PHY device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjDjxjDjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct net_device *dev`` the network device to connect ``const char *bus_id`` the id string of the PHY device to connect ``void (*handler)(struct net_device *)`` callback function for state change notifications ``phy_interface_t interface`` PHY device's interface **Description** Convenience function for connecting ethernet devices to PHY devices. The default behavior is for the PHY infrastructure to handle everything, and only notify the connected driver when the link status changes. If you don't want, or can't use the provided functionality, you may choose to call only the subset of functions which provide the desired functionality.h](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjHubj)}(hhh](j)}(h9``struct net_device *dev`` the network device to connect h](j)}(h``struct net_device *dev``h]j)}(hjmh]hstruct net_device *dev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjgubj)}(hhh]jX)}(hthe network device to connecth]hthe network device to connect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(hB``const char *bus_id`` the id string of the PHY device to connect h](j)}(h``const char *bus_id``h]j)}(hjh]hconst char *bus_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(h*the id string of the PHY device to connecth]h*the id string of the PHY device to connect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(hZ``void (*handler)(struct net_device *)`` callback function for state change notifications h](j)}(h(``void (*handler)(struct net_device *)``h]j)}(hjh]h$void (*handler)(struct net_device *)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(h0callback function for state change notificationsh]h0callback function for state change notifications}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubj)}(h5``phy_interface_t interface`` PHY device's interface h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(hPHY device's interfaceh]hPHY device’s interface}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjdubeh}(h]h ]h"]h$]h&]uh1jhjHubjX)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjHubj)}(hhh]j)}(hXkConvenience function for connecting ethernet devices to PHY devices. The default behavior is for the PHY infrastructure to handle everything, and only notify the connected driver when the link status changes. If you don't want, or can't use the provided functionality, you may choose to call only the subset of functions which provide the desired functionality.h](j)}(h,Convenience function for connecting etherneth]h,Convenience function for connecting ethernet}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjlubj)}(hhh]jX)}(hX>devices to PHY devices. The default behavior is for the PHY infrastructure to handle everything, and only notify the connected driver when the link status changes. If you don't want, or can't use the provided functionality, you may choose to call only the subset of functions which provide the desired functionality.h]hXBdevices to PHY devices. The default behavior is for the PHY infrastructure to handle everything, and only notify the connected driver when the link status changes. If you don’t want, or can’t use the provided functionality, you may choose to call only the subset of functions which provide the desired functionality.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjiubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_disconnect (C function)c.phy_disconnecthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h/void phy_disconnect (struct phy_device *phydev)h]h)}(h.void phy_disconnect(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hphy_disconnecth]j%)}(hphy_disconnecth]hphy_disconnect}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.phy_disconnectasbuh1hhjubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h?disable interrupts, stop state machine, and detach a PHY deviceh]h?disable interrupts, stop state machine, and detach a PHY device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_attach_direct (C function)c.phy_attach_directhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hoint phy_attach_direct (struct net_device *dev, struct phy_device *phydev, u32 flags, phy_interface_t interface)h]h)}(hnint phy_attach_direct(struct net_device *dev, struct phy_device *phydev, u32 flags, phy_interface_t interface)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj,hMubj)}(hphy_attach_directh]j%)}(hphy_attach_directh]hphy_attach_direct}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj,hMubj)}(hY(struct net_device *dev, struct phy_device *phydev, u32 flags, phy_interface_t interface)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjWubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]j')}jjAsbc.phy_attach_directasbuh1hhjWubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjWubj%)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjWubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_attach_directasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(h u32 flagsh](h)}(hhh]j%)}(hu32h]hu32}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBmodnameN classnameNjj!)}j$]jc.phy_attach_directasbuh1hhj9ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9ubj%)}(hflagsh]hflags}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phy_attach_directasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjSubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj,hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,hMhjhhubjS)}(hhh]jX)}(h5attach a network device to a given PHY device pointerh]h5attach a network device to a given PHY device pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj,hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct net_device *dev`` network device to attach ``struct phy_device *phydev`` Pointer to phy_device to attach ``u32 flags`` PHY device's dev_flags ``phy_interface_t interface`` PHY device's interface **Description** Called by drivers to attach to a particular PHY device. The phy_device is found, and properly hooked up to the phy_driver. If no driver is attached, then a generic driver is used. The phy_device is given a ptr to the attaching device, and given a callback for link status change. The phy_device is returned to the attaching driver. This function takes a reference on the phy device.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh](j)}(h4``struct net_device *dev`` network device to attach h](j)}(h``struct net_device *dev``h]j)}(hj h]hstruct net_device *dev}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj ubj)}(hhh]jX)}(hnetwork device to attachh]hnetwork device to attach}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4 hMhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hMhj ubj)}(h>``struct phy_device *phydev`` Pointer to phy_device to attach h](j)}(h``struct phy_device *phydev``h]j)}(hjX h]hstruct phy_device *phydev}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjR ubj)}(hhh]jX)}(hPointer to phy_device to attachh]hPointer to phy_device to attach}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjm hMhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1jhjm hMhj ubj)}(h%``u32 flags`` PHY device's dev_flags h](j)}(h ``u32 flags``h]j)}(hj h]h u32 flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj ubj)}(hhh]jX)}(hPHY device's dev_flagsh]hPHY device’s dev_flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h5``phy_interface_t interface`` PHY device's interface h](j)}(h``phy_interface_t interface``h]j)}(hj h]hphy_interface_t interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj ubj)}(hhh]jX)}(hPHY device's interfaceh]hPHY device’s interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]j)}(hXCalled by drivers to attach to a particular PHY device. The phy_device is found, and properly hooked up to the phy_driver. If no driver is attached, then a generic driver is used. The phy_device is given a ptr to the attaching device, and given a callback for link status change. The phy_device is returned to the attaching driver. This function takes a reference on the phy device.h](j)}(h/Called by drivers to attach to a particular PHYh]h/Called by drivers to attach to a particular PHY}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj ubj)}(hhh]jX)}(hXQdevice. The phy_device is found, and properly hooked up to the phy_driver. If no driver is attached, then a generic driver is used. The phy_device is given a ptr to the attaching device, and given a callback for link status change. The phy_device is returned to the attaching driver. This function takes a reference on the phy device.h]hXQdevice. The phy_device is found, and properly hooked up to the phy_driver. If no driver is attached, then a generic driver is used. The phy_device is given a ptr to the attaching device, and given a callback for link status change. The phy_device is returned to the attaching driver. This function takes a reference on the phy device.}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj0 hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_attach (C function) c.phy_attachhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hfstruct phy_device * phy_attach (struct net_device *dev, const char *bus_id, phy_interface_t interface)h]h)}(hdstruct phy_device *phy_attach(struct net_device *dev, const char *bus_id, phy_interface_t interface)h](h)}(hjh]hstruct}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjq hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMkubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq hhhj hMkubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}j phy_attachsb c.phy_attachasbuh1hhjq hhhj hMkubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjq hhhj hMkubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjq hhhj hMkubj)}(h phy_attachh]j%)}(hj h]h phy_attach}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjq hhhj hMkubj)}(hG(struct net_device *dev, const char *bus_id, phy_interface_t interface)h](j)}(hstruct net_device *devh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h net_deviceh]h net_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j  c.phy_attachasbuh1hhj ubj)}(h h]h }(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj9 hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hdevh]hdev}(hjF hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hconst char *bus_idh](h)}(hjh]hconst}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[ ubj)}(h h]h }(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ ubj)}(hcharh]hchar}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[ ubj%)}(hbus_idh]hbus_id}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j  c.phy_attachasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(h interfaceh]h interface}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjq hhhj hMkubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjm hhhj hMkubah}(h]jh ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMkhjj hhubjS)}(hhh]jX)}(h2attach a network device to a particular PHY deviceh]h2attach a network device to a particular PHY device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMkhj hhubah}(h]h ]h"]h$]h&]uh1jRhjj hhhj hMkubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj- jxj- jyjzj{uh1hhhhjnhNhNubj})}(hX?**Parameters** ``struct net_device *dev`` network device to attach ``const char *bus_id`` Bus ID of PHY device to attach ``phy_interface_t interface`` PHY device's interface **Description** Same as phy_attach_direct() except that a PHY bus_id string is passed instead of a pointer to a struct phy_device.h](jX)}(h**Parameters**h]j)}(hj7 h]h Parameters}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMohj1 ubj)}(hhh](j)}(h4``struct net_device *dev`` network device to attach h](j)}(h``struct net_device *dev``h]j)}(hjV h]hstruct net_device *dev}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMlhjP ubj)}(hhh]jX)}(hnetwork device to attachh]hnetwork device to attach}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjk hMlhjl ubah}(h]h ]h"]h$]h&]uh1jhjP ubeh}(h]h ]h"]h$]h&]uh1jhjk hMlhjM ubj)}(h6``const char *bus_id`` Bus ID of PHY device to attach h](j)}(h``const char *bus_id``h]j)}(hj h]hconst char *bus_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMmhj ubj)}(hhh]jX)}(hBus ID of PHY device to attachh]hBus ID of PHY device to attach}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMmhjM ubj)}(h5``phy_interface_t interface`` PHY device's interface h](j)}(h``phy_interface_t interface``h]j)}(hj h]hphy_interface_t interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMnhj ubj)}(hhh]jX)}(hPHY device's interfaceh]hPHY device’s interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMnhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMnhjM ubeh}(h]h ]h"]h$]h&]uh1jhj1 ubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMphj1 ubj)}(hhh]j)}(hrSame as phy_attach_direct() except that a PHY bus_id string is passed instead of a pointer to a struct phy_device.h](j)}(h4Same as phy_attach_direct() except that a PHY bus_idh]h4Same as phy_attach_direct() except that a PHY bus_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMphj ubj)}(hhh]jX)}(h=string is passed instead of a pointer to a struct phy_device.h]h=string is passed instead of a pointer to a struct phy_device.}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMqhj/ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj. hMphj ubah}(h]h ]h"]h$]h&]uh1jhj1 ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_detach (C function) c.phy_detachhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h+void phy_detach (struct phy_device *phydev)h]h)}(h*void phy_detach(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjo hhhj hMubj)}(h phy_detachh]j%)}(h phy_detachh]h phy_detach}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjo hhhj hMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jj sb c.phy_detachasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubah}(h]h ]h"]h$]h&]j<j=uh1jhjo hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjk hhhj hMubah}(h]jf ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjh hhubjS)}(hhh]jX)}(h+detach a PHY device from its network deviceh]h+detach a PHY device from its network device}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jRhjh hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** This detaches the phy device from its network device and the phy driver, and drops the reference count taken in phy_attach_direct().h](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjOubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjth]hstruct phy_device *phydev}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjnubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubah}(h]h ]h"]h$]h&]uh1jhjOubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjOubjX)}(hThis detaches the phy device from its network device and the phy driver, and drops the reference count taken in phy_attach_direct().h]hThis detaches the phy device from its network device and the phy driver, and drops the reference count taken in phy_attach_direct().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phy_reset_after_clk_enable (C function)c.phy_reset_after_clk_enablehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h:int phy_reset_after_clk_enable (struct phy_device *phydev)h]h)}(h9int phy_reset_after_clk_enable(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphy_reset_after_clk_enableh]j%)}(hphy_reset_after_clk_enableh]hphy_reset_after_clk_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjQmodnameN classnameNjj!)}j$]j')}jjsbc.phy_reset_after_clk_enableasbuh1hhj-ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj}hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj)ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hperform a PHY reset if neededh]hperform a PHY reset if needed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX8**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Some PHYs are known to need a reset after their refclk was enabled. This function evaluates the flags and perform the reset if it's needed. Returns < 0 on error, 0 if the phy wasn't reset and 1 if the phy was reset.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]j)}(hSome PHYs are known to need a reset after their refclk was enabled. This function evaluates the flags and perform the reset if it's needed. Returns < 0 on error, 0 if the phy wasn't reset and 1 if the phy was reset.h](j)}(h:Some PHYs are known to need a reset after their refclk wash]h:Some PHYs are known to need a reset after their refclk was}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjIubj)}(hhh]jX)}(henabled. This function evaluates the flags and perform the reset if it's needed. Returns < 0 on error, 0 if the phy wasn't reset and 1 if the phy was reset.h]henabled. This function evaluates the flags and perform the reset if it’s needed. Returns < 0 on error, 0 if the phy wasn’t reset and 1 if the phy was reset.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj\ubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhj[hMhjFubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h genphy_setup_forced (C function)c.genphy_setup_forcedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3int genphy_setup_forced (struct phy_device *phydev)h]h)}(h2int genphy_setup_forced(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hgenphy_setup_forcedh]j%)}(hgenphy_setup_forcedh]hgenphy_setup_forced}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.genphy_setup_forcedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h.configures/forces speed/duplex from **phydev**h](h$configures/forces speed/duplex from }(hj`hhhNhNubj)}(h **phydev**h]hphydev}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Configures MII_BMCR to force speed/duplex to the values in phydev. Assumes that the values are valid. Please see phy_sanitize_settings().h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]j)}(hConfigures MII_BMCR to force speed/duplex to the values in phydev. Assumes that the values are valid. Please see phy_sanitize_settings().h](j)}(h)Configures MII_BMCR to force speed/duplexh]h)Configures MII_BMCR to force speed/duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(h_to the values in phydev. Assumes that the values are valid. Please see phy_sanitize_settings().h]h_to the values in phydev. Assumes that the values are valid. Please see phy_sanitize_settings().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h genphy_restart_aneg (C function)c.genphy_restart_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h3int genphy_restart_aneg (struct phy_device *phydev)h]h)}(h2int genphy_restart_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUhhhjghMubj)}(hgenphy_restart_anegh]j%)}(hgenphy_restart_anegh]hgenphy_restart_aneg}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjUhhhjghMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj|sbc.genphy_restart_anegasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjUhhhjghMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjQhhhjghMubah}(h]jLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjghMhjNhhubjS)}(hhh]jX)}(h"Enable and Restart Autonegotiationh]h"Enable and Restart Autonegotiation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjNhhhjghMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj1jxj1jyjzj{uh1hhhhjnhNhNubj})}(hH**Parameters** ``struct phy_device *phydev`` target phy_device structh](jX)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj5ubj)}(hhh]j)}(h6``struct phy_device *phydev`` target phy_device structh](j)}(h``struct phy_device *phydev``h]j)}(hjZh]hstruct phy_device *phydev}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjTubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*genphy_check_and_restart_aneg (C function)c.genphy_check_and_restart_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKint genphy_check_and_restart_aneg (struct phy_device *phydev, bool restart)h]h)}(hJint genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hgenphy_check_and_restart_anegh]j%)}(hgenphy_check_and_restart_anegh]hgenphy_check_and_restart_aneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h)(struct phy_device *phydev, bool restart)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.genphy_check_and_restart_anegasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj=hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool restarth](j)}(hjTh]hbool}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(hrestarth]hrestart}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h#Enable and restart auto-negotiationh]h#Enable and restart auto-negotiation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool restart`` whether aneg restart is requested **Description** Check, and restart auto-negotiation if needed.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h3``bool restart`` whether aneg restart is requested h](j)}(h``bool restart``h]j)}(hj"h]h bool restart}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubj)}(hhh]jX)}(h!whether aneg restart is requestedh]h!whether aneg restart is requested}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubjX)}(h.Check, and restart auto-negotiation if needed.h]h.Check, and restart auto-negotiation if needed.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!__genphy_config_aneg (C function)c.__genphy_config_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(hBint __genphy_config_aneg (struct phy_device *phydev, bool changed)h]h)}(hAint __genphy_config_aneg(struct phy_device *phydev, bool changed)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(h__genphy_config_anegh]j%)}(h__genphy_config_anegh]h__genphy_config_aneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h)(struct phy_device *phydev, bool changed)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__genphy_config_anegasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool changedh](j)}(hjTh]hbool}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj%)}(hchangedh]hchanged}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h&restart auto-negotiation or write BMCRh]h&restart auto-negotiation or write BMCR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool changed`` whether autoneg is requested **Description** If auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h.``bool changed`` whether autoneg is requested h](j)}(h``bool changed``h]j)}(hjh]h bool changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj ubj)}(hhh]jX)}(hwhether autoneg is requestedh]hwhether autoneg is requested}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%hM hj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]j)}(hIf auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR.h](j)}(h0If auto-negotiation is enabled, we configure theh]h0If auto-negotiation is enabled, we configure the}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjdubj)}(hhh]jX)}(h^advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR.h]h^advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhM hjwubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjvhM hjaubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#genphy_c37_config_aneg (C function)c.genphy_c37_config_aneghNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6int genphy_c37_config_aneg (struct phy_device *phydev)h]h)}(h5int genphy_c37_config_aneg(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMN ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMN ubj)}(hgenphy_c37_config_anegh]j%)}(hgenphy_c37_config_anegh]hgenphy_c37_config_aneg}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMN ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.genphy_c37_config_anegasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMN ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMN ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMN hjhhubjS)}(hhh]jX)}(h&restart auto-negotiation or write BMCRh]h&restart auto-negotiation or write BMCR}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMN hjwhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMN ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX2**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** If auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR. This function is intended for use with Clause 37 1000Base-X mode.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMR hjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMO hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMO hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMO hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMQ hjubj)}(hhh]j)}(hIf auto-negotiation is enabled, we configure the advertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR. This function is intended for use with Clause 37 1000Base-X mode.h](j)}(h0If auto-negotiation is enabled, we configure theh]h0If auto-negotiation is enabled, we configure the}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMS hjubj)}(hhh]jX)}(hadvertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR. This function is intended for use with Clause 37 1000Base-X mode.h]hadvertising, and then restart auto-negotiation. If it is not enabled, then we write the BMCR. This function is intended for use with Clause 37 1000Base-X mode.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMR hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMS hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgenphy_aneg_done (C function)c.genphy_aneg_donehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0int genphy_aneg_done (struct phy_device *phydev)h]h)}(h/int genphy_aneg_done(struct phy_device *phydev)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM~ ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbhhhjthM~ ubj)}(hgenphy_aneg_doneh]j%)}(hgenphy_aneg_doneh]hgenphy_aneg_done}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjbhhhjthM~ ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.genphy_aneg_doneasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjbhhhjthM~ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhjthM~ ubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthM~ hj[hhubjS)}(hhh]jX)}(hreturn auto-negotiation statush]hreturn auto-negotiation status}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM~ hj#hhubah}(h]h ]h"]h$]h&]uh1jRhj[hhhjthM~ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Reads the status register and returns 0 either if auto-negotiation is incomplete, or if there was an error. Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjgh]hstruct phy_device *phydev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjaubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubj)}(hhh]j)}(hReads the status register and returns 0 either if auto-negotiation is incomplete, or if there was an error. Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.h](j)}(h1Reads the status register and returns 0 either ifh]h1Reads the status register and returns 0 either if}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(hpauto-negotiation is incomplete, or if there was an error. Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.h]hpauto-negotiation is incomplete, or if there was an error. Returns BMSR_ANEGCOMPLETE if auto-negotiation is done.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgenphy_update_link (C function)c.genphy_update_linkhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2int genphy_update_link (struct phy_device *phydev)h]h)}(h1int genphy_update_link(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhM ubj)}(hgenphy_update_linkh]j%)}(hgenphy_update_linkh]hgenphy_update_link}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j')}jj4sbc.genphy_update_linkasbuh1hhjJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjFubah}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h update link status in **phydev**h](hupdate link status in }(hjhhhNhNubj)}(h **phydev**h]hphydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Update the value in phydev->link to reflect the current link value. In order to do this, we need to read the status register twice, keeping the second value.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj h]hstruct phy_device *phydev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hM hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]j)}(hUpdate the value in phydev->link to reflect the current link value. In order to do this, we need to read the status register twice, keeping the second value.h](j)}(h/Update the value in phydev->link to reflect theh]h/Update the value in phydev->link to reflect the}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjtubj)}(hhh]jX)}(hncurrent link value. In order to do this, we need to read the status register twice, keeping the second value.h]hncurrent link value. In order to do this, we need to read the status register twice, keeping the second value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM hjqubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%genphy_read_status_fixed (C function)c.genphy_read_status_fixedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h8int genphy_read_status_fixed (struct phy_device *phydev)h]h)}(h7int genphy_read_status_fixed(struct phy_device *phydev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM ubj)}(hgenphy_read_status_fixedh]j%)}(hgenphy_read_status_fixedh]hgenphy_read_status_fixed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]j')}jjsbc.genphy_read_status_fixedasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM hjhhubjS)}(hhh]jX)}(h'read the link parameters for !aneg modeh]h'read the link parameters for !aneg mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Read the current duplex and speed state for a PHY operating with autonegotiation disabled.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjh]hstruct phy_device *phydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubjX)}(hZRead the current duplex and speed state for a PHY operating with autonegotiation disabled.h]hZRead the current duplex and speed state for a PHY operating with autonegotiation disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgenphy_read_status (C function)c.genphy_read_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(h2int genphy_read_status (struct phy_device *phydev)h]h)}(h1int genphy_read_status(struct phy_device *phydev)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhjYhM ubj)}(hgenphy_read_statush]j%)}(hgenphy_read_statush]hgenphy_read_status}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhjYhM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjnsbc.genphy_read_statusasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hphydevh]hphydev}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhjYhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjYhM ubah}(h]j>ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYhM hj@hhubjS)}(hhh]jX)}(h3check the link status and update current link stateh]h3check the link status and update current link state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjhhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhjYhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#jxj#jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Check the link, then figure out the current state by comparing what we advertise with what the link partner advertises. Start by checking the gigabit possibilities, then move on to 10/100.h](jX)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj'ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjLh]hstruct phy_device *phydev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjFubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahM hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj'ubj)}(hhh]j)}(hCheck the link, then figure out the current state by comparing what we advertise with what the link partner advertises. Start by checking the gigabit possibilities, then move on to 10/100.h](j)}(h1Check the link, then figure out the current stateh]h1Check the link, then figure out the current state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubj)}(hhh]jX)}(hby comparing what we advertise with what the link partner advertises. Start by checking the gigabit possibilities, then move on to 10/100.h]hby comparing what we advertise with what the link partner advertises. Start by checking the gigabit possibilities, then move on to 10/100.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#genphy_c37_read_status (C function)c.genphy_c37_read_statushNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEint genphy_c37_read_status (struct phy_device *phydev, bool *changed)h]h)}(hDint genphy_c37_read_status(struct phy_device *phydev, bool *changed)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMC ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMC ubj)}(hgenphy_c37_read_statush]j%)}(hgenphy_c37_read_statush]hgenphy_c37_read_status}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMC ubj)}(h*(struct phy_device *phydev, bool *changed)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj4 hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0 ubj)}(h h]h }(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0 ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjR hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjT modnameN classnameNjj!)}j$]j')}jj sbc.genphy_c37_read_statusasbuh1hhj0 ubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0 ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0 ubj%)}(hphydevh]hphydev}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0 ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj, ubj)}(h bool *changedh](j)}(hjTh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hchangedh]hchanged}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj, ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMC ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMC ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMC hjhhubjS)}(hhh]jX)}(h3check the link status and update current link stateh]h3check the link status and update current link state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMC hj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMC ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj!jxj!jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool *changed`` pointer where to store if link changed **Description** Check the link, then figure out the current state by comparing what we advertise with what the link partner advertises. This function is for Clause 37 1000Base-X mode. If link has changed, **changed** is set to true, false otherwise.h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMG hj!ubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj9!h]hstruct phy_device *phydev}(hj;!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMD hj3!ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjR!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjN!hMD hjO!ubah}(h]h ]h"]h$]h&]uh1jhj3!ubeh}(h]h ]h"]h$]h&]uh1jhjN!hMD hj0!ubj)}(h9``bool *changed`` pointer where to store if link changed h](j)}(h``bool *changed``h]j)}(hjr!h]h bool *changed}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chME hjl!ubj)}(hhh]jX)}(h&pointer where to store if link changedh]h&pointer where to store if link changed}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj!hME hj!ubah}(h]h ]h"]h$]h&]uh1jhjl!ubeh}(h]h ]h"]h$]h&]uh1jhj!hME hj0!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubjX)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMG hj!ubj)}(hhh]j)}(hCheck the link, then figure out the current state by comparing what we advertise with what the link partner advertises. This function is for Clause 37 1000Base-X mode. If link has changed, **changed** is set to true, false otherwise.h](j)}(h1Check the link, then figure out the current stateh]h1Check the link, then figure out the current state}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMJ hj!ubj)}(hhh](jX)}(huby comparing what we advertise with what the link partner advertises. This function is for Clause 37 1000Base-X mode.h]huby comparing what we advertise with what the link partner advertises. This function is for Clause 37 1000Base-X mode.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMH hj!ubjX)}(hAIf link has changed, **changed** is set to true, false otherwise.h](hIf link has changed, }(hj!hhhNhNubj)}(h **changed**h]hchanged}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh! is set to true, false otherwise.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMK hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMJ hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hgenphy_soft_reset (C function)c.genphy_soft_resethNtauh1hhjnhhhNhNubh)}(hhh](h)}(h1int genphy_soft_reset (struct phy_device *phydev)h]h)}(h0int genphy_soft_reset(struct phy_device *phydev)h](j)}(hinth]hint}(hj>"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:"hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjM"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:"hhhjL"hM ubj)}(hgenphy_soft_reseth]j%)}(hgenphy_soft_reseth]hgenphy_soft_reset}(hj_"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj["ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:"hhhjL"hM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj{"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjw"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw"ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj"modnameN classnameNjj!)}j$]j')}jja"sbc.genphy_soft_resetasbuh1hhjw"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjw"ubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjw"ubj%)}(hphydevh]hphydev}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjs"ubah}(h]h ]h"]h$]h&]j<j=uh1jhj:"hhhjL"hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6"hhhjL"hM ubah}(h]j1"ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjL"hM hj3"hhubjS)}(hhh]jX)}(h)software reset the PHY via BMCR_RESET bith]h)software reset the PHY via BMCR_RESET bit}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj"hhubah}(h]h ]h"]h$]h&]uh1jRhj3"hhhjL"hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj#jxj#jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Perform a software PHY reset using the standard BMCR_RESET bit and poll for the reset bit to be cleared. **Return** 0 on success, < 0 on failureh](jX)}(h**Parameters**h]j)}(hj #h]h Parameters}(hj"#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj#ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj?#h]hstruct phy_device *phydev}(hjA#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj9#ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjX#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjT#hM hjU#ubah}(h]h ]h"]h$]h&]uh1jhj9#ubeh}(h]h ]h"]h$]h&]uh1jhjT#hM hj6#ubah}(h]h ]h"]h$]h&]uh1jhj#ubjX)}(h**Description**h]j)}(hjz#h]h Description}(hj|#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx#ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj#ubjX)}(hhPerform a software PHY reset using the standard BMCR_RESET bit and poll for the reset bit to be cleared.h]hhPerform a software PHY reset using the standard BMCR_RESET bit and poll for the reset bit to be cleared.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj#ubjX)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj#ubjX)}(h0 on success, < 0 on failureh]h0 on success, < 0 on failure}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"genphy_read_abilities (C function)c.genphy_read_abilitieshNtauh1hhjnhhhNhNubh)}(hhh](h)}(h5int genphy_read_abilities (struct phy_device *phydev)h]h)}(h4int genphy_read_abilities(struct phy_device *phydev)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#hhhj#hM ubj)}(hgenphy_read_abilitiesh]j%)}(hgenphy_read_abilitiesh]hgenphy_read_abilities}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj#hhhj#hM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj#$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj0$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjA$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjC$modnameN classnameNjj!)}j$]j')}jj $sbc.genphy_read_abilitiesasbuh1hhj$ubj)}(h h]h }(hja$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hjo$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hphydevh]hphydev}(hj|$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubah}(h]h ]h"]h$]h&]j<j=uh1jhj#hhhj#hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj#hhhj#hM ubah}(h]j#ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj#hM hj#hhubjS)}(hhh]jX)}(h+read PHY abilities from Clause 22 registersh]h+read PHY abilities from Clause 22 registers}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$hhubah}(h]h ]h"]h$]h&]uh1jRhj#hhhj#hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$jxj$jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Reads the PHY's abilities and populates phydev->supported accordingly. **Return** 0 on success, < 0 on failureh](jX)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj$h]hstruct phy_device *phydev}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hM hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hM hj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubjX)}(h**Description**h]j)}(hj"%h]h Description}(hj$%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj %ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubjX)}(hFReads the PHY's abilities and populates phydev->supported accordingly.h]hHReads the PHY’s abilities and populates phydev->supported accordingly.}(hj8%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubjX)}(h **Return**h]j)}(hjI%h]hReturn}(hjK%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG%ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubjX)}(h0 on success, < 0 on failureh]h0 on success, < 0 on failure}(hj_%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phy_remove_link_mode (C function)c.phy_remove_link_modehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDvoid phy_remove_link_mode (struct phy_device *phydev, u32 link_mode)h]h)}(hCvoid phy_remove_link_mode(struct phy_device *phydev, u32 link_mode)h](j)}(hvoidh]hvoid}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM* ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhj%hM* ubj)}(hphy_remove_link_modeh]j%)}(hphy_remove_link_modeh]hphy_remove_link_mode}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj%hhhj%hM* ubj)}(h*(struct phy_device *phydev, u32 link_mode)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]j')}jj%sbc.phy_remove_link_modeasbuh1hhj%ubj)}(h h]h }(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj;)}(hj>h]h*}(hj&hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%ubj%)}(hphydevh]hphydev}(hj$&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%ubj)}(h u32 link_modeh](h)}(hhh]j%)}(hu32h]hu32}(hj@&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=&ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjB&modnameN classnameNjj!)}j$]j&c.phy_remove_link_modeasbuh1hhj9&ubj)}(h h]h }(hj^&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9&ubj%)}(h link_modeh]h link_mode}(hjl&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9&ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj%ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj%hhhj%hM* ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj%hhhj%hM* ubah}(h]j%ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj%hM* hj%hhubjS)}(hhh]jX)}(hRemove a supported link modeh]hRemove a supported link mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM* hj&hhubah}(h]h ]h"]h$]h&]uh1jRhj%hhhj%hM* ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1hhhhjnhNhNubj})}(hX+**Parameters** ``struct phy_device *phydev`` phy_device structure to remove link mode from ``u32 link_mode`` Link mode to be removed **Description** Some MACs don't support all link modes which the PHY does. e.g. a 1G MAC often does not support 1000Half. Add a helper to remove a link mode.h](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM. hj&ubj)}(hhh](j)}(hL``struct phy_device *phydev`` phy_device structure to remove link mode from h](j)}(h``struct phy_device *phydev``h]j)}(hj&h]hstruct phy_device *phydev}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM+ hj&ubj)}(hhh]jX)}(h-phy_device structure to remove link mode fromh]h-phy_device structure to remove link mode from}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hM+ hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hM+ hj&ubj)}(h*``u32 link_mode`` Link mode to be removed h](j)}(h``u32 link_mode``h]j)}(hj'h]h u32 link_mode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM, hj 'ubj)}(hhh]jX)}(hLink mode to be removedh]hLink mode to be removed}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%'hM, hj&'ubah}(h]h ]h"]h$]h&]uh1jhj 'ubeh}(h]h ]h"]h$]h&]uh1jhj%'hM, hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubjX)}(h**Description**h]j)}(hjK'h]h Description}(hjM'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI'ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM. hj&ubjX)}(hSome MACs don't support all link modes which the PHY does. e.g. a 1G MAC often does not support 1000Half. Add a helper to remove a link mode.h]hSome MACs don’t support all link modes which the PHY does. e.g. a 1G MAC often does not support 1000Half. Add a helper to remove a link mode.}(hja'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM. hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_advertise_supported (C function)c.phy_advertise_supportedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h8void phy_advertise_supported (struct phy_device *phydev)h]h)}(h7void phy_advertise_supported(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMB ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj'hMB ubj)}(hphy_advertise_supportedh]j%)}(hphy_advertise_supportedh]hphy_advertise_supported}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj'hMB ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]j')}jj'sbc.phy_advertise_supportedasbuh1hhj'ubj)}(h h]h }(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hphydevh]hphydev}(hj&(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubah}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj'hMB ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj'hhhj'hMB ubah}(h]j'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMB hj'hhubjS)}(hhh]jX)}(hAdvertise all supported modesh]hAdvertise all supported modes}(hjP(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMB hjM(hhubah}(h]h ]h"]h$]h&]uh1jRhj'hhhj'hMB ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjh(jxjh(jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Called to advertise all supported modes, doesn't touch pause mode advertising.h](jX)}(h**Parameters**h]j)}(hjr(h]h Parameters}(hjt(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp(ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMF hjl(ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj(h]hstruct phy_device *phydev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMC hj(ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(hMC hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMC hj(ubah}(h]h ]h"]h$]h&]uh1jhjl(ubjX)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chME hjl(ubjX)}(hNCalled to advertise all supported modes, doesn't touch pause mode advertising.h]hPCalled to advertise all supported modes, doesn’t touch pause mode advertising.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chME hjl(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_advertise_eee_all (C function)c.phy_advertise_eee_allhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6void phy_advertise_eee_all (struct phy_device *phydev)h]h)}(h5void phy_advertise_eee_all(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMS ubj)}(h h]h }(hj )hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj )hhhj)hMS ubj)}(hphy_advertise_eee_allh]j%)}(hphy_advertise_eee_allh]hphy_advertise_eee_all}(hj2)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.)ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj )hhhj)hMS ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjN)hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJ)ubj)}(h h]h }(hj[)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ)ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjl)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hji)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjn)modnameN classnameNjj!)}j$]j')}jj4)sbc.phy_advertise_eee_allasbuh1hhjJ)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJ)ubj;)}(hj>h]h*}(hj)hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJ)ubj%)}(hphydevh]hphydev}(hj)hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJ)ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjF)ubah}(h]h ]h"]h$]h&]j<j=uh1jhj )hhhj)hMS ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj )hhhj)hMS ubah}(h]j)ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)hMS hj)hhubjS)}(hhh]jX)}(h!Advertise all supported EEE modesh]h!Advertise all supported EEE modes}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMS hj)hhubah}(h]h ]h"]h$]h&]uh1jRhj)hhhj)hMS ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj)jxj)jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Per default phylib preserves the EEE advertising at the time of phy probing, which might be a subset of the supported EEE modes. Use this function when all supported EEE modes should be advertised. This does not trigger auto-negotiation, so must be called before phy_start()/ phylink_start() which will start auto-negotiation.h](jX)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMW hj)ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj*h]hstruct phy_device *phydev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMT hj *ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj+*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'*hMT hj(*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ]h"]h$]h&]uh1jhj'*hMT hj *ubah}(h]h ]h"]h$]h&]uh1jhj)ubjX)}(h**Description**h]j)}(hjM*h]h Description}(hjO*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK*ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMV hj)ubjX)}(hXFPer default phylib preserves the EEE advertising at the time of phy probing, which might be a subset of the supported EEE modes. Use this function when all supported EEE modes should be advertised. This does not trigger auto-negotiation, so must be called before phy_start()/ phylink_start() which will start auto-negotiation.h]hXFPer default phylib preserves the EEE advertising at the time of phy probing, which might be a subset of the supported EEE modes. Use this function when all supported EEE modes should be advertised. This does not trigger auto-negotiation, so must be called before phy_start()/ phylink_start() which will start auto-negotiation.}(hjc*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMV hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_support_eee (C function)c.phy_support_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0void phy_support_eee (struct phy_device *phydev)h]h)}(h/void phy_support_eee(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMc ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj*hMc ubj)}(hphy_support_eeeh]j%)}(hphy_support_eeeh]hphy_support_eee}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj*hMc ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*modnameN classnameNjj!)}j$]j')}jj*sbc.phy_support_eeeasbuh1hhj*ubj)}(h h]h }(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hj+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hphydevh]hphydev}(hj(+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj*hMc ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*hhhj*hMc ubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hMc hj*hhubjS)}(hhh]jX)}(h$Set initial EEE policy configurationh]h$Set initial EEE policy configuration}(hjR+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMc hjO+hhubah}(h]h ]h"]h$]h&]uh1jRhj*hhhj*hMc ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjj+jxjj+jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` Target phy_device struct **Description** This function configures the initial policy for Energy Efficient Ethernet (EEE) on the specified PHY device, influencing that EEE capabilities are advertised before the link is established. It should be called during PHY registration by the MAC driver and/or the PHY driver (for SmartEEE PHYs) if MAC supports LPI or PHY is capable to compensate missing LPI functionality of the MAC. The function sets default EEE policy parameters, including preparing the PHY to advertise EEE capabilities based on hardware support. It also sets the expected configuration for Low Power Idle (LPI) in the MAC driver. If the PHY framework determines that both local and remote advertisements support EEE, and the negotiated link mode is compatible with EEE, it will set enable_tx_lpi = true. The MAC driver is expected to act on this setting by enabling the LPI timer if enable_tx_lpi is set.h](jX)}(h**Parameters**h]j)}(hjt+h]h Parameters}(hjv+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr+ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMg hjn+ubj)}(hhh]j)}(h7``struct phy_device *phydev`` Target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj+h]hstruct phy_device *phydev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMd hj+ubj)}(hhh]jX)}(hTarget phy_device structh]hTarget phy_device struct}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hMd hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMd hj+ubah}(h]h ]h"]h$]h&]uh1jhjn+ubjX)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMf hjn+ubjX)}(hXThis function configures the initial policy for Energy Efficient Ethernet (EEE) on the specified PHY device, influencing that EEE capabilities are advertised before the link is established. It should be called during PHY registration by the MAC driver and/or the PHY driver (for SmartEEE PHYs) if MAC supports LPI or PHY is capable to compensate missing LPI functionality of the MAC.h]hXThis function configures the initial policy for Energy Efficient Ethernet (EEE) on the specified PHY device, influencing that EEE capabilities are advertised before the link is established. It should be called during PHY registration by the MAC driver and/or the PHY driver (for SmartEEE PHYs) if MAC supports LPI or PHY is capable to compensate missing LPI functionality of the MAC.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMe hjn+ubjX)}(hThe function sets default EEE policy parameters, including preparing the PHY to advertise EEE capabilities based on hardware support.h]hThe function sets default EEE policy parameters, including preparing the PHY to advertise EEE capabilities based on hardware support.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMl hjn+ubjX)}(hXfIt also sets the expected configuration for Low Power Idle (LPI) in the MAC driver. If the PHY framework determines that both local and remote advertisements support EEE, and the negotiated link mode is compatible with EEE, it will set enable_tx_lpi = true. The MAC driver is expected to act on this setting by enabling the LPI timer if enable_tx_lpi is set.h]hXfIt also sets the expected configuration for Low Power Idle (LPI) in the MAC driver. If the PHY framework determines that both local and remote advertisements support EEE, and the negotiated link mode is compatible with EEE, it will set enable_tx_lpi = true. The MAC driver is expected to act on this setting by enabling the LPI timer if enable_tx_lpi is set.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMo hjn+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_disable_eee (C function)c.phy_disable_eeehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h0void phy_disable_eee (struct phy_device *phydev)h]h)}(h/void phy_disable_eee(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj1,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-,hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj@,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-,hhhj?,hM ubj)}(hphy_disable_eeeh]j%)}(hphy_disable_eeeh]hphy_disable_eee}(hjR,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjN,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-,hhhj?,hM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjn,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjj,ubj)}(h h]h }(hj{,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj,ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj,modnameN classnameNjj!)}j$]j')}jjT,sbc.phy_disable_eeeasbuh1hhjj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjj,ubj;)}(hj>h]h*}(hj,hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjj,ubj%)}(hphydevh]hphydev}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjf,ubah}(h]h ]h"]h$]h&]j<j=uh1jhj-,hhhj?,hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj),hhhj?,hM ubah}(h]j$,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj?,hM hj&,hhubjS)}(hhh]jX)}(hDisable EEE for the PHYh]hDisable EEE for the PHY}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,hhubah}(h]h ]h"]h$]h&]uh1jRhj&,hhhj?,hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj -jxj -jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` Target phy_device struct **Description** This function is used by MAC drivers for MAC's which don't support EEE. It disables EEE on the PHY layer.h](jX)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj -ubj)}(hhh]j)}(h7``struct phy_device *phydev`` Target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj2-h]hstruct phy_device *phydev}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0-ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,-ubj)}(hhh]jX)}(hTarget phy_device structh]hTarget phy_device struct}(hjK-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjG-hM hjH-ubah}(h]h ]h"]h$]h&]uh1jhj,-ubeh}(h]h ]h"]h$]h&]uh1jhjG-hM hj)-ubah}(h]h ]h"]h$]h&]uh1jhj -ubjX)}(h**Description**h]j)}(hjm-h]h Description}(hjo-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk-ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj -ubjX)}(hiThis function is used by MAC drivers for MAC's which don't support EEE. It disables EEE on the PHY layer.h]hmThis function is used by MAC drivers for MAC’s which don’t support EEE. It disables EEE on the PHY layer.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj -ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"phy_support_sym_pause (C function)c.phy_support_sym_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h6void phy_support_sym_pause (struct phy_device *phydev)h]h)}(h5void phy_support_sym_pause(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhj-hM ubj)}(hphy_support_sym_pauseh]j%)}(hphy_support_sym_pauseh]hphy_support_sym_pause}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj-hhhj-hM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj .hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj .ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]j')}jj-sbc.phy_support_sym_pauseasbuh1hhj-ubj)}(h h]h }(hj-.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubj;)}(hj>h]h*}(hj;.hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj-ubj%)}(hphydevh]hphydev}(hjH.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj-ubah}(h]h ]h"]h$]h&]j<j=uh1jhj-hhhj-hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj-hhhj-hM ubah}(h]j-ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj-hM hj-hhubjS)}(hhh]jX)}(h#Enable support of symmetrical pauseh]h#Enable support of symmetrical pause}(hjr.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjo.hhubah}(h]h ]h"]h$]h&]uh1jRhj-hhhj-hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Called by the MAC to indicate is supports symmetrical Pause, but not asym pause.h](jX)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj.ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj.h]hstruct phy_device *phydev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj.ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hM hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM hj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubjX)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj.ubjX)}(hPCalled by the MAC to indicate is supports symmetrical Pause, but not asym pause.h]hPCalled by the MAC to indicate is supports symmetrical Pause, but not asym pause.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_support_asym_pause (C function)c.phy_support_asym_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7void phy_support_asym_pause (struct phy_device *phydev)h]h)}(h6void phy_support_asym_pause(struct phy_device *phydev)h](j)}(hvoidh]hvoid}(hj3/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj//hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hjB/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj//hhhjA/hM ubj)}(hphy_support_asym_pauseh]j%)}(hphy_support_asym_pauseh]hphy_support_asym_pause}(hjT/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjP/ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj//hhhjA/hM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjp/hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjl/ubj)}(h h]h }(hj}/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl/ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jjV/sbc.phy_support_asym_pauseasbuh1hhjl/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjl/ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjl/ubj%)}(hphydevh]hphydev}(hj/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjl/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjh/ubah}(h]h ]h"]h$]h&]j<j=uh1jhj//hhhjA/hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj+/hhhjA/hM ubah}(h]j&/ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjA/hM hj(/hhubjS)}(hhh]jX)}(hEnable support of asym pauseh]hEnable support of asym pause}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj/hhubah}(h]h ]h"]h$]h&]uh1jRhj(/hhhjA/hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj 0jxj 0jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Called by the MAC to indicate is supports Asym Pause.h](jX)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj0ubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj40h]hstruct phy_device *phydev}(hj60hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj20ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj.0ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjM0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjI0hM hjJ0ubah}(h]h ]h"]h$]h&]uh1jhj.0ubeh}(h]h ]h"]h$]h&]uh1jhjI0hM hj+0ubah}(h]h ]h"]h$]h&]uh1jhj0ubjX)}(h**Description**h]j)}(hjo0h]h Description}(hjq0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm0ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj0ubjX)}(h5Called by the MAC to indicate is supports Asym Pause.h]h5Called by the MAC to indicate is supports Asym Pause.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_set_sym_pause (C function)c.phy_set_sym_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hRvoid phy_set_sym_pause (struct phy_device *phydev, bool rx, bool tx, bool autoneg)h]h)}(hQvoid phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx, bool autoneg)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hM ubj)}(hphy_set_sym_pauseh]j%)}(hphy_set_sym_pauseh]hphy_set_sym_pause}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hM ubj)}(h;(struct phy_device *phydev, bool rx, bool tx, bool autoneg)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj 1ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj1modnameN classnameNjj!)}j$]j')}jj0sbc.phy_set_sym_pauseasbuh1hhj0ubj)}(h h]h }(hj/1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hj=1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hphydevh]hphydev}(hjJ1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(hbool rxh](j)}(hjTh]hbool}(hjc1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_1ubj)}(h h]h }(hjp1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_1ubj%)}(hrxh]hrx}(hj~1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(hbool txh](j)}(hjTh]hbool}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj%)}(htxh]htx}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubj)}(h bool autonegh](j)}(hjTh]hbool}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj1ubj%)}(hautonegh]hautoneg}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj1ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hM ubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hM hj0hhubjS)}(hhh]jX)}(hConfigure symmetric Pauseh]hConfigure symmetric Pause}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj 2hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(2jxj(2jyjzj{uh1hhhhjnhNhNubj})}(hXn**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool rx`` Receiver Pause is supported ``bool tx`` Transmit Pause is supported ``bool autoneg`` Auto neg should be used **Description** Configure advertised Pause support depending on if receiver pause and pause auto neg is supported. Generally called from the set_pauseparam .ndo.h](jX)}(h**Parameters**h]j)}(hj22h]h Parameters}(hj42hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj02ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,2ubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjQ2h]hstruct phy_device *phydev}(hjS2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO2ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjK2ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjf2hM hjg2ubah}(h]h ]h"]h$]h&]uh1jhjK2ubeh}(h]h ]h"]h$]h&]uh1jhjf2hM hjH2ubj)}(h(``bool rx`` Receiver Pause is supported h](j)}(h ``bool rx``h]j)}(hj2h]hbool rx}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj2ubj)}(hhh]jX)}(hReceiver Pause is supportedh]hReceiver Pause is supported}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hjH2ubj)}(h(``bool tx`` Transmit Pause is supported h](j)}(h ``bool tx``h]j)}(hj2h]hbool tx}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj2ubj)}(hhh]jX)}(hTransmit Pause is supportedh]hTransmit Pause is supported}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2hM hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hM hjH2ubj)}(h)``bool autoneg`` Auto neg should be used h](j)}(h``bool autoneg``h]j)}(hj2h]h bool autoneg}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj2ubj)}(hhh]jX)}(hAuto neg should be usedh]hAuto neg should be used}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjH2ubeh}(h]h ]h"]h$]h&]uh1jhj,2ubjX)}(h**Description**h]j)}(hj73h]h Description}(hj93hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj53ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,2ubjX)}(hConfigure advertised Pause support depending on if receiver pause and pause auto neg is supported. Generally called from the set_pauseparam .ndo.h]hConfigure advertised Pause support depending on if receiver pause and pause auto neg is supported. Generally called from the set_pauseparam .ndo.}(hjM3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_set_asym_pause (C function)c.phy_set_asym_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hEvoid phy_set_asym_pause (struct phy_device *phydev, bool rx, bool tx)h]h)}(hDvoid phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx)h](j)}(hvoidh]hvoid}(hj|3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx3hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx3hhhj3hM ubj)}(hphy_set_asym_pauseh]j%)}(hphy_set_asym_pauseh]hphy_set_asym_pause}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjx3hhhj3hM ubj)}(h-(struct phy_device *phydev, bool rx, bool tx)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3modnameN classnameNjj!)}j$]j')}jj3sbc.phy_set_asym_pauseasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3ubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3ubj%)}(hphydevh]hphydev}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(hbool rxh](j)}(hjTh]hbool}(hj+4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'4ubj)}(h h]h }(hj84hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'4ubj%)}(hrxh]hrx}(hjF4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubj)}(hbool txh](j)}(hjTh]hbool}(hj_4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[4ubj)}(h h]h }(hjl4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[4ubj%)}(htxh]htx}(hjz4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj3ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjx3hhhj3hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjt3hhhj3hM ubah}(h]jo3ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj3hM hjq3hhubjS)}(hhh]jX)}(hConfigure Pause and Asym Pauseh]hConfigure Pause and Asym Pause}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj4hhubah}(h]h ]h"]h$]h&]uh1jRhjq3hhhj3hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1hhhhjnhNhNubj})}(hX|**Parameters** ``struct phy_device *phydev`` target phy_device struct ``bool rx`` Receiver Pause is supported ``bool tx`` Transmit Pause is supported **Description** Configure advertised Pause support depending on if transmit and receiver pause is supported. If there has been a change in adverting, trigger a new autoneg. Generally called from the set_pauseparam .ndo.h](jX)}(h**Parameters**h]j)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj4ubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj4h]hstruct phy_device *phydev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj4ubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4hM hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hM hj4ubj)}(h(``bool rx`` Receiver Pause is supported h](j)}(h ``bool rx``h]j)}(hj5h]hbool rx}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj5ubj)}(hhh]jX)}(hReceiver Pause is supportedh]hReceiver Pause is supported}(hj75hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj35hM hj45ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj35hM hj4ubj)}(h(``bool tx`` Transmit Pause is supported h](j)}(h ``bool tx``h]j)}(hjW5h]hbool tx}(hjY5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjQ5ubj)}(hhh]jX)}(hTransmit Pause is supportedh]hTransmit Pause is supported}(hjp5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjl5hM hjm5ubah}(h]h ]h"]h$]h&]uh1jhjQ5ubeh}(h]h ]h"]h$]h&]uh1jhjl5hM hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubjX)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj4ubjX)}(hConfigure advertised Pause support depending on if transmit and receiver pause is supported. If there has been a change in adverting, trigger a new autoneg. Generally called from the set_pauseparam .ndo.h]hConfigure advertised Pause support depending on if transmit and receiver pause is supported. If there has been a change in adverting, trigger a new autoneg. Generally called from the set_pauseparam .ndo.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_validate_pause (C function)c.phy_validate_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hRbool phy_validate_pause (struct phy_device *phydev, struct ethtool_pauseparam *pp)h]h)}(hQbool phy_validate_pause(struct phy_device *phydev, struct ethtool_pauseparam *pp)h](j)}(hjTh]hbool}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj5hM ubj)}(hphy_validate_pauseh]j%)}(hphy_validate_pauseh]hphy_validate_pause}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhj5hM ubj)}(h:(struct phy_device *phydev, struct ethtool_pauseparam *pp)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj16hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj36modnameN classnameNjj!)}j$]j')}jj5sbc.phy_validate_pauseasbuh1hhj6ubj)}(h h]h }(hjQ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj_6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hphydevh]hphydev}(hjl6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj 6ubj)}(hstruct ethtool_pauseparam *pph](h)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hethtool_pauseparamh]hethtool_pauseparam}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj6modnameN classnameNjj!)}j$]jM6c.phy_validate_pauseasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hj6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hpph]hpp}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj 6ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhj5hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhj5hM ubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj5hM hj5hhubjS)}(hhh]jX)}(h3Test if the PHY/MAC support the pause configurationh]h3Test if the PHY/MAC support the pause configuration}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj7hhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhj5hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj7jxj7jyjzj{uh1hhhhjnhNhNubj})}(hX!**Parameters** ``struct phy_device *phydev`` phy_device struct ``struct ethtool_pauseparam *pp`` requested pause configuration **Description** Test if the PHY/MAC combination supports the Pause configuration the user is requesting. Returns True if it is supported, false otherwise.h](jX)}(h**Parameters**h]j)}(hj(7h]h Parameters}(hj*7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&7ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj"7ubj)}(hhh](j)}(h0``struct phy_device *phydev`` phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjG7h]hstruct phy_device *phydev}(hjI7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE7ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjA7ubj)}(hhh]jX)}(hphy_device structh]hphy_device struct}(hj`7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj\7hM hj]7ubah}(h]h ]h"]h$]h&]uh1jhjA7ubeh}(h]h ]h"]h$]h&]uh1jhj\7hM hj>7ubj)}(h@``struct ethtool_pauseparam *pp`` requested pause configuration h](j)}(h!``struct ethtool_pauseparam *pp``h]j)}(hj7h]hstruct ethtool_pauseparam *pp}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~7ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjz7ubj)}(hhh]jX)}(hrequested pause configurationh]hrequested pause configuration}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhjz7ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj>7ubeh}(h]h ]h"]h$]h&]uh1jhj"7ubjX)}(h**Description**h]j)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj"7ubjX)}(hTest if the PHY/MAC combination supports the Pause configuration the user is requesting. Returns True if it is supported, false otherwise.h]hTest if the PHY/MAC combination supports the Pause configuration the user is requesting. Returns True if it is supported, false otherwise.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj"7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_get_pause (C function)c.phy_get_pausehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hNvoid phy_get_pause (struct phy_device *phydev, bool *tx_pause, bool *rx_pause)h]h)}(hMvoid phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause)h](j)}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7hhhj8hM ubj)}(h phy_get_pauseh]j%)}(h phy_get_pauseh]h phy_get_pause}(hj!8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj7hhhj8hM ubj)}(h;(struct phy_device *phydev, bool *tx_pause, bool *rx_pause)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj=8hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj98ubj)}(h h]h }(hjJ8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj98ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj[8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjX8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]8modnameN classnameNjj!)}j$]j')}jj#8sbc.phy_get_pauseasbuh1hhj98ubj)}(h h]h }(hj{8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj98ubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj98ubj%)}(hphydevh]hphydev}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj98ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj58ubj)}(hbool *tx_pauseh](j)}(hjTh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hj8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(htx_pauseh]htx_pause}(hj8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj58ubj)}(hbool *rx_pauseh](j)}(hjTh]hbool}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj;)}(hj>h]h*}(hj 9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj8ubj%)}(hrx_pauseh]hrx_pause}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj58ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj7hhhj8hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhj8hM ubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hM hj7hhubjS)}(hhh]jX)}(hresolve negotiated pause modesh]hresolve negotiated pause modes}(hjB9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj?9hhubah}(h]h ]h"]h$]h&]uh1jRhj7hhhj8hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZ9jxjZ9jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` phy_device struct ``bool *tx_pause`` pointer to bool to indicate whether transmit pause should be enabled. ``bool *rx_pause`` pointer to bool to indicate whether receive pause should be enabled. **Description** Resolve and return the flow control modes according to the negotiation result. This includes checking that we are operating in full duplex mode. See linkmode_resolve_pause() for further details.h](jX)}(h**Parameters**h]j)}(hjd9h]h Parameters}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb9ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj^9ubj)}(hhh](j)}(h0``struct phy_device *phydev`` phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj9h]hstruct phy_device *phydev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj}9ubj)}(hhh]jX)}(hphy_device structh]hphy_device struct}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hM hj9ubah}(h]h ]h"]h$]h&]uh1jhj}9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjz9ubj)}(hY``bool *tx_pause`` pointer to bool to indicate whether transmit pause should be enabled. h](j)}(h``bool *tx_pause``h]j)}(hj9h]hbool *tx_pause}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj9ubj)}(hhh]jX)}(hEpointer to bool to indicate whether transmit pause should be enabled.h]hEpointer to bool to indicate whether transmit pause should be enabled.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hM hjz9ubj)}(hX``bool *rx_pause`` pointer to bool to indicate whether receive pause should be enabled. h](j)}(h``bool *rx_pause``h]j)}(hj9h]hbool *rx_pause}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj9ubj)}(hhh]jX)}(hDpointer to bool to indicate whether receive pause should be enabled.h]hDpointer to bool to indicate whether receive pause should be enabled.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj :ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj :hM hjz9ubeh}(h]h ]h"]h$]h&]uh1jhj^9ubjX)}(h**Description**h]j)}(hj2:h]h Description}(hj4:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0:ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj^9ubjX)}(hResolve and return the flow control modes according to the negotiation result. This includes checking that we are operating in full duplex mode. See linkmode_resolve_pause() for further details.h]hResolve and return the flow control modes according to the negotiation result. This includes checking that we are operating in full duplex mode. See linkmode_resolve_pause() for further details.}(hjH:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj^9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_get_internal_delay (C function)c.phy_get_internal_delayhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hes32 phy_get_internal_delay (struct phy_device *phydev, const int *delay_values, int size, bool is_rx)h]h)}(hds32 phy_get_internal_delay(struct phy_device *phydev, const int *delay_values, int size, bool is_rx)h](h)}(hhh]j%)}(hs32h]hs32}(hjz:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjw:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|:modnameN classnameNjj!)}j$]j')}jphy_get_internal_delaysbc.phy_get_internal_delayasbuh1hhjs:hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjs:hhhj:hM ubj)}(hphy_get_internal_delayh]j%)}(hj:h]hphy_get_internal_delay}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjs:hhhj:hM ubj)}(hJ(struct phy_device *phydev, const int *delay_values, int size, bool is_rx)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j:c.phy_get_internal_delayasbuh1hhj:ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj:ubj%)}(hphydevh]hphydev}(hj ;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubj)}(hconst int *delay_valuesh](h)}(hjh]hconst}(hj9;hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj5;ubj)}(h h]h }(hjF;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5;ubj)}(hinth]hint}(hjT;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5;ubj)}(h h]h }(hjb;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5;ubj;)}(hj>h]h*}(hjp;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj5;ubj%)}(h delay_valuesh]h delay_values}(hj};hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubj)}(hint sizeh](j)}(hinth]hint}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj%)}(hsizeh]hsize}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubj)}(h bool is_rxh](j)}(hjTh]hbool}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj%)}(his_rxh]his_rx}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjs:hhhj:hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjo:hhhj:hM ubah}(h]jj:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj:hM hjl:hhubjS)}(hhh]jX)}(h'returns the index of the internal delayh]h'returns the index of the internal delay}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj <hhubah}(h]h ]h"]h$]h&]uh1jRhjl:hhhj:hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(<jxj(<jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` phy_device struct ``const int *delay_values`` array of delays the PHY supports ``int size`` the size of the delay array ``bool is_rx`` boolean to indicate to get the rx internal delay **Description** Returns the index within the array of internal delay passed in. If the device property is not present then the interface type is checked if the interface defines use of internal delay then a 1 is returned otherwise a 0 is returned. The array must be in ascending order. If PHY does not have an ascending order array then size = 0 and the value of the delay property is returned. Return -EINVAL if the delay is invalid or cannot be found.h](jX)}(h**Parameters**h]j)}(hj2<h]h Parameters}(hj4<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0<ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,<ubj)}(hhh](j)}(h0``struct phy_device *phydev`` phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjQ<h]hstruct phy_device *phydev}(hjS<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO<ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjK<ubj)}(hhh]jX)}(hphy_device structh]hphy_device struct}(hjj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjf<hM hjg<ubah}(h]h ]h"]h$]h&]uh1jhjK<ubeh}(h]h ]h"]h$]h&]uh1jhjf<hM hjH<ubj)}(h=``const int *delay_values`` array of delays the PHY supports h](j)}(h``const int *delay_values``h]j)}(hj<h]hconst int *delay_values}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj<ubj)}(hhh]jX)}(h array of delays the PHY supportsh]h array of delays the PHY supports}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hjH<ubj)}(h)``int size`` the size of the delay array h](j)}(h ``int size``h]j)}(hj<h]hint size}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj<ubj)}(hhh]jX)}(hthe size of the delay arrayh]hthe size of the delay array}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hM hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hM hjH<ubj)}(h@``bool is_rx`` boolean to indicate to get the rx internal delay h](j)}(h``bool is_rx``h]j)}(hj<h]h bool is_rx}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj<ubj)}(hhh]jX)}(h0boolean to indicate to get the rx internal delayh]h0boolean to indicate to get the rx internal delay}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj=hM hj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj=hM hjH<ubeh}(h]h ]h"]h$]h&]uh1jhj,<ubjX)}(h**Description**h]j)}(hj7=h]h Description}(hj9=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5=ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,<ubjX)}(hXReturns the index within the array of internal delay passed in. If the device property is not present then the interface type is checked if the interface defines use of internal delay then a 1 is returned otherwise a 0 is returned. The array must be in ascending order. If PHY does not have an ascending order array then size = 0 and the value of the delay property is returned. Return -EINVAL if the delay is invalid or cannot be found.h]hXReturns the index within the array of internal delay passed in. If the device property is not present then the interface type is checked if the interface defines use of internal delay then a 1 is returned otherwise a 0 is returned. The array must be in ascending order. If PHY does not have an ascending order array then size = 0 and the value of the delay property is returned. Return -EINVAL if the delay is invalid or cannot be found.}(hjM=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj,<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phy_get_tx_amplitude_gain (C function)c.phy_get_tx_amplitude_gainhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hint phy_get_tx_amplitude_gain (struct phy_device *phydev, struct device *dev, enum ethtool_link_mode_bit_indices linkmode, u32 *val)h]h)}(hint phy_get_tx_amplitude_gain(struct phy_device *phydev, struct device *dev, enum ethtool_link_mode_bit_indices linkmode, u32 *val)h](j)}(hinth]hint}(hj|=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx=hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMh ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjx=hhhj=hMh ubj)}(hphy_get_tx_amplitude_gainh]j%)}(hphy_get_tx_amplitude_gainh]hphy_get_tx_amplitude_gain}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjx=hhhj=hMh ubj)}(hf(struct phy_device *phydev, struct device *dev, enum ethtool_link_mode_bit_indices linkmode, u32 *val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jj=sbc.phy_get_tx_amplitude_gainasbuh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hphydevh]hphydev}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubj)}(hstruct device *devh](h)}(hjh]hstruct}(hj+>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'>ubj)}(h h]h }(hj8>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'>ubh)}(hhh]j%)}(hdeviceh]hdevice}(hjI>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjF>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjK>modnameN classnameNjj!)}j$]j=c.phy_get_tx_amplitude_gainasbuh1hhj'>ubj)}(h h]h }(hjg>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'>ubj;)}(hj>h]h*}(hju>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'>ubj%)}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubj)}(h+enum ethtool_link_mode_bit_indices linkmodeh](h)}(hhh]henum}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(hhh]j%)}(hethtool_link_mode_bit_indicesh]hethtool_link_mode_bit_indices}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj>modnameN classnameNjj!)}j$]j=c.phy_get_tx_amplitude_gainasbuh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj%)}(hlinkmodeh]hlinkmode}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubj)}(hu32 *valh](h)}(hhh]j%)}(hu32h]hu32}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj?modnameN classnameNjj!)}j$]j=c.phy_get_tx_amplitude_gainasbuh1hhj>ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubj;)}(hj>h]h*}(hj-?hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>ubj%)}(hvalh]hval}(hj:?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjx=hhhj=hMh ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjt=hhhj=hMh ubah}(h]jo=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hMh hjq=hhubjS)}(hhh]jX)}(h#stores tx amplitude gain in **val**h](hstores tx amplitude gain in }(hjd?hhhNhNubj)}(h**val**h]hval}(hjl?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd?ubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMh hja?hhubah}(h]h ]h"]h$]h&]uh1jRhjq=hhhj=hMh ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?jxj?jyjzj{uh1hhhhjnhNhNubj})}(hX<**Parameters** ``struct phy_device *phydev`` phy_device struct ``struct device *dev`` pointer to the devices device struct ``enum ethtool_link_mode_bit_indices linkmode`` linkmode for which the tx amplitude gain should be retrieved ``u32 *val`` tx amplitude gain **Return** 0 on success, < 0 on failureh](jX)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMl hj?ubj)}(hhh](j)}(h0``struct phy_device *phydev`` phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj?h]hstruct phy_device *phydev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMi hj?ubj)}(hhh]jX)}(hphy_device structh]hphy_device struct}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMi hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMi hj?ubj)}(h<``struct device *dev`` pointer to the devices device struct h](j)}(h``struct device *dev``h]j)}(hj?h]hstruct device *dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMj hj?ubj)}(hhh]jX)}(h$pointer to the devices device structh]h$pointer to the devices device struct}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMj hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hMj hj?ubj)}(hm``enum ethtool_link_mode_bit_indices linkmode`` linkmode for which the tx amplitude gain should be retrieved h](j)}(h/``enum ethtool_link_mode_bit_indices linkmode``h]j)}(hj%@h]h+enum ethtool_link_mode_bit_indices linkmode}(hj'@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#@ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMk hj@ubj)}(hhh]jX)}(h@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:@hMk hj;@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj:@hMk hj?ubj)}(h``u32 *val`` tx amplitude gain h](j)}(h ``u32 *val``h]j)}(hj^@h]hu32 *val}(hj`@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\@ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMl hjX@ubj)}(hhh]jX)}(htx amplitude gainh]htx amplitude gain}(hjw@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjs@hMl hjt@ubah}(h]h ]h"]h$]h&]uh1jhjX@ubeh}(h]h ]h"]h$]h&]uh1jhjs@hMl hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjX)}(h **Return**h]j)}(hj@h]hReturn}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMn hj?ubjX)}(h0 on success, < 0 on failureh]h0 on success, < 0 on failure}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMn hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phy_get_mac_termination (C function)c.phy_get_mac_terminationhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hUint phy_get_mac_termination (struct phy_device *phydev, struct device *dev, u32 *val)h]h)}(hTint phy_get_mac_termination(struct phy_device *phydev, struct device *dev, u32 *val)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhj@hM ubj)}(hphy_get_mac_terminationh]j%)}(hphy_get_mac_terminationh]hphy_get_mac_termination}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhj@hM ubj)}(h9(struct phy_device *phydev, struct device *dev, u32 *val)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjAubj)}(h h]h }(hj(AhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj9AhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6Aubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj;AmodnameN classnameNjj!)}j$]j')}jjAsbc.phy_get_mac_terminationasbuh1hhjAubj)}(h h]h }(hjYAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj;)}(hj>h]h*}(hjgAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubj%)}(hphydevh]hphydev}(hjtAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hstruct device *devh](h)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubh)}(hhh]j%)}(hdeviceh]hdevice}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]jUAc.phy_get_mac_terminationasbuh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubj%)}(hdevh]hdev}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubj)}(hu32 *valh](h)}(hhh]j%)}(hu32h]hu32}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjBmodnameN classnameNjj!)}j$]jUAc.phy_get_mac_terminationasbuh1hhjAubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj;)}(hj>h]h*}(hj,BhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjAubj%)}(hvalh]hval}(hj9BhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubeh}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhj@hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhj@hM ubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj@hM hj@hhubjS)}(hhh]jX)}(h!stores MAC termination in **val**h](hstores MAC termination in }(hjcBhhhNhNubj)}(h**val**h]hval}(hjkBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcBubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hj`Bhhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhj@hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` phy_device struct ``struct device *dev`` pointer to the devices device struct ``u32 *val`` MAC termination **Return** 0 on success, < 0 on failureh](jX)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubj)}(hhh](j)}(h0``struct phy_device *phydev`` phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjBh]hstruct phy_device *phydev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubj)}(hhh]jX)}(hphy_device structh]hphy_device struct}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBhM hjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhM hjBubj)}(h<``struct device *dev`` pointer to the devices device struct h](j)}(h``struct device *dev``h]j)}(hjBh]hstruct device *dev}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubj)}(hhh]jX)}(h$pointer to the devices device structh]h$pointer to the devices device struct}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjChM hjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjChM hjBubj)}(h``u32 *val`` MAC termination h](j)}(h ``u32 *val``h]j)}(hj$Ch]hu32 *val}(hj&ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Cubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjCubj)}(hhh]jX)}(hMAC terminationh]hMAC termination}(hj=ChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9ChM hj:Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj9ChM hjBubeh}(h]h ]h"]h$]h&]uh1jhjBubjX)}(h **Return**h]j)}(hj_Ch]hReturn}(hjaChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Cubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubjX)}(h0 on success, < 0 on failureh]h0 on success, < 0 on failure}(hjuChhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_get_sfp_port (C function)c.phy_get_sfp_porthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h>struct phy_port * phy_get_sfp_port (struct phy_device *phydev)h]h)}(hh]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjChhhjChM ubj)}(hphy_get_sfp_porth]j%)}(hjCh]hphy_get_sfp_port}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjChhhjChM ubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjDubj)}(h h]h }(hj+DhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjDmodnameN classnameNjj!)}j$]jCc.phy_get_sfp_portasbuh1hhjDubj)}(h h]h }(hjZDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDubj;)}(hj>h]h*}(hjhDhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjDubj%)}(hphydevh]hphydev}(hjuDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjDubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDubah}(h]h ]h"]h$]h&]j<j=uh1jhjChhhjChM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjChhhjChM ubah}(h]jCah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChM hjChhubjS)}(hhh]jX)}(h)Returns the first valid SFP port of a PHYh]h)Returns the first valid SFP port of a PHY}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjDhhubah}(h]h ]h"]h$]h&]uh1jRhjChhhjChM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjDjxjDjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_device *phydev`` pointer to the PHY device to get the SFP port from **Return** The first active SFP (serdes) port of a PHY device, NULL if none exist.h](jX)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjDubj)}(hhh]j)}(hQ``struct phy_device *phydev`` pointer to the PHY device to get the SFP port from h](j)}(h``struct phy_device *phydev``h]j)}(hjDh]hstruct phy_device *phydev}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjDubj)}(hhh]jX)}(h2pointer to the PHY device to get the SFP port fromh]h2pointer to the PHY device to get the SFP port from}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubjX)}(h **Return**h]j)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjDubjX)}(hGThe first active SFP (serdes) port of a PHY device, NULL if none exist.h]hGThe first active SFP (serdes) port of a PHY device, NULL if none exist.}(hj1EhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$fwnode_mdio_find_device (C function)c.fwnode_mdio_find_devicehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKstruct mdio_device * fwnode_mdio_find_device (struct fwnode_handle *fwnode)h]h)}(hIstruct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)h](h)}(hjh]hstruct}(hj`EhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\Ehhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjnEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\EhhhjmEhMubh)}(hhh]j%)}(h mdio_deviceh]h mdio_device}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|Eubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]j')}jfwnode_mdio_find_devicesbc.fwnode_mdio_find_deviceasbuh1hhj\EhhhjmEhMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\EhhhjmEhMubj;)}(hj>h]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\EhhhjmEhMubj)}(hfwnode_mdio_find_deviceh]j%)}(hjEh]hfwnode_mdio_find_device}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj\EhhhjmEhMubj)}(h(struct fwnode_handle *fwnode)h]j)}(hstruct fwnode_handle *fwnodeh](h)}(hjh]hstruct}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEmodnameN classnameNjj!)}j$]jEc.fwnode_mdio_find_deviceasbuh1hhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hj$FhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(hfwnodeh]hfwnode}(hj1FhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubah}(h]h ]h"]h$]h&]j<j=uh1jhj\EhhhjmEhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXEhhhjmEhMubah}(h]jSEah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjmEhMhjUEhhubjS)}(hhh]jX)}(h$Given a fwnode, find the mdio_deviceh]h$Given a fwnode, find the mdio_device}(hj[FhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjXFhhubah}(h]h ]h"]h$]h&]uh1jRhjUEhhhjmEhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjsFjxjsFjyjzj{uh1hhhhjnhNhNubj})}(hX3**Parameters** ``struct fwnode_handle *fwnode`` pointer to the mdio_device's fwnode **Description** If successful, returns a pointer to the mdio_device with the embedded struct device refcount incremented by one, or NULL on failure. The caller should call put_device() on the mdio_device after its use.h](jX)}(h**Parameters**h]j)}(hj}Fh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Fubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjwFubj)}(hhh]j)}(hE``struct fwnode_handle *fwnode`` pointer to the mdio_device's fwnode h](j)}(h ``struct fwnode_handle *fwnode``h]j)}(hjFh]hstruct fwnode_handle *fwnode}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjFubj)}(hhh]jX)}(h#pointer to the mdio_device's fwnodeh]h%pointer to the mdio_device’s fwnode}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjwFubjX)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjwFubjX)}(hIf successful, returns a pointer to the mdio_device with the embedded struct device refcount incremented by one, or NULL on failure. The caller should call put_device() on the mdio_device after its use.h]hIf successful, returns a pointer to the mdio_device with the embedded struct device refcount incremented by one, or NULL on failure. The caller should call put_device() on the mdio_device after its use.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjwFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#fwnode_phy_find_device (C function)c.fwnode_phy_find_devicehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMstruct phy_device * fwnode_phy_find_device (struct fwnode_handle *phy_fwnode)h]h)}(hKstruct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)h](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj*GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhj)GhMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj;GhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8Gubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=GmodnameN classnameNjj!)}j$]j')}jfwnode_phy_find_devicesbc.fwnode_phy_find_deviceasbuh1hhjGhhhj)GhMubj)}(h h]h }(hj\GhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhj)GhMubj;)}(hj>h]h*}(hjjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGhhhj)GhMubj)}(hfwnode_phy_find_deviceh]j%)}(hjYGh]hfwnode_phy_find_device}(hj{GhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjwGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhj)GhMubj)}(h"(struct fwnode_handle *phy_fwnode)h]j)}(h struct fwnode_handle *phy_fwnodeh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjGmodnameN classnameNjj!)}j$]jWGc.fwnode_phy_find_deviceasbuh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hjGhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(h phy_fwnodeh]h phy_fwnode}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubah}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhj)GhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGhhhj)GhMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)GhMhjGhhubjS)}(hhh]jX)}(h)For provided phy_fwnode, find phy_device.h]h)For provided phy_fwnode, find phy_device.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhj)GhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/Hjxj/Hjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct fwnode_handle *phy_fwnode`` Pointer to the phy's fwnode. **Description** If successful, returns a pointer to the phy_device with the embedded struct device refcount incremented by one, or NULL on failure.h](jX)}(h**Parameters**h]j)}(hj9Hh]h Parameters}(hj;HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Hubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj3Hubj)}(hhh]j)}(hB``struct fwnode_handle *phy_fwnode`` Pointer to the phy's fwnode. h](j)}(h$``struct fwnode_handle *phy_fwnode``h]j)}(hjXHh]h struct fwnode_handle *phy_fwnode}(hjZHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVHubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhjRHubj)}(hhh]jX)}(hPointer to the phy's fwnode.h]hPointer to the phy’s fwnode.}(hjqHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmHhMhjnHubah}(h]h ]h"]h$]h&]uh1jhjRHubeh}(h]h ]h"]h$]h&]uh1jhjmHhMhjOHubah}(h]h ]h"]h$]h&]uh1jhj3HubjX)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj3HubjX)}(hIf successful, returns a pointer to the phy_device with the embedded struct device refcount incremented by one, or NULL on failure.h]hIf successful, returns a pointer to the phy_device with the embedded struct device refcount incremented by one, or NULL on failure.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chMhj3Hubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h fwnode_get_phy_node (C function)c.fwnode_get_phy_nodehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hOstruct fwnode_handle * fwnode_get_phy_node (const struct fwnode_handle *fwnode)h]h)}(hMstruct fwnode_handle *fwnode_get_phy_node(const struct fwnode_handle *fwnode)h](h)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM1ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjHhM1ubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j')}jfwnode_get_phy_nodesbc.fwnode_get_phy_nodeasbuh1hhjHhhhjHhM1ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHhhhjHhM1ubj;)}(hj>h]h*}(hj&IhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHhhhjHhM1ubj)}(hfwnode_get_phy_nodeh]j%)}(hjIh]hfwnode_get_phy_node}(hj7IhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3Iubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjHhhhjHhM1ubj)}(h$(const struct fwnode_handle *fwnode)h]j)}(h"const struct fwnode_handle *fwnodeh](h)}(hjh]hconst}(hjRIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjNIubj)}(h h]h }(hj_IhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNIubh)}(hjh]hstruct}(hjmIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjNIubj)}(h h]h }(hjzIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNIubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]jIc.fwnode_get_phy_nodeasbuh1hhjNIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNIubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjNIubj%)}(hfwnodeh]hfwnode}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJIubah}(h]h ]h"]h$]h&]j<j=uh1jhjHhhhjHhM1ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjHhhhjHhM1ubah}(h]jHah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjHhM1hjHhhubjS)}(hhh]jX)}(h+Get the phy_node using the named reference.h]h+Get the phy_node using the named reference.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM1hjIhhubah}(h]h ]h"]h$]h&]uh1jRhjHhhhjHhM1ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhjnhNhNubj})}(hXe**Parameters** ``const struct fwnode_handle *fwnode`` Pointer to fwnode from which phy_node has to be obtained. **Description** Refer return conditions of fwnode_find_reference(). For ACPI, only "phy-handle" is supported. Legacy DT properties "phy" and "phy-device" are not supported in ACPI. DT supports all the three named references to the phy node.h](jX)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM5hj Jubj)}(hhh]j)}(ha``const struct fwnode_handle *fwnode`` Pointer to fwnode from which phy_node has to be obtained. h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hj/Jh]h"const struct fwnode_handle *fwnode}(hj1JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Jubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM2hj)Jubj)}(hhh]jX)}(h9Pointer to fwnode from which phy_node has to be obtained.h]h9Pointer to fwnode from which phy_node has to be obtained.}(hjHJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDJhM2hjEJubah}(h]h ]h"]h$]h&]uh1jhj)Jubeh}(h]h ]h"]h$]h&]uh1jhjDJhM2hj&Jubah}(h]h ]h"]h$]h&]uh1jhj JubjX)}(h**Description**h]j)}(hjjJh]h Description}(hjlJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhJubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM4hj JubjX)}(hRefer return conditions of fwnode_find_reference(). For ACPI, only "phy-handle" is supported. Legacy DT properties "phy" and "phy-device" are not supported in ACPI. DT supports all the three named references to the phy node.h]hRefer return conditions of fwnode_find_reference(). For ACPI, only “phy-handle” is supported. Legacy DT properties “phy” and “phy-device” are not supported in ACPI. DT supports all the three named references to the phy node.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:128: ./drivers/net/phy/phy_device.chM3hj Jubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_uses_state_machine (C function)c.phy_uses_state_machinehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h7bool phy_uses_state_machine (struct phy_device *phydev)h]h)}(h6bool phy_uses_state_machine(struct phy_device *phydev)h](j)}(hjTh]hbool}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJhhhjJhMubj)}(hphy_uses_state_machineh]j%)}(hphy_uses_state_machineh]hphy_uses_state_machine}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjJhhhjJhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj KhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj KmodnameN classnameNjj!)}j$]j')}jjJsbc.phy_uses_state_machineasbuh1hhjJubj)}(h h]h }(hj)KhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hj7KhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hphydevh]hphydev}(hjDKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjJubah}(h]h ]h"]h$]h&]j<j=uh1jhjJhhhjJhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjJhhhjJhMubah}(h]jJah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjJhMhjJhhubjS)}(hhh]jX)}(h3test whether consumer driver uses PAL state machineh]h3test whether consumer driver uses PAL state machine}(hjnKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjkKhhubah}(h]h ]h"]h$]h&]uh1jRhjJhhhjJhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` the target PHY device structure **Description** Ultimately, this aims to indirectly determine whether the PHY is attached to a consumer which uses the state machine by calling phy_start() and phy_stop(). When the PHY driver consumer uses phylib, it must have previously called phy_connect_direct() or one of its derivatives, so that phy_prepare_link() has set up a hook for monitoring state changes. When the PHY driver is used by the MAC driver consumer through phylink (the only other provider of a phy_link_change() method), using the PHY state machine is not optional. **Return** true if consumer calls phy_start() and phy_stop(), false otherwise.h](jX)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubj)}(hhh]j)}(h>``struct phy_device *phydev`` the target PHY device structure h](j)}(h``struct phy_device *phydev``h]j)}(hjKh]hstruct phy_device *phydev}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubj)}(hhh]jX)}(hthe target PHY device structureh]hthe target PHY device structure}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubjX)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubjX)}(hUltimately, this aims to indirectly determine whether the PHY is attached to a consumer which uses the state machine by calling phy_start() and phy_stop().h]hUltimately, this aims to indirectly determine whether the PHY is attached to a consumer which uses the state machine by calling phy_start() and phy_stop().}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubjX)}(hWhen the PHY driver consumer uses phylib, it must have previously called phy_connect_direct() or one of its derivatives, so that phy_prepare_link() has set up a hook for monitoring state changes.h]hWhen the PHY driver consumer uses phylib, it must have previously called phy_connect_direct() or one of its derivatives, so that phy_prepare_link() has set up a hook for monitoring state changes.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubjX)}(hWhen the PHY driver is used by the MAC driver consumer through phylink (the only other provider of a phy_link_change() method), using the PHY state machine is not optional.h]hWhen the PHY driver is used by the MAC driver consumer through phylink (the only other provider of a phy_link_change() method), using the PHY state machine is not optional.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjKubjX)}(h **Return**h]j)}(hj/Lh]hReturn}(hj1LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Lubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM"hjKubjX)}(hCtrue if consumer calls phy_start() and phy_stop(), false otherwise.h]hCtrue if consumer calls phy_start() and phy_stop(), false otherwise.}(hjELhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM#hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_register_fixup (C function)c.phy_register_fixuphNtauh1hhjnhhhNhNubh)}(hhh](h)}(hkint phy_register_fixup (const char *bus_id, u32 phy_uid, u32 phy_uid_mask, int (*run)(struct phy_device *))h]h)}(hiint phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, int (*run)(struct phy_device*))h](j)}(hinth]hint}(hjtLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpLhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpLhhhjLhMubj)}(hphy_register_fixuph]j%)}(hphy_register_fixuph]hphy_register_fixup}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjpLhhhjLhMubj)}(hS(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, int (*run)(struct phy_device*))h](j)}(hconst char *bus_idh](h)}(hjh]hconst}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj)}(hcharh]hchar}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjLubj%)}(hbus_idh]hbus_id}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLubj)}(h u32 phy_uidh](h)}(hhh]j%)}(hu32h]hu32}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjMmodnameN classnameNjj!)}j$]j')}jjLsbc.phy_register_fixupasbuh1hhj Mubj)}(h h]h }(hj1MhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj Mubj%)}(hphy_uidh]hphy_uid}(hj?MhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj Mubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLubj)}(hu32 phy_uid_maskh](h)}(hhh]j%)}(hu32h]hu32}(hj[MhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]MmodnameN classnameNjj!)}j$]j-Mc.phy_register_fixupasbuh1hhjTMubj)}(h h]h }(hjyMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTMubj%)}(h phy_uid_maskh]h phy_uid_mask}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLubj)}(hint (*run)(struct phy_device*)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubj;)}(hjmh]h(}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj%)}(hrunh]hrun}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubj;)}(hjh]h)}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj;)}(hjmh]h(}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubh)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjMubj)}(h h]h }(hj NhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j-Mc.phy_register_fixupasbuh1hhjMubj;)}(hj>h]h*}(hj:NhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubj;)}(hjh]h)}(hjGNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjMubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjLubeh}(h]h ]h"]h$]h&]j<j=uh1jhjpLhhhjLhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlLhhhjLhMubah}(h]jgLah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjLhMhjiLhhubjS)}(hhh]jX)}(h/creates a new phy_fixup and adds it to the listh]h/creates a new phy_fixup and adds it to the list}(hjpNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjmNhhubah}(h]h ]h"]h$]h&]uh1jRhjiLhhhjLhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNjxjNjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``const char *bus_id`` A string which matches phydev->mdio.dev.bus_id (or NULL) ``u32 phy_uid`` Used to match against phydev->phy_id (the UID of the PHY) ``u32 phy_uid_mask`` Applied to phydev->phy_id and fixup->phy_uid before comparison (or 0 to disable id-based matching) ``int (*run)(struct phy_device *)`` The actual code to be run when a matching PHY is foundh](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjNubj)}(hhh](j)}(hP``const char *bus_id`` A string which matches phydev->mdio.dev.bus_id (or NULL) h](j)}(h``const char *bus_id``h]j)}(hjNh]hconst char *bus_id}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjNubj)}(hhh]jX)}(h8A string which matches phydev->mdio.dev.bus_id (or NULL)h]h8A string which matches phydev->mdio.dev.bus_id (or NULL)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubj)}(hJ``u32 phy_uid`` Used to match against phydev->phy_id (the UID of the PHY) h](j)}(h``u32 phy_uid``h]j)}(hjNh]h u32 phy_uid}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjNubj)}(hhh]jX)}(h9Used to match against phydev->phy_id (the UID of the PHY)h]h9Used to match against phydev->phy_id (the UID of the PHY)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjNubj)}(hx``u32 phy_uid_mask`` Applied to phydev->phy_id and fixup->phy_uid before comparison (or 0 to disable id-based matching) h](j)}(h``u32 phy_uid_mask``h]j)}(hj#Oh]hu32 phy_uid_mask}(hj%OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Oubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjOubj)}(hhh]jX)}(hbApplied to phydev->phy_id and fixup->phy_uid before comparison (or 0 to disable id-based matching)h]hbApplied to phydev->phy_id and fixup->phy_uid before comparison (or 0 to disable id-based matching)}(hjh]h*}(hj@PhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hbush]hbus}(hjMPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(hint addrh](j)}(hinth]hint}(hjfPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbPubj)}(h h]h }(hjtPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbPubj%)}(haddrh]haddr}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(h"struct phy_c45_device_ids *c45_idsh](h)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(hhh]j%)}(hphy_c45_device_idsh]hphy_c45_device_ids}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j.Pc.get_phy_c45_idsasbuh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjPubj%)}(hc45_idsh]hc45_ids}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjOhM~ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjOhM~ubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhM~hjOhhubjS)}(hhh]jX)}(h/reads the specified addr for its 802.3-c45 IDs.h]h/reads the specified addr for its 802.3-c45 IDs.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM~hjQhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjOhM~ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj4Qjxj4Qjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the target MII bus ``int addr`` PHY address on the MII bus ``struct phy_c45_device_ids *c45_ids`` where to store the c45 ID information. **Description** Read the PHY "devices in package". If this appears to be valid, read the PHY identifiers for each device. Return the "devices in package" and identifiers in **c45_ids**. Returns zero on success, ``-EIO`` on bus access error, or ``-ENODEV`` if the "devices in package" is invalid or no device responds.h](jX)}(h**Parameters**h]j)}(hj>Qh]h Parameters}(hj@QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjint get_phy_c22_id(struct mii_bus *bus, int addr, u32 *phy_id)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhjRhMubj)}(hget_phy_c22_idh]j%)}(hget_phy_c22_idh]hget_phy_c22_id}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhjRhMubj)}(h,(struct mii_bus *bus, int addr, u32 *phy_id)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j')}jjRsbc.get_phy_c22_idasbuh1hhjRubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(hbush]hbus}(hj*ShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(hint addrh](j)}(hinth]hint}(hjCShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Subj)}(h h]h }(hjQShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?Subj%)}(haddrh]haddr}(hj_ShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?Subeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubj)}(h u32 *phy_idh](h)}(hhh]j%)}(hu32h]hu32}(hj{ShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxSubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj}SmodnameN classnameNjj!)}j$]j Sc.get_phy_c22_idasbuh1hhjtSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtSubj;)}(hj>h]h*}(hjShhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtSubj%)}(hphy_idh]hphy_id}(hjShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtSubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjRubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhjRhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjRhhhjRhMubah}(h]jRah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhMhjRhhubjS)}(hhh]jX)}(h.reads the specified addr for its clause 22 ID.h]h.reads the specified addr for its clause 22 ID.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjShhubah}(h]h ]h"]h$]h&]uh1jRhjRhhhjRhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjSjxjSjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the target MII bus ``int addr`` PHY address on the MII bus ``u32 *phy_id`` where to store the ID retrieved. **Description** Read the 802.3 clause 22 PHY ID from the PHY at **addr** on the **bus**, placing it in **phy_id**. Return zero on successful read and the ID is valid, ``-EIO`` on bus access error, or ``-ENODEV`` if no device responds or invalid ID.h](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjSubj)}(hhh](j)}(h+``struct mii_bus *bus`` the target MII bus h](j)}(h``struct mii_bus *bus``h]j)}(hjTh]hstruct mii_bus *bus}(hj!ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjTubj)}(hhh]jX)}(hthe target MII bush]hthe target MII bus}(hj8ThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4ThMhj5Tubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhj4ThMhjTubj)}(h(``int addr`` PHY address on the MII bus h](j)}(h ``int addr``h]j)}(hjXTh]hint addr}(hjZThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVTubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjRTubj)}(hhh]jX)}(hPHY address on the MII bush]hPHY address on the MII bus}(hjqThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmThMhjnTubah}(h]h ]h"]h$]h&]uh1jhjRTubeh}(h]h ]h"]h$]h&]uh1jhjmThMhjTubj)}(h1``u32 *phy_id`` where to store the ID retrieved. h](j)}(h``u32 *phy_id``h]j)}(hjTh]h u32 *phy_id}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjTubj)}(hhh]jX)}(h where to store the ID retrieved.h]h where to store the ID retrieved.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMhjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThMhjTubeh}(h]h ]h"]h$]h&]uh1jhjSubjX)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjSubjX)}(hRead the 802.3 clause 22 PHY ID from the PHY at **addr** on the **bus**, placing it in **phy_id**. Return zero on successful read and the ID is valid, ``-EIO`` on bus access error, or ``-ENODEV`` if no device responds or invalid ID.h](h0Read the 802.3 clause 22 PHY ID from the PHY at }(hjThhhNhNubj)}(h**addr**h]haddr}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh on the }(hjThhhNhNubj)}(h**bus**h]hbus}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh, placing it in }(hjThhhNhNubj)}(h **phy_id**h]hphy_id}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh6. Return zero on successful read and the ID is valid, }(hjThhhNhNubj)}(h``-EIO``h]h-EIO}(hj UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh on bus access error, or }(hjThhhNhNubj)}(h ``-ENODEV``h]h-ENODEV}(hj2UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh% if no device responds or invalid ID.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_prepare_link (C function)c.phy_prepare_linkhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hWvoid phy_prepare_link (struct phy_device *phydev, void (*handler)(struct net_device *))h]h)}(hUvoid phy_prepare_link(struct phy_device *phydev, void (*handler)(struct net_device*))h](j)}(hvoidh]hvoid}(hjkUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgUhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjzUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgUhhhjyUhMubj)}(hphy_prepare_linkh]j%)}(hphy_prepare_linkh]hphy_prepare_link}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjgUhhhjyUhMubj)}(h@(struct phy_device *phydev, void (*handler)(struct net_device*))h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]j')}jjUsbc.phy_prepare_linkasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjUubj;)}(hj>h]h*}(hjUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjUubj%)}(hphydevh]hphydev}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubj)}(h#void (*handler)(struct net_device*)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hj(VhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubj;)}(hjmh]h(}(hj6VhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj;)}(hj>h]h*}(hjCVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj%)}(hhandlerh]hhandler}(hjPVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubj;)}(hjh]h)}(hj^VhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj;)}(hjmh]h(}(hjkVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubh)}(hjh]hstruct}(hjxVhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVubh)}(hhh]j%)}(h net_deviceh]h net_device}(hjVhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjVmodnameN classnameNjj!)}j$]jUc.phy_prepare_linkasbuh1hhjVubj;)}(hj>h]h*}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubj;)}(hjh]h)}(hjVhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjUubeh}(h]h ]h"]h$]h&]j<j=uh1jhjgUhhhjyUhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjcUhhhjyUhMubah}(h]j^Uah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyUhMhj`UhhubjS)}(hhh]jX)}(h-prepares the PHY layer to monitor link statush]h-prepares the PHY layer to monitor link status}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jRhj`UhhhjyUhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``void (*handler)(struct net_device *)`` callback function for link status change notifications **Description** Tells the PHY infrastructure to handle the gory details on monitoring link status (whether through polling or an interrupt), and to call back to the connected device driver when the link status changes. If you want to monitor your own link state, don't call this function.h](jX)}(h**Parameters**h]j)}(hj Wh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Wubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjWubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hj+Wh]hstruct phy_device *phydev}(hj-WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)Wubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj%Wubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjDWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@WhMhjAWubah}(h]h ]h"]h$]h&]uh1jhj%Wubeh}(h]h ]h"]h$]h&]uh1jhj@WhMhj"Wubj)}(h```void (*handler)(struct net_device *)`` callback function for link status change notifications h](j)}(h(``void (*handler)(struct net_device *)``h]j)}(hjdWh]h$void (*handler)(struct net_device *)}(hjfWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbWubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj^Wubj)}(hhh]jX)}(h6callback function for link status change notificationsh]h6callback function for link status change notifications}(hj}WhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyWhMhjzWubah}(h]h ]h"]h$]h&]uh1jhj^Wubeh}(h]h ]h"]h$]h&]uh1jhjyWhMhj"Wubeh}(h]h ]h"]h$]h&]uh1jhjWubjX)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjWubj)}(hhh]j)}(hXTells the PHY infrastructure to handle the gory details on monitoring link status (whether through polling or an interrupt), and to call back to the connected device driver when the link status changes. If you want to monitor your own link state, don't call this function.h](j)}(h*Tells the PHY infrastructure to handle theh]h*Tells the PHY infrastructure to handle the}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjWubj)}(hhh]jX)}(hgory details on monitoring link status (whether through polling or an interrupt), and to call back to the connected device driver when the link status changes. If you want to monitor your own link state, don't call this function.h]hgory details on monitoring link status (whether through polling or an interrupt), and to call back to the connected device driver when the link status changes. If you want to monitor your own link state, don’t call this function.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_poll_reset (C function)c.phy_poll_resethNtauh1hhjnhhhNhNubh)}(hhh](h)}(h.int phy_poll_reset (struct phy_device *phydev)h]h)}(h-int phy_poll_reset(struct phy_device *phydev)h](j)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Xhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj XhhhjXhMubj)}(hphy_poll_reseth]j%)}(hphy_poll_reseth]hphy_poll_reset}(hj0XhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,Xubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj XhhhjXhMubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjLXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjHXubj)}(h h]h }(hjYXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHXubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlXmodnameN classnameNjj!)}j$]j')}jj2Xsbc.phy_poll_resetasbuh1hhjHXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjHXubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjHXubj%)}(hphydevh]hphydev}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjDXubah}(h]h ]h"]h$]h&]j<j=uh1jhj XhhhjXhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXhhhjXhMubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjXhMhjXhhubjS)}(hhh]jX)}(h4Safely wait until a PHY reset has properly completedh]h4Safely wait until a PHY reset has properly completed}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjXhhubah}(h]h ]h"]h$]h&]uh1jRhjXhhhjXhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1hhhhjnhNhNubj})}(hXM**Parameters** ``struct phy_device *phydev`` The PHY device to poll **Description** According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as published in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR register must be polled until the BMCR_RESET bit clears. Furthermore, any attempts to write to PHY registers may have no effect or even generate MDIO bus errors until this is complete. Some PHYs (such as the Marvell 88E1111) don't entirely conform to the standard and do not fully reset after the BMCR_RESET bit is set, and may even *REQUIRE* a soft-reset to properly restart autonegotiation. In an effort to support such broken PHYs, this function is separate from the standard phy_init_hw() which will zero all the other bits in the BMCR and reapply all driver-specific and board-specific fixups.h](jX)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM hjXubj)}(hhh]j)}(h5``struct phy_device *phydev`` The PHY device to poll h](j)}(h``struct phy_device *phydev``h]j)}(hjYh]hstruct phy_device *phydev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj Yubj)}(hhh]jX)}(hThe PHY device to pollh]hThe PHY device to poll}(hj)YhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%YhMhj&Yubah}(h]h ]h"]h$]h&]uh1jhj Yubeh}(h]h ]h"]h$]h&]uh1jhj%YhMhjYubah}(h]h ]h"]h$]h&]uh1jhjXubjX)}(h**Description**h]j)}(hjKYh]h Description}(hjMYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIYubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjXubj)}(hhh]j)}(hXAccording to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as published in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR register must be polled until the BMCR_RESET bit clears. Furthermore, any attempts to write to PHY registers may have no effect or even generate MDIO bus errors until this is complete. Some PHYs (such as the Marvell 88E1111) don't entirely conform to the standard and do not fully reset after the BMCR_RESET bit is set, and may even *REQUIRE* a soft-reset to properly restart autonegotiation. In an effort to support such broken PHYs, this function is separate from the standard phy_init_hw() which will zero all the other bits in the BMCR and reapply all driver-specific and board-specific fixups.h](j)}(h=According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, ash]h=According to IEEE 802.3, Section 2, Subsection 22.2.4.1.1, as}(hjhYhhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM*hjdYubj)}(hhh](jX)}(hpublished in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR register must be polled until the BMCR_RESET bit clears.h]hpublished in 2008, a PHY reset may take up to 0.5 seconds. The MII BMCR register must be polled until the BMCR_RESET bit clears.}(hjzYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM hjwYubjX)}(hFurthermore, any attempts to write to PHY registers may have no effect or even generate MDIO bus errors until this is complete.h]hFurthermore, any attempts to write to PHY registers may have no effect or even generate MDIO bus errors until this is complete.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM#hjwYubjX)}(hXSome PHYs (such as the Marvell 88E1111) don't entirely conform to the standard and do not fully reset after the BMCR_RESET bit is set, and may even *REQUIRE* a soft-reset to properly restart autonegotiation. In an effort to support such broken PHYs, this function is separate from the standard phy_init_hw() which will zero all the other bits in the BMCR and reapply all driver-specific and board-specific fixups.h](hSome PHYs (such as the Marvell 88E1111) don’t entirely conform to the standard and do not fully reset after the BMCR_RESET bit is set, and may even }(hjYhhhNhNubjz)}(h *REQUIRE*h]hREQUIRE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjYubhX a soft-reset to properly restart autonegotiation. In an effort to support such broken PHYs, this function is separate from the standard phy_init_hw() which will zero all the other bits in the BMCR and reapply all driver-specific and board-specific fixups.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM&hjwYubeh}(h]h ]h"]h$]h&]uh1jhjdYubeh}(h]h ]h"]h$]h&]uh1jhjvYhM*hjaYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_sfp_connect_phy (C function)c.phy_sfp_connect_phyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h@int phy_sfp_connect_phy (void *upstream, struct phy_device *phy)h]h)}(h?int phy_sfp_connect_phy(void *upstream, struct phy_device *phy)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYhhhjYhMubj)}(hphy_sfp_connect_phyh]j%)}(hphy_sfp_connect_phyh]hphy_sfp_connect_phy}(hj ZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYhhhjYhMubj)}(h((void *upstream, struct phy_device *phy)h](j)}(hvoid *upstreamh](j)}(hvoidh]hvoid}(hj(ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Zubj)}(h h]h }(hj6ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$Zubj;)}(hj>h]h*}(hjDZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$Zubj%)}(hupstreamh]hupstream}(hjQZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$Zubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj Zubj)}(hstruct phy_device *phyh](h)}(hjh]hstruct}(hjjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfZubj)}(h h]h }(hjwZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfZubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]j')}jjZsbc.phy_sfp_connect_phyasbuh1hhjfZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfZubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfZubj%)}(hphyh]hphy}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj Zubeh}(h]h ]h"]h$]h&]j<j=uh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjYhMubah}(h]jYah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjYhMhjYhhubjS)}(hhh]jX)}(h0Connect the SFP module's PHY to the upstream PHY h]h2Connect the SFP module’s PHY to the upstream PHY}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jRhjYhhhjYhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj[jxj[jyjzj{uh1hhhhjnhNhNubj})}(hX]**Parameters** ``void *upstream`` pointer to the upstream phy device ``struct phy_device *phy`` pointer to the SFP module's phy device **Description** This helper allows keeping track of PHY devices on the link. It adds the SFP module's phy to the phy namespace of the upstream phy **Return** 0 on success, otherwise a negative error code.h](jX)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj [ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj [ubj)}(hhh](j)}(h6``void *upstream`` pointer to the upstream phy device h](j)}(h``void *upstream``h]j)}(hj.[h]hvoid *upstream}(hj0[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,[ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj([ubj)}(hhh]jX)}(h"pointer to the upstream phy deviceh]h"pointer to the upstream phy device}(hjG[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjC[hMhjD[ubah}(h]h ]h"]h$]h&]uh1jhj([ubeh}(h]h ]h"]h$]h&]uh1jhjC[hMhj%[ubj)}(hB``struct phy_device *phy`` pointer to the SFP module's phy device h](j)}(h``struct phy_device *phy``h]j)}(hjg[h]hstruct phy_device *phy}(hji[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje[ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhja[ubj)}(hhh]jX)}(h&pointer to the SFP module's phy deviceh]h(pointer to the SFP module’s phy device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|[hMhj}[ubah}(h]h ]h"]h$]h&]uh1jhja[ubeh}(h]h ]h"]h$]h&]uh1jhj|[hMhj%[ubeh}(h]h ]h"]h$]h&]uh1jhj [ubjX)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj [ubjX)}(hThis helper allows keeping track of PHY devices on the link. It adds the SFP module's phy to the phy namespace of the upstream phyh]hThis helper allows keeping track of PHY devices on the link. It adds the SFP module’s phy to the phy namespace of the upstream phy}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj [ubjX)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj [ubjX)}(h.0 on success, otherwise a negative error code.h]h.0 on success, otherwise a negative error code.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj [ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phy_sfp_disconnect_phy (C function)c.phy_sfp_disconnect_phyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hDvoid phy_sfp_disconnect_phy (void *upstream, struct phy_device *phy)h]h)}(hCvoid phy_sfp_disconnect_phy(void *upstream, struct phy_device *phy)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj \hhhj\hMubj)}(hphy_sfp_disconnect_phyh]j%)}(hphy_sfp_disconnect_phyh]hphy_sfp_disconnect_phy}(hj/\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj \hhhj\hMubj)}(h((void *upstream, struct phy_device *phy)h](j)}(hvoid *upstreamh](j)}(hvoidh]hvoid}(hjK\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG\ubj)}(h h]h }(hjY\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjG\ubj;)}(hj>h]h*}(hjg\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjG\ubj%)}(hupstreamh]hupstream}(hjt\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjG\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjC\ubj)}(hstruct phy_device *phyh](h)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j')}jj1\sbc.phy_sfp_disconnect_phyasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hphyh]hphy}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjC\ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj \hhhj\hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj\hhhj\hMubah}(h]j\ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\hMhj\hhubjS)}(hhh]jX)}(h5Disconnect the SFP module's PHY from the upstream PHYh]h7Disconnect the SFP module’s PHY from the upstream PHY}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj ]hhubah}(h]h ]h"]h$]h&]uh1jRhj\hhhj\hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj(]jxj(]jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``void *upstream`` pointer to the upstream phy device ``struct phy_device *phy`` pointer to the SFP module's phy device **Description** This helper allows keeping track of PHY devices on the link. It removes the SFP module's phy to the phy namespace of the upstream phy. As the module phy will be destroyed, re-inserting the same module will add a new phy with a new index.h](jX)}(h**Parameters**h]j)}(hj2]h]h Parameters}(hj4]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0]ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj,]ubj)}(hhh](j)}(h6``void *upstream`` pointer to the upstream phy device h](j)}(h``void *upstream``h]j)}(hjQ]h]hvoid *upstream}(hjS]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO]ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjK]ubj)}(hhh]jX)}(h"pointer to the upstream phy deviceh]h"pointer to the upstream phy device}(hjj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjf]hMhjg]ubah}(h]h ]h"]h$]h&]uh1jhjK]ubeh}(h]h ]h"]h$]h&]uh1jhjf]hMhjH]ubj)}(hB``struct phy_device *phy`` pointer to the SFP module's phy device h](j)}(h``struct phy_device *phy``h]j)}(hj]h]hstruct phy_device *phy}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj]ubj)}(hhh]jX)}(h&pointer to the SFP module's phy deviceh]h(pointer to the SFP module’s phy device}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjH]ubeh}(h]h ]h"]h$]h&]uh1jhj,]ubjX)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj,]ubjX)}(hThis helper allows keeping track of PHY devices on the link. It removes the SFP module's phy to the phy namespace of the upstream phy. As the module phy will be destroyed, re-inserting the same module will add a new phy with a new index.h]hThis helper allows keeping track of PHY devices on the link. It removes the SFP module’s phy to the phy namespace of the upstream phy. As the module phy will be destroyed, re-inserting the same module will add a new phy with a new index.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj,]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_sfp_attach (C function)c.phy_sfp_attachhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h9void phy_sfp_attach (void *upstream, struct sfp_bus *bus)h]h)}(h8void phy_sfp_attach(void *upstream, struct sfp_bus *bus)h](j)}(hvoidh]hvoid}(hj ^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhj^hMubj)}(hphy_sfp_attachh]j%)}(hphy_sfp_attachh]hphy_sfp_attach}(hj+^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'^ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhj^hMubj)}(h%(void *upstream, struct sfp_bus *bus)h](j)}(hvoid *upstreamh](j)}(hvoidh]hvoid}(hjG^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC^ubj)}(h h]h }(hjU^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjC^ubj;)}(hj>h]h*}(hjc^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjC^ubj%)}(hupstreamh]hupstream}(hjp^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjC^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?^ubj)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j')}jj-^sbc.phy_sfp_attachasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj^ubj%)}(hbush]hbus}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj?^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhj^hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj^hhhj^hMubah}(h]j]ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj^hMhj]hhubjS)}(hhh]jX)}(h5attach the SFP bus to the PHY upstream network deviceh]h5attach the SFP bus to the PHY upstream network device}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj _hhubah}(h]h ]h"]h$]h&]uh1jRhj]hhhj^hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj$_jxj$_jyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``void *upstream`` pointer to the phy device ``struct sfp_bus *bus`` sfp bus representing cage being attached **Description** This is used to fill in the sfp_upstream_ops .attach member.h](jX)}(h**Parameters**h]j)}(hj._h]h Parameters}(hj0_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,_ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj(_ubj)}(hhh](j)}(h-``void *upstream`` pointer to the phy device h](j)}(h``void *upstream``h]j)}(hjM_h]hvoid *upstream}(hjO_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK_ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjG_ubj)}(hhh]jX)}(hpointer to the phy deviceh]hpointer to the phy device}(hjf_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjb_hMhjc_ubah}(h]h ]h"]h$]h&]uh1jhjG_ubeh}(h]h ]h"]h$]h&]uh1jhjb_hMhjD_ubj)}(hA``struct sfp_bus *bus`` sfp bus representing cage being attached h](j)}(h``struct sfp_bus *bus``h]j)}(hj_h]hstruct sfp_bus *bus}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj_ubj)}(hhh]jX)}(h(sfp bus representing cage being attachedh]h(sfp bus representing cage being attached}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjD_ubeh}(h]h ]h"]h$]h&]uh1jhj(_ubjX)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj(_ubjX)}(hh]h*}(hj_`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj?`ubj%)}(hupstreamh]hupstream}(hjl`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;`ubj)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj`modnameN classnameNjj!)}j$]j')}jj)`sbc.phy_sfp_detachasbuh1hhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj;)}(hj>h]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`ubj%)}(hbush]hbus}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj;`ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj`hhhj`hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj_hhhj`hMubah}(h]j_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj`hMhj_hhubjS)}(hhh]jX)}(h7detach the SFP bus from the PHY upstream network deviceh]h7detach the SFP bus from the PHY upstream network device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjahhubah}(h]h ]h"]h$]h&]uh1jRhj_hhhj`hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj ajxj ajyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``void *upstream`` pointer to the phy device ``struct sfp_bus *bus`` sfp bus representing cage being attached **Description** This is used to fill in the sfp_upstream_ops .detach member.h](jX)}(h**Parameters**h]j)}(hj*ah]h Parameters}(hj,ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(aubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj$aubj)}(hhh](j)}(h-``void *upstream`` pointer to the phy device h](j)}(h``void *upstream``h]j)}(hjIah]hvoid *upstream}(hjKahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGaubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjCaubj)}(hhh]jX)}(hpointer to the phy deviceh]hpointer to the phy device}(hjbahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^ahMhj_aubah}(h]h ]h"]h$]h&]uh1jhjCaubeh}(h]h ]h"]h$]h&]uh1jhj^ahMhj@aubj)}(hA``struct sfp_bus *bus`` sfp bus representing cage being attached h](j)}(h``struct sfp_bus *bus``h]j)}(hjah]hstruct sfp_bus *bus}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj|aubj)}(hhh]jX)}(h(sfp bus representing cage being attachedh]h(sfp bus representing cage being attached}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj|aubeh}(h]h ]h"]h$]h&]uh1jhjahMhj@aubeh}(h]h ]h"]h$]h&]uh1jhj$aubjX)}(h**Description**h]j)}(hjah]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhj$aubjX)}(hh]h*}(hjbhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj;bubj%)}(hphydevh]hphydev}(hjbhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;bubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7bubah}(h]h ]h"]h$]h&]j<j=uh1jhjahhhjbhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjahhhjbhMubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjbhMhjahhubjS)}(hhh]jX)}(h0probe for a SFP cage attached to this PHY deviceh]h0probe for a SFP cage attached to this PHY device}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjbhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1hhhhjnhNhNubj})}(hE**Parameters** ``struct phy_device *phydev`` Pointer to phy_deviceh](jX)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjbubj)}(hhh]j)}(h3``struct phy_device *phydev`` Pointer to phy_deviceh](j)}(h``struct phy_device *phydev``h]j)}(hjch]hstruct phy_device *phydev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjbubj)}(hhh]jX)}(hPointer to phy_deviceh]hPointer to phy_device}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjcubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjchMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!genphy_config_advert (C function)c.genphy_config_adverthNtauh1hhjnhhhNhNubh)}(hhh](h)}(hQint genphy_config_advert (struct phy_device *phydev, const unsigned long *advert)h]h)}(hPint genphy_config_advert(struct phy_device *phydev, const unsigned long *advert)h](j)}(hinth]hint}(hj]chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYchhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM0ubj)}(h h]h }(hjlchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYchhhjkchM0ubj)}(hgenphy_config_adverth]j%)}(hgenphy_config_adverth]hgenphy_config_advert}(hj~chhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYchhhjkchM0ubj)}(h8(struct phy_device *phydev, const unsigned long *advert)h](j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjcmodnameN classnameNjj!)}j$]j')}jjcsbc.genphy_config_advertasbuh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hphydevh]hphydev}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(hconst unsigned long *adverth](h)}(hjh]hconst}(hj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj)}(hunsignedh]hunsigned}(hj'dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hj5dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj)}(hlongh]hlong}(hjCdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjQdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hj_dhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hadverth]hadvert}(hjldhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubeh}(h]h ]h"]h$]h&]j<j=uh1jhjYchhhjkchM0ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUchhhjkchM0ubah}(h]jPcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkchM0hjRchhubjS)}(hhh]jX)}(h2sanitize and advertise auto-negotiation parametersh]h2sanitize and advertise auto-negotiation parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM0hjdhhubah}(h]h ]h"]h$]h&]uh1jRhjRchhhjkchM0ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct phy_device *phydev`` target phy_device struct ``const unsigned long *advert`` auto-negotiation parameters to advertise **Description** Writes MII_ADVERTISE with the appropriate values, after sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed.h](jX)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM4hjdubj)}(hhh](j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjdh]hstruct phy_device *phydev}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM1hjdubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjdhM1hjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjdhM1hjdubj)}(hI``const unsigned long *advert`` auto-negotiation parameters to advertise h](j)}(h``const unsigned long *advert``h]j)}(hjeh]hconst unsigned long *advert}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM2hj eubj)}(hhh]jX)}(h(auto-negotiation parameters to advertiseh]h(auto-negotiation parameters to advertise}(hj)ehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj%ehM2hj&eubah}(h]h ]h"]h$]h&]uh1jhj eubeh}(h]h ]h"]h$]h&]uh1jhj%ehM2hjdubeh}(h]h ]h"]h$]h&]uh1jhjdubjX)}(h**Description**h]j)}(hjKeh]h Description}(hjMehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIeubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM4hjdubj)}(hhh]j)}(hWrites MII_ADVERTISE with the appropriate values, after sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed.h](j)}(h1Writes MII_ADVERTISE with the appropriate values,h]h1Writes MII_ADVERTISE with the appropriate values,}(hjhehhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM6hjdeubj)}(hhh]jX)}(hafter sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed.h]hafter sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY’s advertisement hasn’t changed, and > 0 if it has changed.}(hjzehhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chM5hjweubah}(h]h ]h"]h$]h&]uh1jhjdeubeh}(h]h ]h"]h$]h&]uh1jhjvehM6hjaeubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%genphy_c37_config_advert (C function)c.genphy_c37_config_adverthNtauh1hhjnhhhNhNubh)}(hhh](h)}(h8int genphy_c37_config_advert (struct phy_device *phydev)h]h)}(h7int genphy_c37_config_advert(struct phy_device *phydev)h](j)}(hinth]hint}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMdubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjehhhjehMdubj)}(hgenphy_c37_config_adverth]j%)}(hgenphy_c37_config_adverth]hgenphy_c37_config_advert}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjehhhjehMdubj)}(h(struct phy_device *phydev)h]j)}(hstruct phy_device *phydevh](h)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjeubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jjesbc.genphy_c37_config_advertasbuh1hhjeubj)}(h h]h }(hj6fhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjeubj;)}(hj>h]h*}(hjDfhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjeubj%)}(hphydevh]hphydev}(hjQfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjeubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjeubah}(h]h ]h"]h$]h&]j<j=uh1jhjehhhjehMdubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjehhhjehMdubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjehMdhjehhubjS)}(hhh]jX)}(h2sanitize and advertise auto-negotiation parametersh]h2sanitize and advertise auto-negotiation parameters}(hj{fhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMdhjxfhhubah}(h]h ]h"]h$]h&]uh1jRhjehhhjehMdubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjfjxjfjyjzj{uh1hhhhjnhNhNubj})}(hXz**Parameters** ``struct phy_device *phydev`` target phy_device struct **Description** Writes MII_ADVERTISE with the appropriate values, after sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed. This function is intended for Clause 37 1000Base-X mode.h](jX)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhhjfubj)}(hhh]j)}(h7``struct phy_device *phydev`` target phy_device struct h](j)}(h``struct phy_device *phydev``h]j)}(hjfh]hstruct phy_device *phydev}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMehjfubj)}(hhh]jX)}(htarget phy_device structh]htarget phy_device struct}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfhMehjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjfhMehjfubah}(h]h ]h"]h$]h&]uh1jhjfubjX)}(h**Description**h]j)}(hjfh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMghjfubj)}(hhh]j)}(hXWrites MII_ADVERTISE with the appropriate values, after sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed. This function is intended for Clause 37 1000Base-X mode.h](j)}(h1Writes MII_ADVERTISE with the appropriate values,h]h1Writes MII_ADVERTISE with the appropriate values,}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMjhjgubj)}(hhh]jX)}(hafter sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY's advertisement hasn't changed, and > 0 if it has changed. This function is intended for Clause 37 1000Base-X mode.h]hafter sanitizing the values to make sure we only advertise what is supported. Returns < 0 on error, 0 if the PHY’s advertisement hasn’t changed, and > 0 if it has changed. This function is intended for Clause 37 1000Base-X mode.}(hj&ghhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhhj#gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhj"ghMjhj gubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphy_probe (C function) c.phy_probehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h"int phy_probe (struct device *dev)h]h)}(h!int phy_probe(struct device *dev)h](j)}(hinth]hint}(hjgghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcghhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMIubj)}(h h]h }(hjvghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcghhhjughMIubj)}(h phy_probeh]j%)}(h phy_probeh]h phy_probe}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjcghhhjughMIubj)}(h(struct device *dev)h]j)}(hstruct device *devh](h)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubh)}(hhh]j%)}(hdeviceh]hdevice}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]j')}jjgsb c.phy_probeasbuh1hhjgubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjgubj%)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjgubah}(h]h ]h"]h$]h&]j<j=uh1jhjcghhhjughMIubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj_ghhhjughMIubah}(h]jZgah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjughMIhj\ghhubjS)}(hhh]jX)}(hprobe and init a PHY deviceh]hprobe and init a PHY device}(hj'hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMIhj$hhhubah}(h]h ]h"]h$]h&]uh1jRhj\ghhhjughMIubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj?hjxj?hjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct device *dev`` device to probe and init **Description** Take care of setting up the phy_device structure, set the state to READY.h](jX)}(h**Parameters**h]j)}(hjIhh]h Parameters}(hjKhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGhubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMMhjChubj)}(hhh]j)}(h0``struct device *dev`` device to probe and init h](j)}(h``struct device *dev``h]j)}(hjhhh]hstruct device *dev}(hjjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfhubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMJhjbhubj)}(hhh]jX)}(hdevice to probe and inith]hdevice to probe and init}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hhMJhj~hubah}(h]h ]h"]h$]h&]uh1jhjbhubeh}(h]h ]h"]h$]h&]uh1jhj}hhMJhj_hubah}(h]h ]h"]h$]h&]uh1jhjChubjX)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMLhjChubjX)}(hITake care of setting up the phy_device structure, set the state to READY.h]hITake care of setting up the phy_device structure, set the state to READY.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMKhjChubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phy_driver_register (C function)c.phy_driver_registerhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMint phy_driver_register (struct phy_driver *new_driver, struct module *owner)h]h)}(hLint phy_driver_register(struct phy_driver *new_driver, struct module *owner)h](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhjhhMubj)}(hphy_driver_registerh]j%)}(hphy_driver_registerh]hphy_driver_register}(hj ihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhjhhMubj)}(h5(struct phy_driver *new_driver, struct module *owner)h](j)}(hstruct phy_driver *new_driverh](h)}(hjh]hstruct}(hj%ihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!iubj)}(h h]h }(hj2ihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!iubh)}(hhh]j%)}(h phy_driverh]h phy_driver}(hjCihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@iubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjEimodnameN classnameNjj!)}j$]j')}jj isbc.phy_driver_registerasbuh1hhj!iubj)}(h h]h }(hjcihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!iubj;)}(hj>h]h*}(hjqihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!iubj%)}(h new_driverh]h new_driver}(hj~ihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!iubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubj)}(hstruct module *ownerh](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(hmoduleh]hmodule}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]j_ic.phy_driver_registerasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hownerh]howner}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjhhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhhjhhMubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhhMhjhhhubjS)}(hhh]jX)}(h(register a phy_driver with the PHY layerh]h(register a phy_driver with the PHY layer}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh]/var/lib/git/docbuild/linux/Documentation/networking/kapi:131: ./drivers/net/phy/phy_device.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhhjhhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jjxj0jjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct phy_driver *new_driver`` new phy_driver to register ``struct module *owner`` module owning this PHYh](jX)}(h**Parameters**h]j)}(hj:jh]h Parameters}(hjh]h*}(hj:khhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjjhhhjjhMSubj)}(h mdio_find_bush]j%)}(hj)kh]h mdio_find_bus}(hjKkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGkubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhjjhMSubj)}(h(const char *mdio_name)h]j)}(hconst char *mdio_nameh](h)}(hjh]hconst}(hjfkhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjbkubj)}(h h]h }(hjskhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbkubj)}(hcharh]hchar}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbkubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbkubj;)}(hj>h]h*}(hjkhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjbkubj%)}(h mdio_nameh]h mdio_name}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbkubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj^kubah}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhjjhMSubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjjhhhjjhMSubah}(h]jjah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjjhMShjjhhubjS)}(hhh]jX)}(h.Given the name of a mdiobus, find the mii_bus.h]h.Given the name of a mdiobus, find the mii_bus.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMShjkhhubah}(h]h ]h"]h$]h&]uh1jRhjjhhhjjhMSubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjkjxjkjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``const char *mdio_name`` The name of a mdiobus. **Return** a reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put_deviced'ed once the bus is finished with.h](jX)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMWhjkubj)}(hhh]j)}(h1``const char *mdio_name`` The name of a mdiobus. h](j)}(h``const char *mdio_name``h]j)}(hjlh]hconst char *mdio_name}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMThjlubj)}(hhh]jX)}(hThe name of a mdiobus.h]hThe name of a mdiobus.}(hj.lhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*lhMThj+lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj*lhMThj lubah}(h]h ]h"]h$]h&]uh1jhjkubjX)}(h **Return**h]j)}(hjPlh]hReturn}(hjRlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNlubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMVhjkubjX)}(ha reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put_deviced'ed once the bus is finished with.h]ha reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put_deviced’ed once the bus is finished with.}(hjflhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMVhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hof_mdio_find_bus (C function)c.of_mdio_find_bushNtauh1hhjnhhhNhNubh)}(hhh](h)}(hCstruct mii_bus * of_mdio_find_bus (struct device_node *mdio_bus_np)h]h)}(hAstruct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np)h](h)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjlhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMeubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhjlhMeubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlmodnameN classnameNjj!)}j$]j')}jof_mdio_find_bussbc.of_mdio_find_busasbuh1hhjlhhhjlhMeubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlhhhjlhMeubj;)}(hj>h]h*}(hjlhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjlhhhjlhMeubj)}(hof_mdio_find_bush]j%)}(hjlh]hof_mdio_find_bus}(hjlhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjlhhhjlhMeubj)}(h!(struct device_node *mdio_bus_np)h]j)}(hstruct device_node *mdio_bus_nph](h)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj mubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj mubh)}(hhh]j%)}(h device_nodeh]h device_node}(hj-mhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*mubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/mmodnameN classnameNjj!)}j$]jlc.of_mdio_find_busasbuh1hhj mubj)}(h h]h }(hjKmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj mubj;)}(hj>h]h*}(hjYmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj mubj%)}(h mdio_bus_nph]h mdio_bus_np}(hjfmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj mubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjmubah}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhjlhMeubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjlhMeubah}(h]jlah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjlhMehjlhhubjS)}(hhh]jX)}(h(Given an mii_bus node, find the mii_bus.h]h(Given an mii_bus node, find the mii_bus.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMehjmhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjlhMeubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct device_node *mdio_bus_np`` Pointer to the mii_bus. **Return** a reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put once the bus is finished with. **Description** Because the association of a device_node and mii_bus is made via of_mdiobus_register(), the mii_bus cannot be found before it is registered with of_mdiobus_register().h](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMihjmubj)}(hhh]j)}(h<``struct device_node *mdio_bus_np`` Pointer to the mii_bus. h](j)}(h#``struct device_node *mdio_bus_np``h]j)}(hjmh]hstruct device_node *mdio_bus_np}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMfhjmubj)}(hhh]jX)}(hPointer to the mii_bus.h]hPointer to the mii_bus.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmhMfhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhMfhjmubah}(h]h ]h"]h$]h&]uh1jhjmubjX)}(h **Return**h]j)}(hj nh]hReturn}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj nubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhhjmubjX)}(ha reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put once the bus is finished with.h]ha reference to the mii_bus, or NULL if none found. The embedded struct device will have its reference count incremented, and this must be put once the bus is finished with.}(hj"nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhhjmubjX)}(h**Description**h]j)}(hj3nh]h Description}(hj5nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1nubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMlhjmubjX)}(hBecause the association of a device_node and mii_bus is made via of_mdiobus_register(), the mii_bus cannot be found before it is registered with of_mdiobus_register().h]hBecause the association of a device_node and mii_bus is made via of_mdiobus_register(), the mii_bus cannot be found before it is registered with of_mdiobus_register().}(hjInhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMkhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__mdiobus_read (C function)c.__mdiobus_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h>int __mdiobus_read (struct mii_bus *bus, int addr, u32 regnum)h]h)}(h=int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum)h](j)}(hinth]hint}(hjxnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtnhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtnhhhjnhMubj)}(h__mdiobus_readh]j%)}(h__mdiobus_readh]h__mdiobus_read}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjtnhhhjnhMubj)}(h+(struct mii_bus *bus, int addr, u32 regnum)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjnmodnameN classnameNjj!)}j$]j')}jjnsbc.__mdiobus_readasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hjohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hbush]hbus}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(hint addrh](j)}(hinth]hint}(hj'ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#oubj)}(h h]h }(hj5ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#oubj%)}(haddrh]haddr}(hjCohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#oubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj_ohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\oubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjaomodnameN classnameNjj!)}j$]jnc.__mdiobus_readasbuh1hhjXoubj)}(h h]h }(hj}ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXoubj%)}(hregnumh]hregnum}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubeh}(h]h ]h"]h$]h&]j<j=uh1jhjtnhhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjpnhhhjnhMubah}(h]jknah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjmnhhubjS)}(hhh]jX)}(h-Unlocked version of the mdiobus_read functionh]h-Unlocked version of the mdiobus_read function}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjohhubah}(h]h ]h"]h$]h&]uh1jRhjmnhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjnhNhNubj})}(hXZ**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **Description** Read a MDIO bus register. Caller must hold the mdio bus lock. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjoh]hstruct mii_bus *bus}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj phMhj pubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj phMhjoubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj/ph]hint addr}(hj1phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-pubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj)pubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjHphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDphMhjEpubah}(h]h ]h"]h$]h&]uh1jhj)pubeh}(h]h ]h"]h$]h&]uh1jhjDphMhjoubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjhph]h u32 regnum}(hjjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfpubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjbpubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}phMhj~pubah}(h]h ]h"]h$]h&]uh1jhjbpubeh}(h]h ]h"]h$]h&]uh1jhj}phMhjoubeh}(h]h ]h"]h$]h&]uh1jhjoubjX)}(h **Return**h]j)}(hjph]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubjX)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubjX)}(h=Read a MDIO bus register. Caller must hold the mdio bus lock.h]h=Read a MDIO bus register. Caller must hold the mdio bus lock.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubjX)}(h**NOTE**h]j)}(hjph]hNOTE}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubjX)}(h*MUST NOT be called from interrupt context.h]h*MUST NOT be called from interrupt context.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__mdiobus_write (C function)c.__mdiobus_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hHint __mdiobus_write (struct mii_bus *bus, int addr, u32 regnum, u16 val)h]h)}(hGint __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hinth]hint}(hj6qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2qhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjEqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2qhhhjDqhMubj)}(h__mdiobus_writeh]j%)}(h__mdiobus_writeh]h__mdiobus_write}(hjWqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSqubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2qhhhjDqhMubj)}(h4(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjsqhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoqubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjqmodnameN classnameNjj!)}j$]j')}jjYqsbc.__mdiobus_writeasbuh1hhjoqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoqubj;)}(hj>h]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoqubj%)}(hbush]hbus}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoqubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkqubj)}(hint addrh](j)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqubj%)}(haddrh]haddr}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkqubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjrmodnameN classnameNjj!)}j$]jqc.__mdiobus_writeasbuh1hhjrubj)}(h h]h }(hj;rhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj%)}(hregnumh]hregnum}(hjIrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkqubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjerhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbrubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgrmodnameN classnameNjj!)}j$]jqc.__mdiobus_writeasbuh1hhj^rubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^rubj%)}(hvalh]hval}(hjrhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^rubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkqubeh}(h]h ]h"]h$]h&]j<j=uh1jhj2qhhhjDqhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.qhhhjDqhMubah}(h]j)qah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjDqhMhj+qhhubjS)}(hhh]jX)}(h.Unlocked version of the mdiobus_write functionh]h.Unlocked version of the mdiobus_write function}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrhhubah}(h]h ]h"]h$]h&]uh1jRhj+qhhhjDqhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjrjxjrjyjzj{uh1hhhhjnhNhNubj})}(hXz**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **Description** Write a MDIO bus register. Caller must hold the mdio bus lock. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjrh]hstruct mii_bus *bus}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj5sh]hint addr}(hj7shhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3subah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj/subj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjNshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJshMhjKsubah}(h]h ]h"]h$]h&]uh1jhj/subeh}(h]h ]h"]h$]h&]uh1jhjJshMhjrubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjnsh]h u32 regnum}(hjpshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlsubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhsubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjhsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjsh]hu16 val}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjsubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjshhhNhNubj)}(h **regnum**h]hregnum}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jWhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjrubeh}(h]h ]h"]h$]h&]uh1jhjrubjX)}(h **Return**h]j)}(hjsh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubjX)}(h**Description**h]j)}(hjth]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubjX)}(h>Write a MDIO bus register. Caller must hold the mdio bus lock.h]h>Write a MDIO bus register. Caller must hold the mdio bus lock.}(hj-thhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjrubjX)}(h**NOTE**h]j)}(hj>th]hNOTE}(hj@thhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjtmodnameN classnameNjj!)}j$]j')}jjtsbc.__mdiobus_modify_changedasbuh1hhjtubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjtubj;)}(hj>h]h*}(hj uhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjtubj%)}(hbush]hbus}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hint addrh](j)}(hinth]hint}(hj2uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.uubj)}(h h]h }(hj@uhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.uubj%)}(haddrh]haddr}(hjNuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.uubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjguubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjlumodnameN classnameNjj!)}j$]jtc.__mdiobus_modify_changedasbuh1hhjcuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcuubj%)}(hregnumh]hregnum}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]jtc.__mdiobus_modify_changedasbuh1hhjuubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj%)}(hmaskh]hmask}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]jtc.__mdiobus_modify_changedasbuh1hhjuubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj%)}(hseth]hset}(hj&vhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubeh}(h]h ]h"]h$]h&]j<j=uh1jhjthhhjthMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{thhhjthMubah}(h]jvtah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthMhjxthhubjS)}(hhh]jX)}(h/Unlocked version of the mdiobus_modify functionh]h/Unlocked version of the mdiobus_modify function}(hjPvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjMvhhubah}(h]h ]h"]h$]h&]uh1jRhjxthhhjthMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhvjxjhvjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 1 if the register was modified, 0 if no change was needed, negative on any error condition **Description** Read, modify, and if any change, write the register value back to the device. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjrvh]h Parameters}(hjtvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpvubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjvh]hstruct mii_bus *bus}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjvubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjvh]hint addr}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjvubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvhMhjvubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjvhMhjvubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjwh]h u32 regnum}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjvubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjvubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:wubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj6wubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjUwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQwhMhjRwubah}(h]h ]h"]h$]h&]uh1jhj6wubeh}(h]h ]h"]h$]h&]uh1jhjQwhMhjvubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjuwh]hu16 set}(hjwwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjswubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjowubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhMhjwubah}(h]h ]h"]h$]h&]uh1jhjowubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjvubeh}(h]h ]h"]h$]h&]uh1jhjlvubjX)}(h **Return**h]j)}(hjwh]hReturn}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubjX)}(hZ1 if the register was modified, 0 if no change was needed, negative on any error conditionh]hZ1 if the register was modified, 0 if no change was needed, negative on any error condition}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubjX)}(h**Description**h]j)}(hjwh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubjX)}(hMRead, modify, and if any change, write the register value back to the device.h]hMRead, modify, and if any change, write the register value back to the device.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubjX)}(h**NOTE**h]j)}(hjwh]hNOTE}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubjX)}(h*MUST NOT be called from interrupt context.h]h*MUST NOT be called from interrupt context.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjlvubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__mdiobus_c45_read (C function)c.__mdiobus_c45_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMint __mdiobus_c45_read (struct mii_bus *bus, int addr, int devad, u32 regnum)h]h)}(hLint __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hinth]hint}(hjCxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?xhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjRxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?xhhhjQxhMubj)}(h__mdiobus_c45_readh]j%)}(h__mdiobus_c45_readh]h__mdiobus_c45_read}(hjdxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`xubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj?xhhhjQxhMubj)}(h6(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|xubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|xubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]j')}jjfxsbc.__mdiobus_c45_readasbuh1hhj|xubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|xubj;)}(hj>h]h*}(hjxhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|xubj%)}(hbush]hbus}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|xubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxxubj)}(hint addrh](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj%)}(haddrh]haddr}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxxubj)}(h int devadh](j)}(hinth]hint}(hj'yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#yubj)}(h h]h }(hj5yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#yubj%)}(hdevadh]hdevad}(hjCyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj#yubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxxubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj_yhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\yubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjaymodnameN classnameNjj!)}j$]jxc.__mdiobus_c45_readasbuh1hhjXyubj)}(h h]h }(hj}yhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXyubj%)}(hregnumh]hregnum}(hjyhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjxxubeh}(h]h ]h"]h$]h&]j<j=uh1jhj?xhhhjQxhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;xhhhjQxhMubah}(h]j6xah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjQxhMhj8xhhubjS)}(hhh]jX)}(h1Unlocked version of the mdiobus_c45_read functionh]h1Unlocked version of the mdiobus_c45_read function}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyhhubah}(h]h ]h"]h$]h&]uh1jRhj8xhhhjQxhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjyjxjyjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **Description** Read a MDIO bus register. Caller must hold the mdio bus lock. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjyh]hstruct mii_bus *bus}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj zhMhj zubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhj zhMhjyubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj/zh]hint addr}(hj1zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-zubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj)zubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjHzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDzhMhjEzubah}(h]h ]h"]h$]h&]uh1jhj)zubeh}(h]h ]h"]h$]h&]uh1jhjDzhMhjyubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjhzh]h int devad}(hjjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjbzubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}zhMhj~zubah}(h]h ]h"]h$]h&]uh1jhjbzubeh}(h]h ]h"]h$]h&]uh1jhj}zhMhjyubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjzh]h u32 regnum}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjzubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjzhMhjyubeh}(h]h ]h"]h$]h&]uh1jhjyubjX)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubjX)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubjX)}(h=Read a MDIO bus register. Caller must hold the mdio bus lock.h]h=Read a MDIO bus register. Caller must hold the mdio bus lock.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubjX)}(h**NOTE**h]j)}(hj*{h]hNOTE}(hj,{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj({ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubjX)}(h*MUST NOT be called from interrupt context.h]h*MUST NOT be called from interrupt context.}(hj@{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h __mdiobus_c45_write (C function)c.__mdiobus_c45_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hWint __mdiobus_c45_write (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h]h)}(hVint __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjo{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk{hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hj~{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjk{hhhj}{hMubj)}(h__mdiobus_c45_writeh]j%)}(h__mdiobus_c45_writeh]h__mdiobus_c45_write}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjk{hhhj}{hMubj)}(h?(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj{modnameN classnameNjj!)}j$]j')}jj{sbc.__mdiobus_c45_writeasbuh1hhj{ubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj;)}(hj>h]h*}(hj{hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{ubj%)}(hbush]hbus}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubj)}(hint addrh](j)}(hinth]hint}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hj,|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj%)}(haddrh]haddr}(hj:|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubj)}(h int devadh](j)}(hinth]hint}(hjS|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO|ubj)}(h h]h }(hja|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjO|ubj%)}(hdevadh]hdevad}(hjo|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]j{c.__mdiobus_c45_writeasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj%)}(hregnumh]hregnum}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj|modnameN classnameNjj!)}j$]j{c.__mdiobus_c45_writeasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj%)}(hvalh]hval}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjk{hhhj}{hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjg{hhhj}{hMubah}(h]jb{ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}{hMhjd{hhubjS)}(hhh]jX)}(h.Unlocked version of the mdiobus_write functionh]h.Unlocked version of the mdiobus_write function}(hj)}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj&}hhubah}(h]h ]h"]h$]h&]uh1jRhjd{hhhj}{hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjA}jxjA}jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **Description** Write a MDIO bus register. Caller must hold the mdio bus lock. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjK}h]h Parameters}(hjM}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI}ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjE}ubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjj}h]hstruct mii_bus *bus}(hjl}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjd}ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjd}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhja}ubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj}h]hint addr}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj}ubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhja}ubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hj}h]h int devad}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj}ubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhja}ubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj~h]h u32 regnum}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj~ubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hj.~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*~hMhj+~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj*~hMhja}ubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjN~h]hu16 val}(hjP~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL~ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM hjH~ubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjg~hhhNhNubj)}(h **regnum**h]hregnum}(hjo~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg~ubeh}(h]h ]h"]h$]h&]uh1jWhjc~hM hjd~ubah}(h]h ]h"]h$]h&]uh1jhjH~ubeh}(h]h ]h"]h$]h&]uh1jhjc~hM hja}ubeh}(h]h ]h"]h$]h&]uh1jhjE}ubjX)}(h **Return**h]j)}(hj~h]hReturn}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM"hjE}ubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM"hjE}ubjX)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM$hjE}ubjX)}(h>Write a MDIO bus register. Caller must hold the mdio bus lock.h]h>Write a MDIO bus register. Caller must hold the mdio bus lock.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM#hjE}ubjX)}(h**NOTE**h]j)}(hj~h]hNOTE}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM%hjE}ubjX)}(h*MUST NOT be called from interrupt context.h]h*MUST NOT be called from interrupt context.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM&hjE}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h mdiobus_read_nested (C function)c.mdiobus_read_nestedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hCint mdiobus_read_nested (struct mii_bus *bus, int addr, u32 regnum)h]h)}(hBint mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMcubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhj8hMcubj)}(hmdiobus_read_nestedh]j%)}(hmdiobus_read_nestedh]hmdiobus_read_nested}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj&hhhj8hMcubj)}(h+(struct mii_bus *bus, int addr, u32 regnum)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjMsbc.mdiobus_read_nestedasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_read_nestedasbuh1hhj ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hregnumh]hregnum}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj_ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj&hhhj8hMcubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj"hhhj8hMcubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj8hMchjhhubjS)}(hhh]jX)}(h+Nested version of the mdiobus_read functionh]h+Nested version of the mdiobus_read function}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMchjdhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj8hMcubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **Description** In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested(). **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMghjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMdhjubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߀ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMehjۀubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjۀubeh}(h]h ]h"]h$]h&]uh1jhjhMehjubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMfhjubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMfhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMfhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjUh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhhjubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhhjubjX)}(h**Description**h]j)}(hj|h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMjhjubjX)}(h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().h]h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMihjubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMlhjubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_read (C function)c.mdiobus_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hh]h*}(hjqhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(hbush]hbus}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjςhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hĵubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjтmodnameN classnameNjj!)}j$]j_c.mdiobus_readasbuh1hhjȂubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjȂubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjȂubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM~ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM~ubah}(h]jہah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM~hj݁hhubjS)}(hhh]jX)}(h:Convenience function for reading a given MII mgmt registerh]h:Convenience function for reading a given MII mgmt register}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM~hj"hhubah}(h]h ]h"]h$]h&]uh1jRhj݁hhhjhM~ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj=jxj=jyjzj{uh1hhhhjnhNhNubj})}(hXd**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjAubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjfh]hstruct mii_bus *bus}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj`ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj]ubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hj؃h]h u32 regnum}(hjڃhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjփubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj҃ubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj҃ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj]ubeh}(h]h ]h"]h$]h&]uh1jhjAubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjAubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjAubjX)}(h**NOTE**h]j)}(hj:h]hNOTE}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjAubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_c45_read (C function)c.mdiobus_c45_readhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hKint mdiobus_c45_read (struct mii_bus *bus, int addr, int devad, u32 regnum)h]h)}(hJint mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{hhhjhMubj)}(hmdiobus_c45_readh]j%)}(hmdiobus_c45_readh]hmdiobus_c45_read}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj{hhhjhMubj)}(h6(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjɄhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjڄhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjׄubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj܄modnameN classnameNjj!)}j$]j')}jjsbc.mdiobus_c45_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj%)}(haddrh]haddr}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_c45_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjDžhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjwhhhjhMubah}(h]jrah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjthhubjS)}(hhh]jX)}(h:Convenience function for reading a given MII mgmt registerh]h:Convenience function for reading a given MII mgmt register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjthhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj ubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hj2h]hstruct mii_bus *bus}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj,ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj)ubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjkh]hint addr}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjeubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hj݆h]h u32 regnum}(hj߆hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۆubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj׆ubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj׆ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj ubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj ubjX)}(h**NOTE**h]j)}(hj?h]hNOTE}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj ubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$mdiobus_c45_read_nested (C function)c.mdiobus_c45_read_nestedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hRint mdiobus_c45_read_nested (struct mii_bus *bus, int addr, int devad, u32 regnum)h]h)}(hQint mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hmdiobus_c45_read_nestedh]j%)}(hmdiobus_c45_read_nestedh]hmdiobus_c45_read_nested}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h6(struct mii_bus *bus, int addr, int devad, u32 regnum)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj·hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj߇hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj܇ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.mdiobus_c45_read_nestedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/ubj%)}(haddrh]haddr}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_c45_read_nestedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj̈hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj|hhhjhMubah}(h]jwah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjyhhubjS)}(hhh]jX)}(h/Nested version of the mdiobus_c45_read functionh]h/Nested version of the mdiobus_c45_read function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjyhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to read **Return** The register value if successful, negative error code on failure **Description** In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested(). **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hj7h]hstruct mii_bus *bus}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj1ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhj.ubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjph]hint addr}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hj‰hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubj)}(h'``u32 regnum`` register number to read h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj܉ubj)}(hhh]jX)}(hregister number to readh]hregister number to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj܉ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h@The register value if successful, negative error code on failureh]h@The register value if successful, negative error code on failure}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h**Description**h]j)}(hjDh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().h]h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h**NOTE**h]j)}(hjkh]hNOTE}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!mdiobus_write_nested (C function)c.mdiobus_write_nestedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hMint mdiobus_write_nested (struct mii_bus *bus, int addr, u32 regnum, u16 val)h]h)}(hLint mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hmdiobus_write_nestedh]j%)}(hmdiobus_write_nestedh]hmdiobus_write_nested}(hjъhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj͊ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h4(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjӊsbc.mdiobus_write_nestedasbuh1hhjubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj9hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[ubj%)}(haddrh]haddr}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j'c.mdiobus_write_nestedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjËhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjߋhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj܋ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j'c.mdiobus_write_nestedasbuh1hhj؋ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj؋ubj%)}(hvalh]hval}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj؋ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h,Nested version of the mdiobus_write functionh]h,Nested version of the mdiobus_write function}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMjxjMjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **Description** In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested(). **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjvh]hstruct mii_bus *bus}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjpubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjȌhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjČhMhjŌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjČhMhjmubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hj!h]hu16 val}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hj:hhhNhNubj)}(h **regnum**h]hregnum}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jWhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjmubeh}(h]h ]h"]h$]h&]uh1jhjQubjX)}(h **Return**h]j)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubjX)}(h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().h]h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hj΍hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_write (C function)c.mdiobus_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hFint mdiobus_write (struct mii_bus *bus, int addr, u32 regnum, u16 val)h]h)}(hEint mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hMubj)}(h mdiobus_writeh]j%)}(h mdiobus_writeh]h mdiobus_write}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hMubj)}(h4(struct mii_bus *bus, int addr, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]j')}jj sbc.mdiobus_writeasbuh1hhj6ubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj6ubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjȎhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jtc.mdiobus_writeasbuh1hhjݎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjݎubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjݎubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]jtc.mdiobus_writeasbuh1hhj%ubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj%)}(hvalh]hval}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhjhhubjS)}(hhh]jX)}(h:Convenience function for writing a given MII mgmt registerh]h:Convenience function for writing a given MII mgmt register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjÏh]hstruct mii_bus *bus}(hjŏhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hj܏hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj؏hMhjُubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj؏hMhjubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj5h]h u32 regnum}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj/ubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjnh]hu16 val}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hj͐hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h**NOTE**h]j)}(hjސh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܐubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_c45_write (C function)c.mdiobus_c45_writehNtauh1hhjnhhhNhNubh)}(hhh](h)}(hUint mdiobus_c45_write (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h]h)}(hTint mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj1hMubj)}(hmdiobus_c45_writeh]j%)}(hmdiobus_c45_writeh]hmdiobus_c45_write}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj1hMubj)}(h?(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjFsbc.mdiobus_c45_writeasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(hint addrh](j)}(hinth]hint}(hjґhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΑubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjΑubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjΑubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hj#hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]jc.mdiobus_c45_writeasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj%)}(hregnumh]hregnum}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_c45_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMhjhhubjS)}(hhh]jX)}(h:Convenience function for writing a given MII mgmt registerh]h:Convenience function for writing a given MII mgmt register}(hjݒhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjڒhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj3hMhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjWh]hint addr}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjQubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjɓh]h u32 regnum}(hj˓hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǓubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjÓubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjޓhMhjߓubah}(h]h ]h"]h$]h&]uh1jhjÓubeh}(h]h ]h"]h$]h&]uh1jhjޓhMhjubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(h**NOTE**h]j)}(hjrh]hNOTE}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM hjubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%mdiobus_c45_write_nested (C function)c.mdiobus_c45_write_nestedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h\int mdiobus_c45_write_nested (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h]h)}(h[int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjƔhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjŔhMubj)}(hmdiobus_c45_write_nestedh]j%)}(hmdiobus_c45_write_nestedh]hmdiobus_c45_write_nested}(hjؔhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjԔubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjŔhMubj)}(h?(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 val)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjڔsbc.mdiobus_c45_write_nestedasbuh1hhjubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjMhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjbubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjbubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjӕhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjЕubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjՕmodnameN classnameNjj!)}j$]j.c.mdiobus_c45_write_nestedasbuh1hhj̕ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj̕ubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj̕ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 valh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j.c.mdiobus_c45_write_nestedasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hvalh]hval}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjŔhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjŔhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjŔhMhjhhubjS)}(hhh]jX)}(h0Nested version of the mdiobus_c45_write functionh]h0Nested version of the mdiobus_c45_write function}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjŔhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to write ``u16 val`` value to write to **regnum** **Return** Zero if successful, negative error code on failure **Description** In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested(). **NOTE** MUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM hjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hj˖hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjǖhMhjȖubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǖhMhjubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hj$h]h int devad}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj]h]h u32 regnum}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM hjWubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhM hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM hjubj)}(h)``u16 val`` value to write to **regnum** h](j)}(h ``u16 val``h]j)}(hjh]hu16 val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM!hjubj)}(hhh]jX)}(hvalue to write to **regnum**h](hvalue to write to }(hjhhhNhNubj)}(h **regnum**h]hregnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jWhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjߗh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݗubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM#hjubjX)}(h2Zero if successful, negative error code on failureh]h2Zero if successful, negative error code on failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM#hjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM%hjubjX)}(h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().h]h]In case of nested MDIO bus access avoid lockdep false positives by using mutex_lock_nested().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM$hjubjX)}(h**NOTE**h]j)}(hj-h]hNOTE}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM'hjubjX)}(hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.h]hMUST NOT be called from interrupt context, because the bus read/write functions may wait for an interrupt to conclude the operation.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_modify (C function)c.mdiobus_modifyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hQint mdiobus_modify (struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h]h)}(hPint mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjhMPubj)}(hmdiobus_modifyh]j%)}(hmdiobus_modifyh]hmdiobus_modify}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjhMPubj)}(h>(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj͘hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjʘubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjϘmodnameN classnameNjj!)}j$]j')}jjsbc.mdiobus_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjYhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj[modnameN classnameNjj!)}j$]jc.mdiobus_modifyasbuh1hhjRubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj%)}(hregnumh]hregnum}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hj͙hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjhMPubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjjhhhjhMPubah}(h]jeah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMPhjghhubjS)}(hhh]jX)}(h?Convenience function for modifying a given mdio device registerh]h?Convenience function for modifying a given mdio device register}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMPhj<hhubah}(h]h ]h"]h$]h&]uh1jRhjghhhjhMPubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1hhhhjnhNhNubj})}(hX**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to write ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 0 on success, negative on any error conditionh](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMThj[ubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjh]hstruct mii_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMRhjzubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMRhjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhMRhjwubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMShjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjҚhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjΚhMShjϚubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjΚhMShjwubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMThjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMThjwubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj+h]hu16 mask}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMUhj%ubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@hMUhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMUhjwubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjdh]hu16 set}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMVhj^ubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjyhMVhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMVhjwubeh}(h]h ]h"]h$]h&]uh1jhj[ubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMXhj[ubjX)}(h-0 on success, negative on any error conditionh]h-0 on success, negative on any error condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMXhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_c45_modify (C function)c.mdiobus_c45_modifyhNtauh1hhjnhhhNhNubh)}(hhh](h)}(h`int mdiobus_c45_modify (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h]h)}(h_int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMgubj)}(hmdiobus_c45_modifyh]j%)}(hmdiobus_c45_modifyh]hmdiobus_c45_modify}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMgubj)}(hI(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjAmodnameN classnameNjj!)}j$]j')}jjsbc.mdiobus_c45_modifyasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int devadh](j)}(hinth]hint}(hjȜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjĜubj)}(h h]h }(hj֜hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjĜubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjĜubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j[c.mdiobus_c45_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJmodnameN classnameNjj!)}j$]j[c.mdiobus_c45_modifyasbuh1hhjAubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj%)}(hmaskh]hmask}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j[c.mdiobus_c45_modifyasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMgubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjܛhhhjhMgubah}(h]jכah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMghjٛhhubjS)}(hhh]jX)}(h?Convenience function for modifying a given mdio device registerh]h?Convenience function for modifying a given mdio device register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMghjhhubah}(h]h ]h"]h$]h&]uh1jRhjٛhhhjhMgubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX;**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to write ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 0 on success, negative on any error conditionh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMkhjub5j)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hj'h]hstruct mii_bus *bus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMihj!ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<hMihj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMihjubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj`h]hint addr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMjhjZubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjuhMjhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMjhjubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMkhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjҞh]h u32 regnum}(hjԞhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjОubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMlhj̞ubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhj̞ubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj h]hu16 mask}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMmhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMmhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMmhjubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjDh]hu16 set}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMnhj>ubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMnhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMnhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMphjubjX)}(h-0 on success, negative on any error conditionh]h-0 on success, negative on any error condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#mdiobus_modify_changed (C function)c.mdiobus_modify_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hYint mdiobus_modify_changed (struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h]h)}(hXint mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjğhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjӟhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjҟhMubj)}(hmdiobus_modify_changedh]j%)}(hmdiobus_modify_changedh]hmdiobus_modify_changed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjҟhMubj)}(h>(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j')}jjsbc.mdiobus_modify_changedasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hint addrh](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j;c.mdiobus_modify_changedasbuh1hhjubj)}(h h]h }(hjɠhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjנhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j;c.mdiobus_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hj;hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j;c.mdiobus_modify_changedasbuh1hhj4ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj%)}(hseth]hset}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjҟhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjҟhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjҟhMhjhhubjS)}(hhh]jX)}(h[Convenience function for modifying a given mdio device register and returning if it changedh]h[Convenience function for modifying a given mdio device register and returning if it changed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjҟhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX@**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``u32 regnum`` register number to write ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 1 if the register was modified, 0 if no change was needed, negative on any error conditionh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjҡh]hstruct mii_bus *bus}(hjԡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjСubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj̡ubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj̡ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɡubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hj h]hint addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjɡubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hjDh]h u32 regnum}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj>ubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjɡubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj}h]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjwubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMhjɡubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hjϢhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjˢhMhj̢ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjˢhMhjɡubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubjX)}(hZ1 if the register was modified, 0 if no change was needed, negative on any error conditionh]hZ1 if the register was modified, 0 if no change was needed, negative on any error condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'mdiobus_c45_modify_changed (C function)c.mdiobus_c45_modify_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hhint mdiobus_c45_modify_changed (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h]h)}(hgint mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2hhhjDhMubj)}(hmdiobus_c45_modify_changedh]j%)}(hmdiobus_c45_modify_changedh]hmdiobus_c45_modify_changed}(hjWhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjSubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj2hhhjDhMubj)}(hI(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjYsbc.mdiobus_c45_modify_changedasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hbush]hbus}(hj̣hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hint addrh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(haddrh]haddr}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(h int devadh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hdevadh]hdevad}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]jc.mdiobus_c45_modify_changedasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj%)}(hregnumh]hregnum}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_c45_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hjƤhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjߤubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mdiobus_c45_modify_changedasbuh1hhjۤubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjۤubj%)}(hseth]hset}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjۤubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjkubeh}(h]h ]h"]h$]h&]j<j=uh1jhj2hhhjDhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.hhhjDhMubah}(h]j)ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjDhMhj+hhubjS)}(hhh]jX)}(h[Convenience function for modifying a given mdio device register and returning if it changedh]h[Convenience function for modifying a given mdio device register and returning if it changed}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhj5hhubah}(h]h ]h"]h$]h&]uh1jRhj+hhhjDhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjPjxjPjyjzj{uh1hhhhjnhNhNubj})}(hXh**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to write ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 1 if the register was modified, 0 if no change was needed, negative on any error conditionh](jX)}(h**Parameters**h]j)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjTubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hjyh]hstruct mii_bus *bus}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjsubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hj˥hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjǥhMhjȥubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǥhMhjpubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjh]h int devad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubj)}(h(``u32 regnum`` register number to write h](j)}(h``u32 regnum``h]j)}(hj$h]h u32 regnum}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hregister number to writeh]hregister number to write}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjpubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hj]h]hu16 mask}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjWubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjpubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjpubeh}(h]h ]h"]h$]h&]uh1jhjTubjX)}(h **Return**h]j)}(hjѦh]hReturn}(hjӦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjϦubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjTubjX)}(hZ1 if the register was modified, 0 if no change was needed, negative on any error conditionh]hZ1 if the register was modified, 0 if no change was needed, negative on any error condition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:134: ./drivers/net/phy/mdio_bus.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdiobus_release (C function)c.mdiobus_releasehNtauh1hhjnhhhNhNubh)}(hhh](h)}(h'void mdiobus_release (struct device *d)h]h)}(h&void mdiobus_release(struct device *d)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKhubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj$hKhubj)}(hmdiobus_releaseh]j%)}(hmdiobus_releaseh]hmdiobus_release}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj$hKhubj)}(h(struct device *d)h]j)}(hstruct device *dh](h)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(hdeviceh]hdevice}(hjqhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjsmodnameN classnameNjj!)}j$]j')}jj9sbc.mdiobus_releaseasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hjyh]hd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj$hKhubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj$hKhubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj$hKhhj hhubjS)}(hhh]jX)}(hmii_bus device release callbackh]hmii_bus device release callback}(hjէhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKhhjҧhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj$hKhubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(h**Parameters** ``struct device *d`` the target struct device that contains the mii_bus **Description** called when the last reference to an mii_bus is dropped, to free the underlying memory.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKlhjubj)}(hhh]j)}(hH``struct device *d`` the target struct device that contains the mii_bus h](j)}(h``struct device *d``h]j)}(hjh]hstruct device *d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKihjubj)}(hhh]jX)}(h2the target struct device that contains the mii_bush]h2the target struct device that contains the mii_bus}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+hKihj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hKihj ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKkhjubjX)}(hWcalled when the last reference to an mii_bus is dropped, to free the underlying memory.h]hWcalled when the last reference to an mii_bus is dropped, to free the underlying memory.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chKkhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)__mdiobus_c45_modify_changed (C function)c.__mdiobus_c45_modify_changedhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hjint __mdiobus_c45_modify_changed (struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h]h)}(hiint __mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chM?ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM?ubj)}(h__mdiobus_c45_modify_changedh]j%)}(h__mdiobus_c45_modify_changedh]h__mdiobus_c45_modify_changed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM?ubj)}(hI(struct mii_bus *bus, int addr, int devad, u32 regnum, u16 mask, u16 set)h](j)}(hstruct mii_bus *bush](h)}(hjh]hstruct}(hjӨhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjϨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjϨubh)}(hhh]j%)}(hmii_bush]hmii_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.__mdiobus_c45_modify_changedasbuh1hhjϨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjϨubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjϨubj%)}(hbush]hbus}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjϨubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubj)}(hint addrh](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubj%)}(haddrh]haddr}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjAubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubj)}(h int devadh](j)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj%)}(hdevadh]hdevad}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubj)}(h u32 regnumh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.__mdiobus_c45_modify_changedasbuh1hhjubj)}(h h]h }(hjЩhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hregnumh]hregnum}(hjީhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubj)}(hu16 maskh](h)}(hhh]j%)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.__mdiobus_c45_modify_changedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmaskh]hmask}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubj)}(hu16 seth](h)}(hhh]j%)}(hu16h]hu16}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]j c.__mdiobus_c45_modify_changedasbuh1hhj;ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;ubj%)}(hseth]hset}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj;ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj˨ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM?ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM?ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM?hjhhubjS)}(hhh]jX)}(h/Unlocked version of the mdiobus_modify functionh]h/Unlocked version of the mdiobus_modify function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chM?hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM?ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjnhNhNubj})}(hX$**Parameters** ``struct mii_bus *bus`` the mii_bus struct ``int addr`` the phy address ``int devad`` device address to read ``u32 regnum`` register number to modify ``u16 mask`` bit mask of bits to clear ``u16 set`` bit mask of bits to set **Return** 1 if the register was modified, 0 if no change was needed, negative on any error condition **Description** Read, modify, and if any change, write the register value back to the device. Any error returns a negative number. **NOTE** MUST NOT be called from interrupt context.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMChjubj)}(hhh](j)}(h+``struct mii_bus *bus`` the mii_bus struct h](j)}(h``struct mii_bus *bus``h]j)}(hj٪h]hstruct mii_bus *bus}(hj۪hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjתubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chM@hjӪubj)}(hhh]jX)}(hthe mii_bus structh]hthe mii_bus struct}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjӪubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjЪubj)}(h``int addr`` the phy address h](j)}(h ``int addr``h]j)}(hjh]hint addr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMAhj ubj)}(hhh]jX)}(hthe phy addressh]hthe phy address}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'hMAhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMAhjЪubj)}(h%``int devad`` device address to read h](j)}(h ``int devad``h]j)}(hjKh]h int devad}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMBhjEubj)}(hhh]jX)}(hdevice address to readh]hdevice address to read}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`hMBhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMBhjЪubj)}(h)``u32 regnum`` register number to modify h](j)}(h``u32 regnum``h]j)}(hjh]h u32 regnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMChj~ubj)}(hhh]jX)}(hregister number to modifyh]hregister number to modify}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMChjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMChjЪubj)}(h'``u16 mask`` bit mask of bits to clear h](j)}(h ``u16 mask``h]j)}(hjh]hu16 mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMDhjubj)}(hhh]jX)}(hbit mask of bits to clearh]hbit mask of bits to clear}(hj֫hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjҫhMDhjӫubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҫhMDhjЪubj)}(h$``u16 set`` bit mask of bits to set h](j)}(h ``u16 set``h]j)}(hjh]hu16 set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMEhjubj)}(hhh]jX)}(hbit mask of bits to seth]hbit mask of bits to set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMEhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMEhjЪubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h **Return**h]j)}(hj1h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMGhjubjX)}(hZ1 if the register was modified, 0 if no change was needed, negative on any error conditionh]hZ1 if the register was modified, 0 if no change was needed, negative on any error condition}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMGhjubjX)}(h**Description**h]j)}(hjXh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMJhjubjX)}(hrRead, modify, and if any change, write the register value back to the device. Any error returns a negative number.h]hrRead, modify, and if any change, write the register value back to the device. Any error returns a negative number.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMIhjubjX)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMLhjubjX)}(h*MUST NOT be called from interrupt context.h]h*MUST NOT be called from interrupt context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmdio_bus_match (C function)c.mdio_bus_matchhNtauh1hhjnhhhNhNubh)}(hhh](h)}(hHint mdio_bus_match (struct device *dev, const struct device_driver *drv)h]h)}(hGint mdio_bus_match(struct device *dev, const struct device_driver *drv)h](j)}(hinth]hint}(hjĬhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMubj)}(h h]h }(hjӬhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjҬhMubj)}(hmdio_bus_matchh]j%)}(hmdio_bus_matchh]hmdio_bus_match}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjҬhMubj)}(h5(struct device *dev, const struct device_driver *drv)h](j)}(hstruct device *devh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j')}jjsbc.mdio_bus_matchasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hdevh]hdev}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hconst struct device_driver *drvh](h)}(hjh]hconst}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubh)}(hhh]j%)}(h device_driverh]h device_driver}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j;c.mdio_bus_matchasbuh1hhjoubj)}(h h]h }(hjʭhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj;)}(hj>h]h*}(hjحhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hdrvh]hdrv}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjҬhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjҬhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjҬhMhjhhubjS)}(hhh]jX)}(h=determine if given MDIO driver supports the given MDIO deviceh]h=determine if given MDIO driver supports the given MDIO device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjҬhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj'jxj'jyjzj{uh1hhhhjnhNhNubj})}(hXF**Parameters** ``struct device *dev`` target MDIO device ``const struct device_driver *drv`` given MDIO driver **Return** 1 if the driver supports the device, 0 otherwise **Description** This may require calling the devices own match function, since different classes of MDIO devices have different match criteria.h](jX)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhj+ubj)}(hhh](j)}(h*``struct device *dev`` target MDIO device h](j)}(h``struct device *dev``h]j)}(hjPh]hstruct device *dev}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhjJubj)}(hhh]jX)}(htarget MDIO deviceh]htarget MDIO device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubj)}(h6``const struct device_driver *drv`` given MDIO driver h](j)}(h#``const struct device_driver *drv``h]j)}(hjh]hconst struct device_driver *drv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hgiven MDIO driverh]hgiven MDIO driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjGubeh}(h]h ]h"]h$]h&]uh1jhj+ubjX)}(h **Return**h]j)}(hjĮh]hReturn}(hjƮhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj®ubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhj+ubjX)}(h01 if the driver supports the device, 0 otherwiseh]h01 if the driver supports the device, 0 otherwise}(hjڮhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhj+ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhj+ubj)}(hhh]j)}(hThis may require calling the devices own match function, since different classes of MDIO devices have different match criteria.h](j)}(h8This may require calling the devices own match function,h]h8This may require calling the devices own match function,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhjubj)}(hhh]jX)}(hFsince different classes of MDIO devices have different match criteria.h]hFsince different classes of MDIO devices have different match criteria.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWh[/var/lib/git/docbuild/linux/Documentation/networking/kapi:137: ./drivers/net/phy/mdio_bus.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjnhhhNhNubeh}(h] phy-supportah ]h"] phy supportah$]h&]uh1hhjhhhhhKoubh)}(hhh](h)}(hPHYLINKh]hPHYLINK}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhhhhhKubj )}(hPHYLINK interfaces traditional network drivers with PHYLIB, fixed-links, and SFF modules (eg, hot-pluggable SFP) that may contain PHYs. PHYLINK provides management of the link state and link modes. h]jX)}(hPHYLINK interfaces traditional network drivers with PHYLIB, fixed-links, and SFF modules (eg, hot-pluggable SFP) that may contain PHYs. PHYLINK provides management of the link state and link modes.h]hPHYLINK interfaces traditional network drivers with PHYLIB, fixed-links, and SFF modules (eg, hot-pluggable SFP) that may contain PHYs. PHYLINK provides management of the link state and link modes.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhhhKhj[ubah}(h]h ]h"]h$]h&]uh1j hhhKhjJhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_link_state (C struct)c.phylink_link_statehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hphylink_link_stateh]h)}(hstruct phylink_link_stateh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphylink_link_stateh]j%)}(hjh]hphylink_link_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hlink state structureh]hlink state structure}(hjίhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKihj˯hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Definition**:: struct phylink_link_state { unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; phy_interface_t interface; int speed; int duplex; int pause; int rate_matching; unsigned int link:1; unsigned int an_complete:1; }; **Members** ``advertising`` ethtool bitmask containing advertised link modes ``lp_advertising`` ethtool bitmask containing link partner advertised link modes ``interface`` link :c:type:`typedef phy_interface_t ` mode ``speed`` link speed, one of the SPEED_* constants. ``duplex`` link duplex mode, one of DUPLEX_* constants. ``pause`` link pause state, described by MLO_PAUSE_* constants. ``rate_matching`` rate matching being performed, one of the RATE_MATCH_* constants. If rate matching is taking place, then the speed/duplex of the medium link mode (**speed** and **duplex**) and the speed/duplex of the phy interface mode (**interface**) are different. ``link`` true if the link is up. ``an_complete`` true if autonegotiation has completed.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKmhjubjU)}(hXZstruct phylink_link_state { unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; phy_interface_t interface; int speed; int duplex; int pause; int rate_matching; unsigned int link:1; unsigned int an_complete:1; };h]hXZstruct phylink_link_state { unsigned long advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; unsigned long lp_advertising[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; phy_interface_t interface; int speed; int duplex; int pause; int rate_matching; unsigned int link:1; unsigned int an_complete:1; };}hj sbah}(h]h ]h"]h$]h&]j<j=uh1jThX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKohjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhK{hjubj)}(hhh](j)}(hA``advertising`` ethtool bitmask containing advertised link modes h](j)}(h``advertising``h]j)}(hj;h]h advertising}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKkhj5ubj)}(hhh]jX)}(h0ethtool bitmask containing advertised link modesh]h0ethtool bitmask containing advertised link modes}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPhKkhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKkhj2ubj)}(hQ``lp_advertising`` ethtool bitmask containing link partner advertised link modes h](j)}(h``lp_advertising``h]j)}(hjth]hlp_advertising}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKmhjnubj)}(hhh]jX)}(h=ethtool bitmask containing link partner advertised link modesh]h=ethtool bitmask containing link partner advertised link modes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKlhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhKmhj2ubj)}(hL``interface`` link :c:type:`typedef phy_interface_t ` mode h](j)}(h ``interface``h]j)}(hjh]h interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKnhjubj)}(hhh]jX)}(h=link :c:type:`typedef phy_interface_t ` modeh](hlink }(hjǰhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjѰh]htypedef phy_interface_t}(hjӰhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjϰubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjðhKnhjǰubh mode}(hjǰhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjðhKnhjİubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjðhKnhj2ubj)}(h4``speed`` link speed, one of the SPEED_* constants. h](j)}(h ``speed``h]j)}(hj h]hspeed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKohjubj)}(hhh]jX)}(h)link speed, one of the SPEED_* constants.h]h)link speed, one of the SPEED_* constants.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKohj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKohj2ubj)}(h8``duplex`` link duplex mode, one of DUPLEX_* constants. h](j)}(h ``duplex``h]j)}(hjCh]hduplex}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKphj=ubj)}(hhh]jX)}(h,link duplex mode, one of DUPLEX_* constants.h]h,link duplex mode, one of DUPLEX_* constants.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjXhKphjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKphj2ubj)}(h@``pause`` link pause state, described by MLO_PAUSE_* constants. h](j)}(h ``pause``h]j)}(hj|h]hpause}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKqhjvubj)}(hhh]jX)}(h5link pause state, described by MLO_PAUSE_* constants.h]h5link pause state, described by MLO_PAUSE_* constants.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKqhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKqhj2ubj)}(hX ``rate_matching`` rate matching being performed, one of the RATE_MATCH_* constants. If rate matching is taking place, then the speed/duplex of the medium link mode (**speed** and **duplex**) and the speed/duplex of the phy interface mode (**interface**) are different. h](j)}(h``rate_matching``h]j)}(hjh]h rate_matching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKuhjubj)}(hhh]jX)}(hrate matching being performed, one of the RATE_MATCH_* constants. If rate matching is taking place, then the speed/duplex of the medium link mode (**speed** and **duplex**) and the speed/duplex of the phy interface mode (**interface**) are different.h](hrate matching being performed, one of the RATE_MATCH_* constants. If rate matching is taking place, then the speed/duplex of the medium link mode (}(hjαhhhNhNubj)}(h **speed**h]hspeed}(hjֱhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjαubh and }(hjαhhhNhNubj)}(h **duplex**h]hduplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjαubh2) and the speed/duplex of the phy interface mode (}(hjαhhhNhNubj)}(h **interface**h]h interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjαubh) are different.}(hjαhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKrhj˱ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʱhKuhj2ubj)}(h!``link`` true if the link is up. h](j)}(h``link``h]j)}(hj%h]hlink}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKvhjubj)}(hhh]jX)}(htrue if the link is up.h]htrue if the link is up.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hKvhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKvhj2ubj)}(h6``an_complete`` true if autonegotiation has completed.h](j)}(h``an_complete``h]j)}(hj^h]h an_complete}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKvhjXubj)}(hhh]jX)}(h&true if autonegotiation has completed.h]h&true if autonegotiation has completed.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKwhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshKvhj2ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_config (C struct)c.phylink_confighNtauh1hhjJhhhNhNubh)}(hhh](h)}(hphylink_configh]h)}(hstruct phylink_configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhK}ubj)}(h h]h }(hjƲhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjŲhK}ubj)}(hphylink_configh]j%)}(hjh]hphylink_config}(hjزhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjԲubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjŲhK}ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjŲhK}ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjŲhK}hjhhubjS)}(hhh]jX)}(hPHYLINK configuration structureh]hPHYLINK configuration structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjŲhK}ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Definition**:: struct phylink_config { struct device *dev; enum phylink_op_type type; bool poll_fixed_state; bool mac_managed_pm; bool mac_requires_rxc; bool default_an_inband; bool eee_rx_clk_stop_enable; void (*get_fixed_state)(struct phylink_config *config, struct phylink_link_state *state); unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long lpi_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long mac_capabilities; unsigned long lpi_capabilities; u32 lpi_timer_default; bool eee_enabled_default; bool wol_phy_legacy; bool wol_phy_speed_ctrl; u32 wol_mac_support; }; **Members** ``dev`` a pointer to a struct device associated with the MAC ``type`` operation type of PHYLINK instance ``poll_fixed_state`` if true, starts link_poll, if MAC link is at ``MLO_AN_FIXED`` mode. ``mac_managed_pm`` if true, indicate the MAC driver is responsible for PHY PM. ``mac_requires_rxc`` if true, the MAC always requires a receive clock from PHY. The PHY driver should start the clock signal as soon as possible and avoid stopping it during suspend events. ``default_an_inband`` if true, defaults to MLO_AN_INBAND rather than MLO_AN_PHY. A fixed-link specification will override. ``eee_rx_clk_stop_enable`` if true, PHY can stop the receive clock during LPI ``get_fixed_state`` callback to execute to determine the fixed link state, if MAC link is at ``MLO_AN_FIXED`` mode. ``supported_interfaces`` bitmap describing which PHY_INTERFACE_MODE_xxx are supported by the MAC/PCS. ``lpi_interfaces`` bitmap describing which PHY interface modes can support LPI signalling. ``mac_capabilities`` MAC pause/speed/duplex capabilities. ``lpi_capabilities`` MAC speeds which can support LPI signalling ``lpi_timer_default`` Default EEE LPI timer setting. ``eee_enabled_default`` If set, EEE will be enabled by phylink at creation time ``wol_phy_legacy`` Use Wake-on-Lan with PHY even if phy_can_wakeup() is false ``wol_phy_speed_ctrl`` Use phy speed control on suspend/resume ``wol_mac_support`` Bitmask of MAC supported ``WAKE_*`` optionsh](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubjU)}(hXstruct phylink_config { struct device *dev; enum phylink_op_type type; bool poll_fixed_state; bool mac_managed_pm; bool mac_requires_rxc; bool default_an_inband; bool eee_rx_clk_stop_enable; void (*get_fixed_state)(struct phylink_config *config, struct phylink_link_state *state); unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long lpi_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long mac_capabilities; unsigned long lpi_capabilities; u32 lpi_timer_default; bool eee_enabled_default; bool wol_phy_legacy; bool wol_phy_speed_ctrl; u32 wol_mac_support; };h]hXstruct phylink_config { struct device *dev; enum phylink_op_type type; bool poll_fixed_state; bool mac_managed_pm; bool mac_requires_rxc; bool default_an_inband; bool eee_rx_clk_stop_enable; void (*get_fixed_state)(struct phylink_config *config, struct phylink_link_state *state); unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long lpi_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long mac_capabilities; unsigned long lpi_capabilities; u32 lpi_timer_default; bool eee_enabled_default; bool wol_phy_legacy; bool wol_phy_speed_ctrl; u32 wol_mac_support; };}hj7sbah}(h]h ]h"]h$]h&]j<j=uh1jThX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubjX)}(h **Members**h]j)}(hjHh]hMembers}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh](j)}(h=``dev`` a pointer to a struct device associated with the MAC h](j)}(h``dev``h]j)}(hjgh]hdev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjaubj)}(hhh]jX)}(h4a pointer to a struct device associated with the MACh]h4a pointer to a struct device associated with the MAC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKhj^ubj)}(h,``type`` operation type of PHYLINK instance h](j)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h"operation type of PHYLINK instanceh]h"operation type of PHYLINK instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(hY``poll_fixed_state`` if true, starts link_poll, if MAC link is at ``MLO_AN_FIXED`` mode. h](j)}(h``poll_fixed_state``h]j)}(hjٳh]hpoll_fixed_state}(hj۳hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׳ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjӳubj)}(hhh]jX)}(hCif true, starts link_poll, if MAC link is at ``MLO_AN_FIXED`` mode.h](h-if true, starts link_poll, if MAC link is at }(hjhhhNhNubj)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh mode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjӳubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(hO``mac_managed_pm`` if true, indicate the MAC driver is responsible for PHY PM. h](j)}(h``mac_managed_pm``h]j)}(hj%h]hmac_managed_pm}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h;if true, indicate the MAC driver is responsible for PHY PM.h]h;if true, indicate the MAC driver is responsible for PHY PM.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hKhj^ubj)}(h``mac_requires_rxc`` if true, the MAC always requires a receive clock from PHY. The PHY driver should start the clock signal as soon as possible and avoid stopping it during suspend events. h](j)}(h``mac_requires_rxc``h]j)}(hj^h]hmac_requires_rxc}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjXubj)}(hhh]jX)}(hif true, the MAC always requires a receive clock from PHY. The PHY driver should start the clock signal as soon as possible and avoid stopping it during suspend events.h]hif true, the MAC always requires a receive clock from PHY. The PHY driver should start the clock signal as soon as possible and avoid stopping it during suspend events.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshKhj^ubj)}(h{``default_an_inband`` if true, defaults to MLO_AN_INBAND rather than MLO_AN_PHY. A fixed-link specification will override. h](j)}(h``default_an_inband``h]j)}(hjh]hdefault_an_inband}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(hdif true, defaults to MLO_AN_INBAND rather than MLO_AN_PHY. A fixed-link specification will override.h]hdif true, defaults to MLO_AN_INBAND rather than MLO_AN_PHY. A fixed-link specification will override.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(hN``eee_rx_clk_stop_enable`` if true, PHY can stop the receive clock during LPI h](j)}(h``eee_rx_clk_stop_enable``h]j)}(hjҴh]heee_rx_clk_stop_enable}(hjԴhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjдubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj̴ubj)}(hhh]jX)}(h2if true, PHY can stop the receive clock during LPIh]h2if true, PHY can stop the receive clock during LPI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj̴ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(ht``get_fixed_state`` callback to execute to determine the fixed link state, if MAC link is at ``MLO_AN_FIXED`` mode. h](j)}(h``get_fixed_state``h]j)}(hj h]hget_fixed_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h_callback to execute to determine the fixed link state, if MAC link is at ``MLO_AN_FIXED`` mode.h](hIcallback to execute to determine the fixed link state, if MAC link is at }(hj$hhhNhNubj)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh mode.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhj^ubj)}(hf``supported_interfaces`` bitmap describing which PHY_INTERFACE_MODE_xxx are supported by the MAC/PCS. h](j)}(h``supported_interfaces``h]j)}(hjWh]hsupported_interfaces}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjQubj)}(hhh]jX)}(hLbitmap describing which PHY_INTERFACE_MODE_xxx are supported by the MAC/PCS.h]hLbitmap describing which PHY_INTERFACE_MODE_xxx are supported by the MAC/PCS.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhj^ubj)}(h[``lpi_interfaces`` bitmap describing which PHY interface modes can support LPI signalling. h](j)}(h``lpi_interfaces``h]j)}(hjh]hlpi_interfaces}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(hGbitmap describing which PHY interface modes can support LPI signalling.h]hGbitmap describing which PHY interface modes can support LPI signalling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(h:``mac_capabilities`` MAC pause/speed/duplex capabilities. h](j)}(h``mac_capabilities``h]j)}(hj˵h]hmac_capabilities}(hj͵hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɵubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjŵubj)}(hhh]jX)}(h$MAC pause/speed/duplex capabilities.h]h$MAC pause/speed/duplex capabilities.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjŵubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(hA``lpi_capabilities`` MAC speeds which can support LPI signalling h](j)}(h``lpi_capabilities``h]j)}(hjh]hlpi_capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h+MAC speeds which can support LPI signallingh]h+MAC speeds which can support LPI signalling}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(h5``lpi_timer_default`` Default EEE LPI timer setting. h](j)}(h``lpi_timer_default``h]j)}(hj=h]hlpi_timer_default}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj7ubj)}(hhh]jX)}(hDefault EEE LPI timer setting.h]hDefault EEE LPI timer setting.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjRhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhj^ubj)}(hP``eee_enabled_default`` If set, EEE will be enabled by phylink at creation time h](j)}(h``eee_enabled_default``h]j)}(hjvh]heee_enabled_default}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjpubj)}(hhh]jX)}(h7If set, EEE will be enabled by phylink at creation timeh]h7If set, EEE will be enabled by phylink at creation time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(hN``wol_phy_legacy`` Use Wake-on-Lan with PHY even if phy_can_wakeup() is false h](j)}(h``wol_phy_legacy``h]j)}(hjh]hwol_phy_legacy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h:Use Wake-on-Lan with PHY even if phy_can_wakeup() is falseh]h:Use Wake-on-Lan with PHY even if phy_can_wakeup() is false}(hjȶhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjĶhKhjŶubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjĶhKhj^ubj)}(h?``wol_phy_speed_ctrl`` Use phy speed control on suspend/resume h](j)}(h``wol_phy_speed_ctrl``h]j)}(hjh]hwol_phy_speed_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h'Use phy speed control on suspend/resumeh]h'Use phy speed control on suspend/resume}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj^ubj)}(h?``wol_mac_support`` Bitmask of MAC supported ``WAKE_*`` optionsh](j)}(h``wol_mac_support``h]j)}(hj!h]hwol_mac_support}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h+Bitmask of MAC supported ``WAKE_*`` optionsh](hBitmask of MAC supported }(hj:hhhNhNubj)}(h ``WAKE_*``h]hWAKE_*}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh options}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hKhj^ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_mac_ops (C struct)c.phylink_mac_opshNtauh1hhjJhhhNhNubh)}(hhh](h)}(hphylink_mac_opsh]h)}(hstruct phylink_mac_opsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphylink_mac_opsh]j%)}(hjh]hphylink_mac_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hMAC operations structure.h]hMAC operations structure.}(hjϷhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj̷hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Definition**:: struct phylink_mac_ops { unsigned long (*mac_get_caps)(struct phylink_config *config, phy_interface_t interface); struct phylink_pcs *(*mac_select_pcs)(struct phylink_config *config, phy_interface_t interface); int (*mac_prepare)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_config)(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state); int (*mac_finish)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_link_down)(struct phylink_config *config, unsigned int mode, phy_interface_t interface); void (*mac_link_up)(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause); void (*mac_disable_tx_lpi)(struct phylink_config *config); int (*mac_enable_tx_lpi)(struct phylink_config *config, u32 timer, bool tx_clk_stop); int (*mac_wol_set)(struct phylink_config *config, u32 wolopts, const u8 *sopass); }; **Members** ``mac_get_caps`` Get MAC capabilities for interface mode. ``mac_select_pcs`` Select a PCS for the interface mode. ``mac_prepare`` prepare for a major reconfiguration of the interface. ``mac_config`` configure the MAC for the selected mode and state. ``mac_finish`` finish a major reconfiguration of the interface. ``mac_link_down`` take the link down. ``mac_link_up`` allow the link to come up. ``mac_disable_tx_lpi`` disable LPI. ``mac_enable_tx_lpi`` enable and configure LPI. ``mac_wol_set`` configure Wake-on-Lan settings at the MAC.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubjU)}(hXstruct phylink_mac_ops { unsigned long (*mac_get_caps)(struct phylink_config *config, phy_interface_t interface); struct phylink_pcs *(*mac_select_pcs)(struct phylink_config *config, phy_interface_t interface); int (*mac_prepare)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_config)(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state); int (*mac_finish)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_link_down)(struct phylink_config *config, unsigned int mode, phy_interface_t interface); void (*mac_link_up)(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause); void (*mac_disable_tx_lpi)(struct phylink_config *config); int (*mac_enable_tx_lpi)(struct phylink_config *config, u32 timer, bool tx_clk_stop); int (*mac_wol_set)(struct phylink_config *config, u32 wolopts, const u8 *sopass); };h]hXstruct phylink_mac_ops { unsigned long (*mac_get_caps)(struct phylink_config *config, phy_interface_t interface); struct phylink_pcs *(*mac_select_pcs)(struct phylink_config *config, phy_interface_t interface); int (*mac_prepare)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_config)(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state); int (*mac_finish)(struct phylink_config *config, unsigned int mode, phy_interface_t iface); void (*mac_link_down)(struct phylink_config *config, unsigned int mode, phy_interface_t interface); void (*mac_link_up)(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause); void (*mac_disable_tx_lpi)(struct phylink_config *config); int (*mac_enable_tx_lpi)(struct phylink_config *config, u32 timer, bool tx_clk_stop); int (*mac_wol_set)(struct phylink_config *config, u32 wolopts, const u8 *sopass); };}hj sbah}(h]h ]h"]h$]h&]j<j=uh1jThX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh](j)}(h:``mac_get_caps`` Get MAC capabilities for interface mode. h](j)}(h``mac_get_caps``h]j)}(hj<h]h mac_get_caps}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj6ubj)}(hhh]jX)}(h(Get MAC capabilities for interface mode.h]h(Get MAC capabilities for interface mode.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhKhj3ubj)}(h8``mac_select_pcs`` Select a PCS for the interface mode. h](j)}(h``mac_select_pcs``h]j)}(hjuh]hmac_select_pcs}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjoubj)}(hhh]jX)}(h$Select a PCS for the interface mode.h]h$Select a PCS for the interface mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubj)}(hF``mac_prepare`` prepare for a major reconfiguration of the interface. h](j)}(h``mac_prepare``h]j)}(hjh]h mac_prepare}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h5prepare for a major reconfiguration of the interface.h]h5prepare for a major reconfiguration of the interface.}(hjǸhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjøhKhjĸubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjøhKhj3ubj)}(hB``mac_config`` configure the MAC for the selected mode and state. h](j)}(h``mac_config``h]j)}(hjh]h mac_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h2configure the MAC for the selected mode and state.h]h2configure the MAC for the selected mode and state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubj)}(h@``mac_finish`` finish a major reconfiguration of the interface. h](j)}(h``mac_finish``h]j)}(hj h]h mac_finish}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h0finish a major reconfiguration of the interface.h]h0finish a major reconfiguration of the interface.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5hKhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hKhj3ubj)}(h&``mac_link_down`` take the link down. h](j)}(h``mac_link_down``h]j)}(hjYh]h mac_link_down}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjSubj)}(hhh]jX)}(htake the link down.h]htake the link down.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhKhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhKhj3ubj)}(h+``mac_link_up`` allow the link to come up. h](j)}(h``mac_link_up``h]j)}(hjh]h mac_link_up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(hallow the link to come up.h]hallow the link to come up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubj)}(h$``mac_disable_tx_lpi`` disable LPI. h](j)}(h``mac_disable_tx_lpi``h]j)}(hj˹h]hmac_disable_tx_lpi}(hj͹hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɹubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjŹubj)}(hhh]jX)}(h disable LPI.h]h disable LPI.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjŹubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubj)}(h0``mac_enable_tx_lpi`` enable and configure LPI. h](j)}(h``mac_enable_tx_lpi``h]j)}(hjh]hmac_enable_tx_lpi}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(henable and configure LPI.h]henable and configure LPI.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj3ubj)}(h:``mac_wol_set`` configure Wake-on-Lan settings at the MAC.h](j)}(h``mac_wol_set``h]j)}(hj=h]h mac_wol_set}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj7ubj)}(hhh]jX)}(h*configure Wake-on-Lan settings at the MAC.h]h*configure Wake-on-Lan settings at the MAC.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjJhhubjX)}(h6The individual methods are described more fully below.h]h6The individual methods are described more fully below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjJhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_get_caps (C function)c.mac_get_capshNtauh1hhjJhhhNhNubh)}(hhh](h)}(hUunsigned long mac_get_caps (struct phylink_config *config, phy_interface_t interface)h]h)}(hTunsigned long mac_get_caps(struct phylink_config *config, phy_interface_t interface)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKubj)}(h h]h }(hjͺhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj̺hKubj)}(hlongh]hlong}(hjۺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̺hKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj̺hKubj)}(h mac_get_capsh]j%)}(h mac_get_capsh]h mac_get_caps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj̺hKubj)}(h:(struct phylink_config *config, phy_interface_t interface)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj7modnameN classnameNjj!)}j$]j')}jjsbc.mac_get_capsasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjchhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jQc.mac_get_capsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj̺hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj̺hKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj̺hKhjhhubjS)}(hhh]jX)}(h(Get MAC capabilities for interface mode.h]h(Get MAC capabilities for interface mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj߻hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj̺hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``phy_interface_t interface`` PHY interface mode. **Description** Optional method. When not provided, config->mac_capabilities will be used. When implemented, this returns the MAC capabilities for the specified interface mode where there is some special handling required by the MAC driver (e.g. not supporting half-duplex in certain interface modes.)h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hj#h]hstruct phylink_config *config}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hj<hhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjFh]hstruct phylink_config}(hjHhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhj8hKhj<ubh.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj8hKhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubj)}(h2``phy_interface_t interface`` PHY interface mode. h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjyubj)}(hhh]jX)}(hPHY interface mode.h]hPHY interface mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubjX)}(hXOptional method. When not provided, config->mac_capabilities will be used. When implemented, this returns the MAC capabilities for the specified interface mode where there is some special handling required by the MAC driver (e.g. not supporting half-duplex in certain interface modes.)h]hXOptional method. When not provided, config->mac_capabilities will be used. When implemented, this returns the MAC capabilities for the specified interface mode where there is some special handling required by the MAC driver (e.g. not supporting half-duplex in certain interface modes.)}(hjмhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_select_pcs (C function)c.mac_select_pcshNtauh1hhjJhhhNhNubh)}(hhh](h)}(h^struct phylink_pcs * mac_select_pcs (struct phylink_config *config, phy_interface_t interface)h]h)}(h\struct phylink_pcs *mac_select_pcs(struct phylink_config *config, phy_interface_t interface)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hKubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jmac_select_pcssbc.mac_select_pcsasbuh1hhjhhhj hKubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj hKubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjhhhj hKubj)}(hmac_select_pcsh]j%)}(hj<h]hmac_select_pcs}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj hKubj)}(h:(struct phylink_config *config, phy_interface_t interface)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j:c.mac_select_pcsasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjuubj;)}(hj>h]h*}(hjýhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjuubj%)}(hconfigh]hconfig}(hjнhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjuubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjqubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j:c.mac_select_pcsasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjqubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj hKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hKhjhhubjS)}(hhh]jX)}(h$Select a PCS for the interface mode.h]h$Select a PCS for the interface mode.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj?hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj hKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjZjxjZjyjzj{uh1hhhhjJhNhNubj})}(hXE**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``phy_interface_t interface`` PHY interface mode for PCS **Description** Return the :c:type:`struct phylink_pcs ` for the specified interface mode, or NULL if none is required, or an error pointer on error. This must not modify any state. It is used to query which PCS should be used. Phylink will use this during validation to ensure that the configuration is valid, and when setting a configuration to internally set the PCS that will be used.h](jX)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj^ubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj}ubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjzubj)}(h9``phy_interface_t interface`` PHY interface mode for PCS h](j)}(h``phy_interface_t interface``h]j)}(hj߾h]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݾubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhjپubj)}(hhh]jX)}(hPHY interface mode for PCSh]hPHY interface mode for PCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjپubeh}(h]h ]h"]h$]h&]uh1jhjhKhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj^ubjX)}(hReturn the :c:type:`struct phylink_pcs ` for the specified interface mode, or NULL if none is required, or an error pointer on error.h](h Return the }(hj0hhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hj:h]hstruct phylink_pcs}(hj<hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj0ubh] for the specified interface mode, or NULL if none is required, or an error pointer on error.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjWhKhj^ubjX)}(hThis must not modify any state. It is used to query which PCS should be used. Phylink will use this during validation to ensure that the configuration is valid, and when setting a configuration to internally set the PCS that will be used.h]hThis must not modify any state. It is used to query which PCS should be used. Phylink will use this during validation to ensure that the configuration is valid, and when setting a configuration to internally set the PCS that will be used.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhKhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_prepare (C function) c.mac_preparehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hYint mac_prepare (struct phylink_config *config, unsigned int mode, phy_interface_t iface)h]h)}(hXint mac_prepare(struct phylink_config *config, unsigned int mode, phy_interface_t iface)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h mac_prepareh]j%)}(h mac_prepareh]h mac_prepare}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hI(struct phylink_config *config, unsigned int mode, phy_interface_t iface)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjοhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjʿubj)}(h h]h }(hjۿhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjʿubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.mac_prepareasbuh1hhjʿubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjʿubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjʿubj%)}(hconfigh]hconfig}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjʿubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƿubj)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj%)}(hmodeh]hmode}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƿubj)}(hphy_interface_t ifaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.mac_prepareasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hifaceh]hiface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjƿubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h(prepare to change the PHY interface modeh]h(prepare to change the PHY interface mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. ``phy_interface_t iface`` interface mode to switch to **Description** phylink will call this method at the beginning of a full initialisation of the link, which includes changing the interface mode or at initial startup time. It may be called for the current mode. The MAC driver should perform whatever actions are required, e.g. disabling the Serdes PHY. This will be the first call in the sequence: - mac_prepare() - mac_config() - pcs_config() - possible pcs_an_restart() - mac_finish() Returns zero on success, or negative errno on failure which will be reported to the kernel log.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hj+h]hstruct phylink_config *config}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj%ubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjDhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjNh]hstruct phylink_config}(hjPhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhj@hMhjDubh.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj@hMhj"ubj)}(hR``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. h](j)}(h``unsigned int mode``h]j)}(hjh]hunsigned int mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h;one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``.h](hone of }(hjhhhNhNubj)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``MLO_AN_PHY``h]h MLO_AN_PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj"ubj)}(h6``phy_interface_t iface`` interface mode to switch to h](j)}(h``phy_interface_t iface``h]j)}(hjh]hphy_interface_t iface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hinterface mode to switch toh]hinterface mode to switch to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhj"ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj1h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hXphylink will call this method at the beginning of a full initialisation of the link, which includes changing the interface mode or at initial startup time. It may be called for the current mode. The MAC driver should perform whatever actions are required, e.g. disabling the Serdes PHY.h]hXphylink will call this method at the beginning of a full initialisation of the link, which includes changing the interface mode or at initial startup time. It may be called for the current mode. The MAC driver should perform whatever actions are required, e.g. disabling the Serdes PHY.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hThis will be the first call in the sequence: - mac_prepare() - mac_config() - pcs_config() - possible pcs_an_restart() - mac_finish()h]hThis will be the first call in the sequence: - mac_prepare() - mac_config() - pcs_config() - possible pcs_an_restart() - mac_finish()}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM hjubjX)}(h_Returns zero on success, or negative errno on failure which will be reported to the kernel log.h]h_Returns zero on success, or negative errno on failure which will be reported to the kernel log.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_config (C function) c.mac_confighNtauh1hhjJhhhNhNubh)}(hhh](h)}(hjvoid mac_config (struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state)h]h)}(hivoid mac_config(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h mac_configh]j%)}(h mac_configh]h mac_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hZ(struct phylink_config *config, unsigned int mode, const struct phylink_link_state *state)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.mac_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj?ubj%)}(hmodeh]hmode}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h&const struct phylink_link_state *stateh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j  c.mac_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h1configure the MAC for the selected mode and stateh]h1configure the MAC for the selected mode and state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj-hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1hhhhjJhNhNubj})}(hX] **Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. ``const struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. **Description** Note - not all members of **state** are valid. In particular, **state->lp_advertising**, **state->link**, **state->an_complete** are never guaranteed to be correct, and so any mac_config() implementation must never reference these fields. This will only be called to reconfigure the MAC for a "major" change in e.g. interface mode. It will not be called for changes in speed, duplex or pause modes or to change the in-band advertisement. In all negotiation modes, as defined by **mode**, **state->pause** indicates the pause settings which should be applied as follows. If ``MLO_PAUSE_AN`` is not set, ``MLO_PAUSE_TX`` and ``MLO_PAUSE_RX`` indicate whether the MAC should send pause frames and/or act on received pause frames respectively. Otherwise, the results of in-band negotiation/status from the MAC PCS should be used to control the MAC pause mode settings. The action performed depends on the currently selected mode: ``MLO_AN_FIXED``, ``MLO_AN_PHY``: Configure for non-inband negotiation mode, where the link settings are completely communicated via mac_link_up(). The physical link protocol from the MAC is specified by **state->interface**. **state->advertising** may be used, but is not required. Older drivers (prior to the mac_link_up() change) may use **state->speed**, **state->duplex** and **state->pause** to configure the MAC, but this is deprecated; such drivers should be converted to use mac_link_up(). Other members of **state** must be ignored. Valid state members: interface, advertising. Deprecated state members: speed, duplex, pause. ``MLO_AN_INBAND``: place the link in an inband negotiation mode (such as 802.3z 1000base-X or Cisco SGMII mode depending on the **state->interface** mode). In both cases, link state management (whether the link is up or not) is performed by the MAC, and reported via the pcs_get_state() callback. Changes in link state must be made by calling phylink_mac_change(). Interface mode specific details are mentioned below. If in 802.3z mode, the link speed is fixed, dependent on the **state->interface**. Duplex and pause modes are negotiated via the in-band configuration word. Advertised pause modes are set according to **state->advertising**. Beware of MACs which only support full duplex at gigabit and higher speeds. If in Cisco SGMII mode, the link speed and duplex mode are passed in the serial bitstream 16-bit configuration word, and the MAC should be configured to read these bits and acknowledge the configuration word. Nothing is advertised by the MAC. The MAC is responsible for reading the configuration word and configuring itself accordingly. Valid state members: interface, pause, advertising. Implementations are expected to update the MAC to reflect the requested settings - i.o.w., if nothing has changed between two calls, no action is expected. If only flow control settings have changed, flow control should be updated *without* taking the link down. This "update" behaviour is critical to avoid bouncing the link up status.h](jX)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM hjLubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjqh]hstruct phylink_config *config}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjkubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(hR``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. h](j)}(h``unsigned int mode``h]j)}(hjh]hunsigned int mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h;one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``.h](hone of }(hjhhhNhNubj)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``MLO_AN_PHY``h]h MLO_AN_PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjhubj)}(ht``const struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. h](j)}(h*``const struct phylink_link_state *state``h]j)}(hj<h]h&const struct phylink_link_state *state}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj6ubj)}(hhh]jX)}(hHa pointer to a :c:type:`struct phylink_link_state `.h](ha pointer to a }(hjUhhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hj_h]hstruct phylink_link_state}(hjahhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhjQhMhjUubh.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]u(h1jWhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjhubeh}(h]h ]h"]h$]h&]uh1jhjLubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM!hjLubjX)}(hNote - not all members of **state** are valid. In particular, **state->lp_advertising**, **state->link**, **state->an_complete** are never guaranteed to be correct, and so any mac_config() implementation must never reference these fields.h](hNote - not all members of }(hjhhhNhNubj)}(h **state**h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh are valid. In particular, }(hjhhhNhNubj)}(h**state->lp_advertising**h]hstate->lp_advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**state->link**h]h state->link}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h**state->an_complete**h]hstate->an_complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhn are never guaranteed to be correct, and so any mac_config() implementation must never reference these fields.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM hjLubjX)}(hThis will only be called to reconfigure the MAC for a "major" change in e.g. interface mode. It will not be called for changes in speed, duplex or pause modes or to change the in-band advertisement.h]hThis will only be called to reconfigure the MAC for a “major” change in e.g. interface mode. It will not be called for changes in speed, duplex or pause modes or to change the in-band advertisement.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM%hjLubjX)}(hXIn all negotiation modes, as defined by **mode**, **state->pause** indicates the pause settings which should be applied as follows. If ``MLO_PAUSE_AN`` is not set, ``MLO_PAUSE_TX`` and ``MLO_PAUSE_RX`` indicate whether the MAC should send pause frames and/or act on received pause frames respectively. Otherwise, the results of in-band negotiation/status from the MAC PCS should be used to control the MAC pause mode settings.h](h(In all negotiation modes, as defined by }(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**state->pause**h]h state->pause}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhE indicates the pause settings which should be applied as follows. If }(hjhhhNhNubj)}(h``MLO_PAUSE_AN``h]h MLO_PAUSE_AN}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is not set, }(hjhhhNhNubj)}(h``MLO_PAUSE_TX``h]h MLO_PAUSE_TX}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h``MLO_PAUSE_RX``h]h MLO_PAUSE_RX}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh indicate whether the MAC should send pause frames and/or act on received pause frames respectively. Otherwise, the results of in-band negotiation/status from the MAC PCS should be used to control the MAC pause mode settings.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM)hjLubjX)}(hinterface**. **state->advertising** may be used, but is not required. Older drivers (prior to the mac_link_up() change) may use **state->speed**, **state->duplex** and **state->pause** to configure the MAC, but this is deprecated; such drivers should be converted to use mac_link_up(). Other members of **state** must be ignored. Valid state members: interface, advertising. Deprecated state members: speed, duplex, pause. h](j)}(h!``MLO_AN_FIXED``, ``MLO_AN_PHY``:h](j)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``MLO_AN_PHY``h]h MLO_AN_PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM@hjubj)}(hhh](jX)}(hConfigure for non-inband negotiation mode, where the link settings are completely communicated via mac_link_up(). The physical link protocol from the MAC is specified by **state->interface**.h](hConfigure for non-inband negotiation mode, where the link settings are completely communicated via mac_link_up(). The physical link protocol from the MAC is specified by }(hjhhhNhNubj)}(h**state->interface**h]hstate->interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM3hjubjX)}(h8**state->advertising** may be used, but is not required.h](j)}(h**state->advertising**h]hstate->advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" may be used, but is not required.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM7hjubjX)}(hOlder drivers (prior to the mac_link_up() change) may use **state->speed**, **state->duplex** and **state->pause** to configure the MAC, but this is deprecated; such drivers should be converted to use mac_link_up().h](h:Older drivers (prior to the mac_link_up() change) may use }(hjhhhNhNubj)}(h**state->speed**h]h state->speed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h**state->duplex**h]h state->duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**state->pause**h]h state->pause}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhe to configure the MAC, but this is deprecated; such drivers should be converted to use mac_link_up().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM9hjubjX)}(h+Other members of **state** must be ignored.h](hOther members of }(hjJhhhNhNubj)}(h **state**h]hstate}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh must be ignored.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM=hjubjX)}(h\Valid state members: interface, advertising. Deprecated state members: speed, duplex, pause.h]h\Valid state members: interface, advertising. Deprecated state members: speed, duplex, pause.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM?hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@hjubj)}(hXX``MLO_AN_INBAND``: place the link in an inband negotiation mode (such as 802.3z 1000base-X or Cisco SGMII mode depending on the **state->interface** mode). In both cases, link state management (whether the link is up or not) is performed by the MAC, and reported via the pcs_get_state() callback. Changes in link state must be made by calling phylink_mac_change(). Interface mode specific details are mentioned below. If in 802.3z mode, the link speed is fixed, dependent on the **state->interface**. Duplex and pause modes are negotiated via the in-band configuration word. Advertised pause modes are set according to **state->advertising**. Beware of MACs which only support full duplex at gigabit and higher speeds. If in Cisco SGMII mode, the link speed and duplex mode are passed in the serial bitstream 16-bit configuration word, and the MAC should be configured to read these bits and acknowledge the configuration word. Nothing is advertised by the MAC. The MAC is responsible for reading the configuration word and configuring itself accordingly. Valid state members: interface, pause, advertising. h](j)}(h``MLO_AN_INBAND``:h](j)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMYhjubj)}(hhh](jX)}(hXYplace the link in an inband negotiation mode (such as 802.3z 1000base-X or Cisco SGMII mode depending on the **state->interface** mode). In both cases, link state management (whether the link is up or not) is performed by the MAC, and reported via the pcs_get_state() callback. Changes in link state must be made by calling phylink_mac_change().h](hmplace the link in an inband negotiation mode (such as 802.3z 1000base-X or Cisco SGMII mode depending on the }(hjhhhNhNubj)}(h**state->interface**h]hstate->interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh mode). In both cases, link state management (whether the link is up or not) is performed by the MAC, and reported via the pcs_get_state() callback. Changes in link state must be made by calling phylink_mac_change().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMChjubjX)}(h4Interface mode specific details are mentioned below.h]h4Interface mode specific details are mentioned below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMJhjubjX)}(hX,If in 802.3z mode, the link speed is fixed, dependent on the **state->interface**. Duplex and pause modes are negotiated via the in-band configuration word. Advertised pause modes are set according to **state->advertising**. Beware of MACs which only support full duplex at gigabit and higher speeds.h](h=If in 802.3z mode, the link speed is fixed, dependent on the }(hjhhhNhNubj)}(h**state->interface**h]hstate->interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhx. Duplex and pause modes are negotiated via the in-band configuration word. Advertised pause modes are set according to }(hjhhhNhNubj)}(h**state->advertising**h]hstate->advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhM. Beware of MACs which only support full duplex at gigabit and higher speeds.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMLhjubjX)}(hXPIf in Cisco SGMII mode, the link speed and duplex mode are passed in the serial bitstream 16-bit configuration word, and the MAC should be configured to read these bits and acknowledge the configuration word. Nothing is advertised by the MAC. The MAC is responsible for reading the configuration word and configuring itself accordingly.h]hXPIf in Cisco SGMII mode, the link speed and duplex mode are passed in the serial bitstream 16-bit configuration word, and the MAC should be configured to read these bits and acknowledge the configuration word. Nothing is advertised by the MAC. The MAC is responsible for reading the configuration word and configuring itself accordingly.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMRhjubjX)}(h3Valid state members: interface, pause, advertising.h]h3Valid state members: interface, pause, advertising.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubeh}(h]h ]h"]h$]h&]uh1jhjLubjX)}(hXRImplementations are expected to update the MAC to reflect the requested settings - i.o.w., if nothing has changed between two calls, no action is expected. If only flow control settings have changed, flow control should be updated *without* taking the link down. This "update" behaviour is critical to avoid bouncing the link up status.h](hImplementations are expected to update the MAC to reflect the requested settings - i.o.w., if nothing has changed between two calls, no action is expected. If only flow control settings have changed, flow control should be updated }(hj<hhhNhNubjz)}(h *without*h]hwithout}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj<ubhe taking the link down. This “update” behaviour is critical to avoid bouncing the link up status.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM[hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_finish (C function) c.mac_finishhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hXint mac_finish (struct phylink_config *config, unsigned int mode, phy_interface_t iface)h]h)}(hWint mac_finish(struct phylink_config *config, unsigned int mode, phy_interface_t iface)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhhjhMgubj)}(h mac_finishh]j%)}(h mac_finishh]h mac_finish}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjyhhhjhMgubj)}(hI(struct phylink_config *config, unsigned int mode, phy_interface_t iface)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.mac_finishasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj%)}(hmodeh]hmode}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t ifaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.mac_finishasbuh1hhjyubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyubj%)}(hifaceh]hiface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjyhhhjhMgubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjuhhhjhMgubah}(h]jpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMghjrhhubjS)}(hhh]jX)}(h)finish a to change the PHY interface modeh]h)finish a to change the PHY interface mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMghjhhubah}(h]h ]h"]h$]h&]uh1jRhjrhhhjhMgubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. ``phy_interface_t iface`` interface mode to switch to **Description** phylink will call this if it called mac_prepare() to allow the MAC to complete any necessary steps after the MAC and PCS have been configured for the **mode** and **iface**. E.g. a MAC driver may wish to re-enable the Serdes PHY here if it was previously disabled by mac_prepare(). Returns zero on success, or negative errno on failure which will be reported to the kernel log.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMkhjubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhhjubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hj0hhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hj:h]hstruct phylink_config}(hj<hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhj,hMhhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj,hMhhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhhjubj)}(hR``unsigned int mode`` one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``. h](j)}(h``unsigned int mode``h]j)}(hjsh]hunsigned int mode}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMihjmubj)}(hhh]jX)}(h;one of ``MLO_AN_FIXED``, ``MLO_AN_PHY``, ``MLO_AN_INBAND``.h](hone of }(hjhhhNhNubj)}(h``MLO_AN_FIXED``h]h MLO_AN_FIXED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h``MLO_AN_PHY``h]h MLO_AN_PHY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubj)}(h6``phy_interface_t iface`` interface mode to switch to h](j)}(h``phy_interface_t iface``h]j)}(hjh]hphy_interface_t iface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMjhjubj)}(hhh]jX)}(hinterface mode to switch toh]hinterface mode to switch to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMjhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMjhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMlhjubjX)}(hXphylink will call this if it called mac_prepare() to allow the MAC to complete any necessary steps after the MAC and PCS have been configured for the **mode** and **iface**. E.g. a MAC driver may wish to re-enable the Serdes PHY here if it was previously disabled by mac_prepare().h](hphylink will call this if it called mac_prepare() to allow the MAC to complete any necessary steps after the MAC and PCS have been configured for the }(hj3hhhNhNubj)}(h**mode**h]hmode}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh and }(hj3hhhNhNubj)}(h **iface**h]hiface}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubhm. E.g. a MAC driver may wish to re-enable the Serdes PHY here if it was previously disabled by mac_prepare().}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMkhjubjX)}(h_Returns zero on success, or negative errno on failure which will be reported to the kernel log.h]h_Returns zero on success, or negative errno on failure which will be reported to the kernel log.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMphjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_link_down (C function)c.mac_link_downhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h`void mac_link_down (struct phylink_config *config, unsigned int mode, phy_interface_t interface)h]h)}(h_void mac_link_down(struct phylink_config *config, unsigned int mode, phy_interface_t interface)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMxubj)}(h mac_link_downh]j%)}(h mac_link_downh]h mac_link_down}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMxubj)}(hM(struct phylink_config *config, unsigned int mode, phy_interface_t interface)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.mac_link_downasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj%)}(hmodeh]hmode}(hj|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.mac_link_downasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMxubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMxubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMxhjhhubjS)}(hhh]jX)}(h(notification that the link has gone downh]h(notification that the link has gone down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMxhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMxubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``unsigned int mode`` link autonegotiation mode ``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode **Description** Notifies the MAC that the link has gone down. This will not be called unless mac_link_up() has been previously called. The MAC should stop processing packets for transmission and reception. phylink will have called netif_carrier_off() to notify the networking stack that the link has gone down, so MAC drivers should not make this call. If **mode** is ``MLO_AN_INBAND``, then this function must not prevent the link coming up.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM|hj ubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hj/h]hstruct phylink_config *config}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMyhj)ubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjHhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjRh]hstruct phylink_config}(hjThhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjDhMyhjHubh.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjDhMyhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMyhj&ubj)}(h0``unsigned int mode`` link autonegotiation mode h](j)}(h``unsigned int mode``h]j)}(hjh]hunsigned int mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMzhjubj)}(hhh]jX)}(hlink autonegotiation modeh]hlink autonegotiation mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhj&ubj)}(h\``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM{hjubj)}(hhh]jX)}(h=link :c:type:`typedef phy_interface_t ` modeh](hlink }(hjhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjh]htypedef phy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhM{hjubh mode}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{hj&ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM}hj ubjX)}(hvNotifies the MAC that the link has gone down. This will not be called unless mac_link_up() has been previously called.h]hvNotifies the MAC that the link has gone down. This will not be called unless mac_link_up() has been previously called.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM|hj ubjX)}(hThe MAC should stop processing packets for transmission and reception. phylink will have called netif_carrier_off() to notify the networking stack that the link has gone down, so MAC drivers should not make this call.h]hThe MAC should stop processing packets for transmission and reception. phylink will have called netif_carrier_off() to notify the networking stack that the link has gone down, so MAC drivers should not make this call.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj ubjX)}(hYIf **mode** is ``MLO_AN_INBAND``, then this function must not prevent the link coming up.h](hIf }(hjVhhhNhNubj)}(h**mode**h]hmode}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh is }(hjVhhhNhNubj)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh9, then this function must not prevent the link coming up.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_link_up (C function) c.mac_link_uphNtauh1hhjJhhhNhNubh)}(hhh](h)}(hvoid mac_link_up (struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause)h]h)}(hvoid mac_link_up(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h mac_link_uph]j%)}(h mac_link_uph]h mac_link_up}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phylink_config *config, struct phy_device *phy, unsigned int mode, phy_interface_t interface, int speed, int duplex, bool tx_pause, bool rx_pause)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.mac_link_upasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct phy_device *phyh](h)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]j  c.mac_link_upasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hphyh]hphy}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int modeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmodeh]hmode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j  c.mac_link_upasbuh1hhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int speedh](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]ubj%)}(hspeedh]hspeed}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int duplexh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hduplexh]hduplex}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool tx_pauseh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(htx_pauseh]htx_pause}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h bool rx_pauseh](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hrx_pauseh]hrx_pause}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h¬ification that the link has come uph]h¬ification that the link has come up}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjAhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``struct phy_device *phy`` any attached phy (deprecated - please use LPI interfaces) ``unsigned int mode`` link autonegotiation mode ``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode ``int speed`` link speed ``int duplex`` link duplex ``bool tx_pause`` link transmit pause enablement status ``bool rx_pause`` link receive pause enablement status **Description** Notifies the MAC that the link has come up, and the parameters of the link as seen from the MACs point of view. If mac_link_up() has been called previously, there will be an intervening call to mac_link_down() before this method will be subsequently called. **speed**, **duplex**, **tx_pause** and **rx_pause** indicate the finalised link settings, and should be used to configure the MAC block appropriately where these settings are not automatically conveyed from the PCS block, or if in-band negotiation (as defined by phylink_autoneg_inband(**mode**)) is disabled. Note that when 802.3z in-band negotiation is in use, it is possible that the user wishes to override the pause settings, and this should be allowed when considering the implementation of this method. Once configured, the MAC may begin to process packets for transmission and reception. Interface type selection must be done in mac_config().h](jX)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(hU``struct phy_device *phy`` any attached phy (deprecated - please use LPI interfaces) h](j)}(h``struct phy_device *phy``h]j)}(hjh]hstruct phy_device *phy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h9any attached phy (deprecated - please use LPI interfaces)h]h9any attached phy (deprecated - please use LPI interfaces)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(h0``unsigned int mode`` link autonegotiation mode h](j)}(h``unsigned int mode``h]j)}(hjh]hunsigned int mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hlink autonegotiation modeh]hlink autonegotiation mode}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj|ubj)}(h\``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode h](j)}(h``phy_interface_t interface``h]j)}(hjSh]hphy_interface_t interface}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjMubj)}(hhh]jX)}(h=link :c:type:`typedef phy_interface_t ` modeh](hlink }(hjlhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjvh]htypedef phy_interface_t}(hjxhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhhMhjlubh mode}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhj|ubj)}(h``int speed`` link speed h](j)}(h ``int speed``h]j)}(hjh]h int speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h link speedh]h link speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(h``int duplex`` link duplex h](j)}(h``int duplex``h]j)}(hjh]h int duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h link duplexh]h link duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(h8``bool tx_pause`` link transmit pause enablement status h](j)}(h``bool tx_pause``h]j)}(hj!h]h bool tx_pause}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h%link transmit pause enablement statush]h%link transmit pause enablement status}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj|ubj)}(h7``bool rx_pause`` link receive pause enablement status h](j)}(h``bool rx_pause``h]j)}(hjZh]h bool rx_pause}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjTubj)}(hhh]jX)}(h$link receive pause enablement statush]h$link receive pause enablement status}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjohMhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubjX)}(hXNotifies the MAC that the link has come up, and the parameters of the link as seen from the MACs point of view. If mac_link_up() has been called previously, there will be an intervening call to mac_link_down() before this method will be subsequently called.h]hXNotifies the MAC that the link has come up, and the parameters of the link as seen from the MACs point of view. If mac_link_up() has been called previously, there will be an intervening call to mac_link_down() before this method will be subsequently called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubjX)}(hX6**speed**, **duplex**, **tx_pause** and **rx_pause** indicate the finalised link settings, and should be used to configure the MAC block appropriately where these settings are not automatically conveyed from the PCS block, or if in-band negotiation (as defined by phylink_autoneg_inband(**mode**)) is disabled.h](j)}(h **speed**h]hspeed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h **duplex**h]hduplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }hjsbj)}(h **tx_pause**h]htx_pause}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **rx_pause**h]hrx_pause}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh indicate the finalised link settings, and should be used to configure the MAC block appropriately where these settings are not automatically conveyed from the PCS block, or if in-band negotiation (as defined by phylink_autoneg_inband(}(hjhhhNhNubj)}(h**mode**h]hmode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)) is disabled.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubjX)}(hNote that when 802.3z in-band negotiation is in use, it is possible that the user wishes to override the pause settings, and this should be allowed when considering the implementation of this method.h]hNote that when 802.3z in-band negotiation is in use, it is possible that the user wishes to override the pause settings, and this should be allowed when considering the implementation of this method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubjX)}(hUOnce configured, the MAC may begin to process packets for transmission and reception.h]hUOnce configured, the MAC may begin to process packets for transmission and reception.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubjX)}(h6Interface type selection must be done in mac_config().h]h6Interface type selection must be done in mac_config().}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_disable_tx_lpi (C function)c.mac_disable_tx_lpihNtauh1hhjJhhhNhNubh)}(hhh](h)}(h7void mac_disable_tx_lpi (struct phylink_config *config)h]h)}(h6void mac_disable_tx_lpi(struct phylink_config *config)h](j)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhjzhMubj)}(hmac_disable_tx_lpih]j%)}(hmac_disable_tx_lpih]hmac_disable_tx_lpi}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhhjzhMubj)}(h(struct phylink_config *config)h]j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.mac_disable_tx_lpiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhhjzhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjdhhhjzhMubah}(h]j_ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjzhMhjahhubjS)}(hhh]jX)}(h!disable LPI generation at the MACh]h!disable LPI generation at the MAC}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj)hhubah}(h]h ]h"]h$]h&]uh1jRhjahhhjzhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjDjxjDjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. **Description** Disable generation of LPI at the MAC, effectively preventing the MAC from indicating that it is idle.h](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjHubj)}(hhh]j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjmh]hstruct phylink_config *config}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjgubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjHubjX)}(heDisable generation of LPI at the MAC, effectively preventing the MAC from indicating that it is idle.h]heDisable generation of LPI at the MAC, effectively preventing the MAC from indicating that it is idle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_enable_tx_lpi (C function)c.mac_enable_tx_lpihNtauh1hhjJhhhNhNubh)}(hhh](h)}(hRint mac_enable_tx_lpi (struct phylink_config *config, u32 timer, bool tx_clk_stop)h]h)}(hQint mac_enable_tx_lpi(struct phylink_config *config, u32 timer, bool tx_clk_stop)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMubj)}(hmac_enable_tx_lpih]j%)}(hmac_enable_tx_lpih]hmac_enable_tx_lpi}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMubj)}(h<(struct phylink_config *config, u32 timer, bool tx_clk_stop)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjkhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjhubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmmodnameN classnameNjj!)}j$]j')}jj3sbc.mac_enable_tx_lpiasbuh1hhjIubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubj)}(h u32 timerh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.mac_enable_tx_lpiasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(htimerh]htimer}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubj)}(hbool tx_clk_stoph](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h tx_clk_stoph]h tx_clk_stop}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjEubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h.configure and enable LPI generation at the MACh]h.configure and enable LPI generation at the MAC}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1hhhhjJhNhNubj})}(hXj**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``u32 timer`` LPI timeout in microseconds. ``bool tx_clk_stop`` allow xMII transmit clock to be stopped during LPI **Description** Configure the LPI timeout accordingly. This will only be called when the link is already up, to cater for situations where the hardware needs to be programmed according to the link speed. Enable LPI generation at the MAC, and configure whether the xMII transmit clock may be stopped. **Return** 0 on success. Please consult with rmk before returning an error.h](jX)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h+``u32 timer`` LPI timeout in microseconds. h](j)}(h ``u32 timer``h]j)}(hjh]h u32 timer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hLPI timeout in microseconds.h]hLPI timeout in microseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``bool tx_clk_stop`` allow xMII transmit clock to be stopped during LPI h](j)}(h``bool tx_clk_stop``h]j)}(hj"h]hbool tx_clk_stop}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h2allow xMII transmit clock to be stopped during LPIh]h2allow xMII transmit clock to be stopped during LPI}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubeh}(h]h ]h"]h$]h&]uh1jhjhubjX)}(h**Description**h]j)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubjX)}(hConfigure the LPI timeout accordingly. This will only be called when the link is already up, to cater for situations where the hardware needs to be programmed according to the link speed.h]hConfigure the LPI timeout accordingly. This will only be called when the link is already up, to cater for situations where the hardware needs to be programmed according to the link speed.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubjX)}(h_Enable LPI generation at the MAC, and configure whether the xMII transmit clock may be stopped.h]h_Enable LPI generation at the MAC, and configure whether the xMII transmit clock may be stopped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubjX)}(h@0 on success. Please consult with rmk before returning an error.h]h@0 on success. Please consult with rmk before returning an error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmac_wol_set (C function) c.mac_wol_sethNtauh1hhjJhhhNhNubh)}(hhh](h)}(hNint mac_wol_set (struct phylink_config *config, u32 wolopts, const u8 *sopass)h]h)}(hMint mac_wol_set(struct phylink_config *config, u32 wolopts, const u8 *sopass)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h mac_wol_seth]j%)}(h mac_wol_seth]h mac_wol_set}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h>(struct phylink_config *config, u32 wolopts, const u8 *sopass)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jjsb c.mac_wol_setasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(h u32 woloptsh](h)}(hhh]j%)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jO c.mac_wol_setasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hwoloptsh]hwolopts}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hconst u8 *sopassh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jO c.mac_wol_setasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hsopassh]hsopass}(hj&hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h$configure the Wake-on-Lan parametersh]h$configure the Wake-on-Lan parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. ``u32 wolopts`` Bitmask of ``WAKE_*`` flags for enabled Wake-On-Lan modes. ``const u8 *sopass`` SecureOn(tm) password; meaningful only for ``WAKE_MAGICSECURE`` **Description** Enable the specified Wake-on-Lan options at the MAC. Options that the PHY can handle will have been removed from **wolopts**. The presence of this method enables phylink-managed WoL support. **Return** 0 on success.h](jX)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubj)}(hhh](j)}(hc``struct phylink_config *config`` a pointer to a :c:type:`struct phylink_config `. h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h@a pointer to a :c:type:`struct phylink_config `.h](ha pointer to a }(hjhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjh]hstruct phylink_config}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hK``u32 wolopts`` Bitmask of ``WAKE_*`` flags for enabled Wake-On-Lan modes. h](j)}(h``u32 wolopts``h]j)}(hjh]h u32 wolopts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h:Bitmask of ``WAKE_*`` flags for enabled Wake-On-Lan modes.h](h Bitmask of }(hjhhhNhNubj)}(h ``WAKE_*``h]hWAKE_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% flags for enabled Wake-On-Lan modes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hU``const u8 *sopass`` SecureOn(tm) password; meaningful only for ``WAKE_MAGICSECURE`` h](j)}(h``const u8 *sopass``h]j)}(hj8h]hconst u8 *sopass}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj2ubj)}(hhh]jX)}(h?SecureOn(tm) password; meaningful only for ``WAKE_MAGICSECURE``h](h+SecureOn(tm) password; meaningful only for }(hjQhhhNhNubj)}(h``WAKE_MAGICSECURE``h]hWAKE_MAGICSECURE}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jWhjMhMhjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjX)}(h}Enable the specified Wake-on-Lan options at the MAC. Options that the PHY can handle will have been removed from **wolopts**.h](hqEnable the specified Wake-on-Lan options at the MAC. Options that the PHY can handle will have been removed from }(hjhhhNhNubj)}(h **wolopts**h]hwolopts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjX)}(h@The presence of this method enables phylink-managed WoL support.h]h@The presence of this method enables phylink-managed WoL support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjX)}(h 0 on success.h]h 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_pcs (C struct) c.phylink_pcshNtauh1hhjJhhhNhNubh)}(hhh](h)}(h phylink_pcsh]h)}(hstruct phylink_pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMubj)}(h phylink_pcsh]j%)}(hjh]h phylink_pcs}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hPHYLINK PCS instanceh]hPHYLINK PCS instance}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjJhNhNubj})}(hX**Definition**:: struct phylink_pcs { unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; const struct phylink_pcs_ops *ops; struct phylink *phylink; bool poll; bool rxc_always_on; }; **Members** ``supported_interfaces`` describing which PHY_INTERFACE_MODE_xxx are supported by this PCS. ``ops`` a pointer to the :c:type:`struct phylink_pcs_ops ` structure ``phylink`` pointer to :c:type:`struct phylink_config ` ``poll`` poll the PCS for link changes ``rxc_always_on`` The MAC driver requires the reference clock to always be on. Standalone PCS drivers which do not have access to a PHY device can check this instead of PHY_F_RXC_ALWAYS_ON.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh:}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjU)}(hstruct phylink_pcs { unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; const struct phylink_pcs_ops *ops; struct phylink *phylink; bool poll; bool rxc_always_on; };h]hstruct phylink_pcs { unsigned long supported_interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; const struct phylink_pcs_ops *ops; struct phylink *phylink; bool poll; bool rxc_always_on; };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjlubj)}(hhh](j)}(h\``supported_interfaces`` describing which PHY_INTERFACE_MODE_xxx are supported by this PCS. h](j)}(h``supported_interfaces``h]j)}(hjh]hsupported_interfaces}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hBdescribing which PHY_INTERFACE_MODE_xxx are supported by this PCS.h]hBdescribing which PHY_INTERFACE_MODE_xxx are supported by this PCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``ops`` a pointer to the :c:type:`struct phylink_pcs_ops ` structure h](j)}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hMa pointer to the :c:type:`struct phylink_pcs_ops ` structureh](ha pointer to the }(hjhhhNhNubh)}(h2:c:type:`struct phylink_pcs_ops `h]j)}(hjh]hstruct phylink_pcs_ops}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_pcs_opsuh1hhj hMhjubh structure}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hH``phylink`` pointer to :c:type:`struct phylink_config ` h](j)}(h ``phylink``h]j)}(hjSh]hphylink}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjMubj)}(hhh]jX)}(h;pointer to :c:type:`struct phylink_config `h](h pointer to }(hjlhhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hjvh]hstruct phylink_config}(hjxhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhhMhjlubeh}(h]h ]h"]h$]h&]uh1jWhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjubj)}(h'``poll`` poll the PCS for link changes h](j)}(h``poll``h]j)}(hjh]hpoll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hpoll the PCS for link changesh]hpoll the PCS for link changes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``rxc_always_on`` The MAC driver requires the reference clock to always be on. Standalone PCS drivers which do not have access to a PHY device can check this instead of PHY_F_RXC_ALWAYS_ON.h](j)}(h``rxc_always_on``h]j)}(hjh]h rxc_always_on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hThe MAC driver requires the reference clock to always be on. Standalone PCS drivers which do not have access to a PHY device can check this instead of PHY_F_RXC_ALWAYS_ON.h]hThe MAC driver requires the reference clock to always be on. Standalone PCS drivers which do not have access to a PHY device can check this instead of PHY_F_RXC_ALWAYS_ON.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubjX)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjJhhubjX)}(hvThis structure is designed to be embedded within the PCS private data, and will be passed between phylink and the PCS.h]hvThis structure is designed to be embedded within the PCS private data, and will be passed between phylink and the PCS.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjJhhubjX)}(hWThe **phylink** member is private to phylink and must not be touched by the PCS driver.h](hThe }(hjLhhhNhNubj)}(h **phylink**h]hphylink}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubhH member is private to phylink and must not be touched by the PCS driver.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjJhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_pcs_ops (C struct)c.phylink_pcs_opshNtauh1hhjJhhhNhNubh)}(hhh](h)}(hphylink_pcs_opsh]h)}(hstruct phylink_pcs_opsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphylink_pcs_opsh]j%)}(hjh]hphylink_pcs_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj~hhhjhMubah}(h]jyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhj{hhubjS)}(hhh]jX)}(hMAC PCS operations structure.h]hMAC PCS operations structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj{hhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Definition**:: struct phylink_pcs_ops { int (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state); unsigned int (*pcs_inband_caps)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_enable)(struct phylink_pcs *pcs); void (*pcs_disable)(struct phylink_pcs *pcs); void (*pcs_pre_config)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_post_config)(struct phylink_pcs *pcs, phy_interface_t interface); void (*pcs_get_state)(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state); int (*pcs_config)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac); void (*pcs_an_restart)(struct phylink_pcs *pcs); void (*pcs_link_up)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex); void (*pcs_disable_eee)(struct phylink_pcs *pcs); void (*pcs_enable_eee)(struct phylink_pcs *pcs); int (*pcs_pre_init)(struct phylink_pcs *pcs); }; **Members** ``pcs_validate`` validate the link configuration. ``pcs_inband_caps`` query inband support for interface mode. ``pcs_enable`` enable the PCS. ``pcs_disable`` disable the PCS. ``pcs_pre_config`` pre-mac_config method (for errata) ``pcs_post_config`` post-mac_config method (for arrata) ``pcs_get_state`` read the current MAC PCS link state from the hardware. ``pcs_config`` configure the MAC PCS for the selected mode and state. ``pcs_an_restart`` restart 802.3z BaseX autonegotiation. ``pcs_link_up`` program the PCS for the resolved link configuration (where necessary). ``pcs_disable_eee`` optional notification to PCS that EEE has been disabled at the MAC. ``pcs_enable_eee`` optional notification to PCS that EEE will be enabled at the MAC. ``pcs_pre_init`` configure PCS components necessary for MAC hardware initialization e.g. RX clock for stmmac.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjU)}(hXBstruct phylink_pcs_ops { int (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state); unsigned int (*pcs_inband_caps)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_enable)(struct phylink_pcs *pcs); void (*pcs_disable)(struct phylink_pcs *pcs); void (*pcs_pre_config)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_post_config)(struct phylink_pcs *pcs, phy_interface_t interface); void (*pcs_get_state)(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state); int (*pcs_config)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac); void (*pcs_an_restart)(struct phylink_pcs *pcs); void (*pcs_link_up)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex); void (*pcs_disable_eee)(struct phylink_pcs *pcs); void (*pcs_enable_eee)(struct phylink_pcs *pcs); int (*pcs_pre_init)(struct phylink_pcs *pcs); };h]hXBstruct phylink_pcs_ops { int (*pcs_validate)(struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state); unsigned int (*pcs_inband_caps)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_enable)(struct phylink_pcs *pcs); void (*pcs_disable)(struct phylink_pcs *pcs); void (*pcs_pre_config)(struct phylink_pcs *pcs, phy_interface_t interface); int (*pcs_post_config)(struct phylink_pcs *pcs, phy_interface_t interface); void (*pcs_get_state)(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state); int (*pcs_config)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac); void (*pcs_an_restart)(struct phylink_pcs *pcs); void (*pcs_link_up)(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex); void (*pcs_disable_eee)(struct phylink_pcs *pcs); void (*pcs_enable_eee)(struct phylink_pcs *pcs); int (*pcs_pre_init)(struct phylink_pcs *pcs); };}hjsbah}(h]h ]h"]h$]h&]j<j=uh1jThX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM hjubj)}(hhh](j)}(h2``pcs_validate`` validate the link configuration. h](j)}(h``pcs_validate``h]j)}(hj5h]h pcs_validate}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj/ubj)}(hhh]jX)}(h validate the link configuration.h]h validate the link configuration.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhj,ubj)}(h=``pcs_inband_caps`` query inband support for interface mode. h](j)}(h``pcs_inband_caps``h]j)}(hjnh]hpcs_inband_caps}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhubj)}(hhh]jX)}(h(query inband support for interface mode.h]h(query inband support for interface mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h``pcs_enable`` enable the PCS. h](j)}(h``pcs_enable``h]j)}(hjh]h pcs_enable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(henable the PCS.h]henable the PCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h!``pcs_disable`` disable the PCS. h](j)}(h``pcs_disable``h]j)}(hjh]h pcs_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hdisable the PCS.h]hdisable the PCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h6``pcs_pre_config`` pre-mac_config method (for errata) h](j)}(h``pcs_pre_config``h]j)}(hjh]hpcs_pre_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h"pre-mac_config method (for errata)h]h"pre-mac_config method (for errata)}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj,ubj)}(h8``pcs_post_config`` post-mac_config method (for arrata) h](j)}(h``pcs_post_config``h]j)}(hjRh]hpcs_post_config}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjLubj)}(hhh]jX)}(h#post-mac_config method (for arrata)h]h#post-mac_config method (for arrata)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhj,ubj)}(hI``pcs_get_state`` read the current MAC PCS link state from the hardware. h](j)}(h``pcs_get_state``h]j)}(hjh]h pcs_get_state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h6read the current MAC PCS link state from the hardware.h]h6read the current MAC PCS link state from the hardware.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(hF``pcs_config`` configure the MAC PCS for the selected mode and state. h](j)}(h``pcs_config``h]j)}(hjh]h pcs_config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h6configure the MAC PCS for the selected mode and state.h]h6configure the MAC PCS for the selected mode and state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(h9``pcs_an_restart`` restart 802.3z BaseX autonegotiation. h](j)}(h``pcs_an_restart``h]j)}(hjh]hpcs_an_restart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h%restart 802.3z BaseX autonegotiation.h]h%restart 802.3z BaseX autonegotiation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(hW``pcs_link_up`` program the PCS for the resolved link configuration (where necessary). h](j)}(h``pcs_link_up``h]j)}(hj6h]h pcs_link_up}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj0ubj)}(hhh]jX)}(hFprogram the PCS for the resolved link configuration (where necessary).h]hFprogram the PCS for the resolved link configuration (where necessary).}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj,ubj)}(hX``pcs_disable_eee`` optional notification to PCS that EEE has been disabled at the MAC. h](j)}(h``pcs_disable_eee``h]j)}(hjph]hpcs_disable_eee}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjjubj)}(hhh]jX)}(hCoptional notification to PCS that EEE has been disabled at the MAC.h]hCoptional notification to PCS that EEE has been disabled at the MAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(hU``pcs_enable_eee`` optional notification to PCS that EEE will be enabled at the MAC. h](j)}(h``pcs_enable_eee``h]j)}(hjh]hpcs_enable_eee}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(hAoptional notification to PCS that EEE will be enabled at the MAC.h]hAoptional notification to PCS that EEE will be enabled at the MAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubj)}(hm``pcs_pre_init`` configure PCS components necessary for MAC hardware initialization e.g. RX clock for stmmac.h](j)}(h``pcs_pre_init``h]j)}(hjh]h pcs_pre_init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h\configure PCS components necessary for MAC hardware initialization e.g. RX clock for stmmac.h]h\configure PCS components necessary for MAC hardware initialization e.g. RX clock for stmmac.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_validate (C function)c.pcs_validatehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hlint pcs_validate (struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state)h]h)}(hkint pcs_validate(struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state)h](j)}(hinth]hint}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM%ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhjKhM%ubj)}(h pcs_validateh]j%)}(h pcs_validateh]h pcs_validate}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj9hhhjKhM%ubj)}(h[(struct phylink_pcs *pcs, unsigned long *supported, const struct phylink_link_state *state)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj`sbc.pcs_validateasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hpcsh]hpcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubj)}(hunsigned long *supportedh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h supportedh]h supported}(hj1hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubj)}(h&const struct phylink_link_state *stateh](h)}(hjh]hconst}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubh)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjFubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.pcs_validateasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjFubj%)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjFubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubeh}(h]h ]h"]h$]h&]j<j=uh1jhj9hhhjKhM%ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhjKhM%ubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhM%hj2hhubjS)}(hhh]jX)}(h validate the link configuration.h]h validate the link configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM%hjhhubah}(h]h ]h"]h$]h&]uh1jRhj2hhhjKhM%ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. ``unsigned long *supported`` ethtool bitmask for supported link modes. ``const struct phylink_link_state *state`` a const pointer to a :c:type:`struct phylink_link_state `. **Description** Validate the interface mode, and advertising's autoneg bit, removing any media ethtool link modes that would not be supportable from the supported mask. Phylink will propagate the changes to the advertising mask. See the :c:type:`struct phylink_mac_ops ` validate() method. Returns -EINVAL if the interface mode/autoneg mode is not supported. Returns non-zero positive if the link state can be supported.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM)hjubj)}(hhh](j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hj'h]hstruct phylink_pcs *pcs}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM&hj!ubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hj@hhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjJh]hstruct phylink_pcs}(hjLhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhj<hM&hj@ubh.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj<hM&hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hM&hjubj)}(hG``unsigned long *supported`` ethtool bitmask for supported link modes. h](j)}(h``unsigned long *supported``h]j)}(hjh]hunsigned long *supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM'hj}ubj)}(hhh]jX)}(h)ethtool bitmask for supported link modes.h]h)ethtool bitmask for supported link modes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(hz``const struct phylink_link_state *state`` a const pointer to a :c:type:`struct phylink_link_state `. h](j)}(h*``const struct phylink_link_state *state``h]j)}(hjh]h&const struct phylink_link_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM(hjubj)}(hhh]jX)}(hNa const pointer to a :c:type:`struct phylink_link_state `.h](ha const pointer to a }(hjhhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hjh]hstruct phylink_link_state}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhjhM(hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM*hjubjX)}(hX"Validate the interface mode, and advertising's autoneg bit, removing any media ethtool link modes that would not be supportable from the supported mask. Phylink will propagate the changes to the advertising mask. See the :c:type:`struct phylink_mac_ops ` validate() method.h](hValidate the interface mode, and advertising’s autoneg bit, removing any media ethtool link modes that would not be supportable from the supported mask. Phylink will propagate the changes to the advertising mask. See the }(hj0hhhNhNubh)}(h2:c:type:`struct phylink_mac_ops `h]j)}(hj:h]hstruct phylink_mac_ops}(hj<hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_mac_opsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM)hj0ubh validate() method.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjWhM)hjubjX)}(hReturns -EINVAL if the interface mode/autoneg mode is not supported. Returns non-zero positive if the link state can be supported.h]hReturns -EINVAL if the interface mode/autoneg mode is not supported. Returns non-zero positive if the link state can be supported.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_inband_caps (C function)c.pcs_inband_capshNtauh1hhjJhhhNhNubh)}(hhh](h)}(hQunsigned int pcs_inband_caps (struct phylink_pcs *pcs, phy_interface_t interface)h]h)}(hPunsigned int pcs_inband_caps(struct phylink_pcs *pcs, phy_interface_t interface)h](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM6ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM6ubj)}(hpcs_inband_capsh]j%)}(hpcs_inband_capsh]hpcs_inband_caps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM6ubj)}(h4(struct phylink_pcs *pcs, phy_interface_t interface)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]j')}jjsbc.pcs_inband_capsasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpcsh]hpcs}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hj_hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j$c.pcs_inband_capsasbuh1hhjXubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM6ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM6ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM6hjhhubjS)}(hhh]jX)}(h2query PCS in-band capabilities for interface mode.h]h2query PCS in-band capabilities for interface mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM6hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM6ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. ``phy_interface_t interface`` interface mode to be queried **Description** Returns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn't implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from :c:type:`enum link_inband_signalling ` to describe which inband modes are supported for this interface mode.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM:hjubj)}(hhh](j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM7hjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhj hM7hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj hM7hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM7hjubj)}(h;``phy_interface_t interface`` interface mode to be queried h](j)}(h``phy_interface_t interface``h]j)}(hjRh]hphy_interface_t interface}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM8hjLubj)}(hhh]jX)}(hinterface mode to be queriedh]hinterface mode to be queried}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjghM8hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM8hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM:hjubjX)}(hXMReturns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn't implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from :c:type:`enum link_inband_signalling ` to describe which inband modes are supported for this interface mode.h](hReturns zero if it is unknown what in-band signalling is supported by the PHY (e.g. because the PHY driver doesn’t implement the method.) Otherwise, returns a bit mask of the LINK_INBAND_* values from }(hjhhhNhNubh)}(h>:c:type:`enum link_inband_signalling `h]j)}(hjh]henum link_inband_signalling}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjlink_inband_signallinguh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM9hjubhF to describe which inband modes are supported for this interface mode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM9hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_enable (C function) c.pcs_enablehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h(int pcs_enable (struct phylink_pcs *pcs)h]h)}(h'int pcs_enable(struct phylink_pcs *pcs)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMDubj)}(h pcs_enableh]j%)}(h pcs_enableh]h pcs_enable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMDubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjMubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j')}jjsb c.pcs_enableasbuh1hhj.ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.ubj%)}(hpcsh]hpcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMDubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMDubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMDhjhhubjS)}(hhh]jX)}(henable the PCS.h]henable the PCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMDhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMDubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hh**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMHhjubj)}(hhh]j)}(hV``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `.h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMJhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMEhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj6hMEhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_disable (C function) c.pcs_disablehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h*void pcs_disable (struct phylink_pcs *pcs)h]h)}(h)void pcs_disable(struct phylink_pcs *pcs)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMJubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjohhhjhMJubj)}(h pcs_disableh]j%)}(h pcs_disableh]h pcs_disable}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjohhhjhMJubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.pcs_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpcsh]hpcs}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjohhhjhMJubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjkhhhjhMJubah}(h]jfah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMJhjhhhubjS)}(hhh]jX)}(hdisable the PCS.h]hdisable the PCS.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMJhj0hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhhjhMJubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1hhhhjJhNhNubj})}(hh**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `.h](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMNhjOubj)}(hhh]j)}(hV``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `.h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjth]hstruct phylink_pcs *pcs}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMPhjnubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_get_state (C function)c.pcs_get_statehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hevoid pcs_get_state (struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state)h]h)}(hdvoid pcs_get_state(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMPubj)}(h pcs_get_stateh]j%)}(h pcs_get_stateh]h pcs_get_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMPubj)}(hR(struct phylink_pcs *pcs, unsigned int neg_mode, struct phylink_link_state *state)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jjsbc.pcs_get_stateasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*ubj;)}(hj>h]h*}(hjzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj*ubj%)}(hpcsh]hpcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hneg_modeh]hneg_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubj)}(h struct phylink_link_state *stateh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jhc.pcs_get_stateasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj;hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstateh]hstate}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj&ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMPubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMPubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMPhjhhubjS)}(hhh]jX)}(h4Read the current inband link state from the hardwareh]h4Read the current inband link state from the hardware}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMPhjohhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMPubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. ``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) ``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. **Description** Read the current inband link state from the MAC PCS, reporting the current speed in **state->speed**, duplex mode in **state->duplex**, pause mode in **state->pause** using the ``MLO_PAUSE_RX`` and ``MLO_PAUSE_TX`` bits, negotiation completion state in **state->an_complete**, and link up state in **state->link**. If possible, **state->lp_advertising** should also be populated. Note that the **neg_mode** parameter is always the PHYLINK_PCS_NEG_xxx state, not MLO_AN_xxx.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMThjubj)}(hhh](j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMQhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMQhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMQhjubj)}(hF``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) h](j)}(h``unsigned int neg_mode``h]j)}(hjh]hunsigned int neg_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMRhj ubj)}(hhh]jX)}(h+link negotiation mode (PHYLINK_PCS_NEG_xxx)h]h+link negotiation mode (PHYLINK_PCS_NEG_xxx)}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$hMRhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMRhjubj)}(hn``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. h](j)}(h$``struct phylink_link_state *state``h]j)}(hjHh]h struct phylink_link_state *state}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMShjBubj)}(hhh]jX)}(hHa pointer to a :c:type:`struct phylink_link_state `.h](ha pointer to a }(hjahhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hjkh]hstruct phylink_link_state}(hjmhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhj]hMShjaubh.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj]hMShj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMShjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMUhjubjX)}(hX{Read the current inband link state from the MAC PCS, reporting the current speed in **state->speed**, duplex mode in **state->duplex**, pause mode in **state->pause** using the ``MLO_PAUSE_RX`` and ``MLO_PAUSE_TX`` bits, negotiation completion state in **state->an_complete**, and link up state in **state->link**. If possible, **state->lp_advertising** should also be populated.h](hTRead the current inband link state from the MAC PCS, reporting the current speed in }(hjhhhNhNubj)}(h**state->speed**h]h state->speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, duplex mode in }(hjhhhNhNubj)}(h**state->duplex**h]h state->duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, pause mode in }(hjhhhNhNubj)}(h**state->pause**h]h state->pause}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh using the }(hjhhhNhNubj)}(h``MLO_PAUSE_RX``h]h MLO_PAUSE_RX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h``MLO_PAUSE_TX``h]h MLO_PAUSE_TX}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' bits, negotiation completion state in }(hjhhhNhNubj)}(h**state->an_complete**h]hstate->an_complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and link up state in }(hjhhhNhNubj)}(h**state->link**h]h state->link}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. If possible, }(hjhhhNhNubj)}(h**state->lp_advertising**h]hstate->lp_advertising}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh should also be populated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMThjubjX)}(h]Note that the **neg_mode** parameter is always the PHYLINK_PCS_NEG_xxx state, not MLO_AN_xxx.h](hNote that the }(hj[hhhNhNubj)}(h **neg_mode**h]hneg_mode}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubhC parameter is always the PHYLINK_PCS_NEG_xxx state, not MLO_AN_xxx.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_config (C function) c.pcs_confighNtauh1hhjJhhhNhNubh)}(hhh](h)}(hint pcs_config (struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac)h]h)}(hint pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMcubj)}(h pcs_configh]j%)}(h pcs_configh]h pcs_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMcubj)}(h(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, const unsigned long *advertising, bool permit_pause_to_mac)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsb c.pcs_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpcsh]hpcs}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj)}(hinth]hint}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj%)}(hneg_modeh]hneg_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j c.pcs_configasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const unsigned long *advertisingh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj7hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h advertisingh]h advertising}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hbool permit_pause_to_mach](j)}(hjTh]hbool}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubj%)}(hpermit_pause_to_mach]hpermit_pause_to_mac}(hjxhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjYubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMcubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMchjhhubjS)}(hhh]jX)}(h(Configure the PCS mode and advertisementh]h(Configure the PCS mode and advertisement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMchjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMcubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. ``unsigned int neg_mode`` link negotiation mode (see below) ``phy_interface_t interface`` interface mode to be used ``const unsigned long *advertising`` adertisement ethtool link mode mask ``bool permit_pause_to_mac`` permit forwarding pause resolution to MAC **Description** Configure the PCS for the operating mode, the interface mode, and set the advertisement mask. **permit_pause_to_mac** indicates whether the hardware may forward the pause mode resolution to the MAC. When operating in ``MLO_AN_INBAND``, inband should always be enabled, otherwise inband should be disabled. For SGMII, there is no advertisement from the MAC side, the PCS should be programmed to acknowledge the inband word from the PHY. For 1000BASE-X, the advertisement should be programmed into the PCS. For most 10GBASE-R, there is no advertisement. The ``neg_mode`` argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions. pcs_config() will be called when configuration of the PCS is required or when the advertisement is possibly updated. It must not unnecessarily disrupt an established link. When an autonegotiation restart is required for 802.3z modes, .pcs_config() should return a positive non-zero integer (e.g. 1) to indicate to phylink to call the pcs_an_restart() method.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMghjubj)}(hhh](j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMdhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMdhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMdhjubj)}(h<``unsigned int neg_mode`` link negotiation mode (see below) h](j)}(h``unsigned int neg_mode``h]j)}(hj?h]hunsigned int neg_mode}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMehj9ubj)}(hhh]jX)}(h!link negotiation mode (see below)h]h!link negotiation mode (see below)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjThMehjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMehjubj)}(h8``phy_interface_t interface`` interface mode to be used h](j)}(h``phy_interface_t interface``h]j)}(hjxh]hphy_interface_t interface}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMfhjrubj)}(hhh]jX)}(hinterface mode to be usedh]hinterface mode to be used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubj)}(hI``const unsigned long *advertising`` adertisement ethtool link mode mask h](j)}(h$``const unsigned long *advertising``h]j)}(hjh]h const unsigned long *advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMghjubj)}(hhh]jX)}(h#adertisement ethtool link mode maskh]h#adertisement ethtool link mode mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubj)}(hG``bool permit_pause_to_mac`` permit forwarding pause resolution to MAC h](j)}(h``bool permit_pause_to_mac``h]j)}(hjh]hbool permit_pause_to_mac}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhhjubj)}(hhh]jX)}(h)permit forwarding pause resolution to MACh]h)permit forwarding pause resolution to MAC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMjhjubjX)}(hConfigure the PCS for the operating mode, the interface mode, and set the advertisement mask. **permit_pause_to_mac** indicates whether the hardware may forward the pause mode resolution to the MAC.h](h^Configure the PCS for the operating mode, the interface mode, and set the advertisement mask. }(hj;hhhNhNubj)}(h**permit_pause_to_mac**h]hpermit_pause_to_mac}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubhQ indicates whether the hardware may forward the pause mode resolution to the MAC.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMihjubjX)}(hjWhen operating in ``MLO_AN_INBAND``, inband should always be enabled, otherwise inband should be disabled.h](hWhen operating in }(hj\hhhNhNubj)}(h``MLO_AN_INBAND``h]h MLO_AN_INBAND}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubhG, inband should always be enabled, otherwise inband should be disabled.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMmhjubjX)}(hFor SGMII, there is no advertisement from the MAC side, the PCS should be programmed to acknowledge the inband word from the PHY.h]hFor SGMII, there is no advertisement from the MAC side, the PCS should be programmed to acknowledge the inband word from the PHY.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMphjubjX)}(hDFor 1000BASE-X, the advertisement should be programmed into the PCS.h]hDFor 1000BASE-X, the advertisement should be programmed into the PCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMshjubjX)}(h.For most 10GBASE-R, there is no advertisement.h]h.For most 10GBASE-R, there is no advertisement.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMuhjubjX)}(hThe ``neg_mode`` argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions.h](hThe }(hjhhhNhNubj)}(h ``neg_mode``h]hneg_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMwhjubjX)}(hpcs_config() will be called when configuration of the PCS is required or when the advertisement is possibly updated. It must not unnecessarily disrupt an established link.h]hpcs_config() will be called when configuration of the PCS is required or when the advertisement is possibly updated. It must not unnecessarily disrupt an established link.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM{hjubjX)}(hWhen an autonegotiation restart is required for 802.3z modes, .pcs_config() should return a positive non-zero integer (e.g. 1) to indicate to phylink to call the pcs_an_restart() method.h]hWhen an autonegotiation restart is required for 802.3z modes, .pcs_config() should return a positive non-zero integer (e.g. 1) to indicate to phylink to call the pcs_an_restart() method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_an_restart (C function)c.pcs_an_restarthNtauh1hhjJhhhNhNubh)}(hhh](h)}(h-void pcs_an_restart (struct phylink_pcs *pcs)h]h)}(h,void pcs_an_restart(struct phylink_pcs *pcs)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hpcs_an_restarth]j%)}(hpcs_an_restarth]hpcs_an_restart}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj&ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]j')}jj,sbc.pcs_an_restartasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(hpcsh]hpcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj>ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h$restart 802.3z BaseX autonegotiationh]h$restart 802.3z BaseX autonegotiation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. **Description** When PCS ops are present, this overrides mac_an_restart() in :c:type:`struct phylink_mac_ops `.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hj h]hstruct phylink_pcs *pcs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hj#hhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hj-h]hstruct phylink_pcs}(hj/hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hpWhen PCS ops are present, this overrides mac_an_restart() in :c:type:`struct phylink_mac_ops `.h](h=When PCS ops are present, this overrides mac_an_restart() in }(hj~hhhNhNubh)}(h2:c:type:`struct phylink_mac_ops `h]j)}(hjh]hstruct phylink_mac_ops}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_mac_opsuh1hhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj~ubh.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_link_up (C function) c.pcs_link_uphNtauh1hhjJhhhNhNubh)}(hhh](h)}(hsvoid pcs_link_up (struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex)h]h)}(hrvoid pcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h pcs_link_uph]j%)}(h pcs_link_uph]h pcs_link_up}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(hb(struct phylink_pcs *pcs, unsigned int neg_mode, phy_interface_t interface, int speed, int duplex)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hj+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj-modnameN classnameNjj!)}j$]j')}jjsb c.pcs_link_upasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjYhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hpcsh]hpcs}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{ubj%)}(hneg_modeh]hneg_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jG c.pcs_link_upasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int speedh](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hspeedh]hspeed}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h int duplexh](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj%)}(hduplexh]hduplex}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h3program the PCS for the resolved link configurationh]h3program the PCS for the resolved link configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. ``unsigned int neg_mode`` link negotiation mode (see below) ``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode ``int speed`` link speed ``int duplex`` link duplex **Description** This call will be made just before mac_link_up() to inform the PCS of the resolved link parameters. For example, a PCS operating in SGMII mode without in-band AN needs to be manually configured for the link and duplex setting. Otherwise, this should be a no-op. The ``mode`` argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh](j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``unsigned int neg_mode`` link negotiation mode (see below) h](j)}(h``unsigned int neg_mode``h]j)}(hj0h]hunsigned int neg_mode}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj*ubj)}(hhh]jX)}(h!link negotiation mode (see below)h]h!link negotiation mode (see below)}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjubj)}(h\``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode h](j)}(h``phy_interface_t interface``h]j)}(hjih]hphy_interface_t interface}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjcubj)}(hhh]jX)}(h=link :c:type:`typedef phy_interface_t ` modeh](hlink }(hjhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjh]htypedef phy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhj~hMhjubh mode}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj~hMhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjubj)}(h``int speed`` link speed h](j)}(h ``int speed``h]j)}(hjh]h int speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h link speedh]h link speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``int duplex`` link duplex h](j)}(h``int duplex``h]j)}(hjh]h int duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h link duplexh]h link duplex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj9h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hXThis call will be made just before mac_link_up() to inform the PCS of the resolved link parameters. For example, a PCS operating in SGMII mode without in-band AN needs to be manually configured for the link and duplex setting. Otherwise, this should be a no-op.h]hXThis call will be made just before mac_link_up() to inform the PCS of the resolved link parameters. For example, a PCS operating in SGMII mode without in-band AN needs to be manually configured for the link and duplex setting. Otherwise, this should be a no-op.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hThe ``mode`` argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions.h](hThe }(hj^hhhNhNubj)}(h``mode``h]hmode}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh argument should be tested via the phylink_mode_*() family of functions, or for PCS that set pcs->neg_mode true, should be tested against the PHYLINK_PCS_NEG_* definitions.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_disable_eee (C function)c.pcs_disable_eeehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h.void pcs_disable_eee (struct phylink_pcs *pcs)h]h)}(h-void pcs_disable_eee(struct phylink_pcs *pcs)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hpcs_disable_eeeh]j%)}(hpcs_disable_eeeh]hpcs_disable_eee}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.pcs_disable_eeeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpcsh]hpcs}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hDisable EEE at the PCSh]hDisable EEE at the PCS}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs ` **Description** Optional method informing the PCS that EEE has been disabled at the MAC.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj{ubj)}(hhh]j)}(hV``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs ` h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h9a pointer to a :c:type:`struct phylink_pcs `h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj{ubjX)}(hHOptional method informing the PCS that EEE has been disabled at the MAC.h]hHOptional method informing the PCS that EEE has been disabled at the MAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_enable_eee (C function)c.pcs_enable_eeehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h-void pcs_enable_eee (struct phylink_pcs *pcs)h]h)}(h,void pcs_enable_eee(struct phylink_pcs *pcs)h](j)}(hvoidh]hvoid}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhjMhMubj)}(hpcs_enable_eeeh]j%)}(hpcs_enable_eeeh]hpcs_enable_eee}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhjMhMubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjbsbc.pcs_enable_eeeasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjxubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjxubj%)}(hpcsh]hpcs}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjxubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjtubah}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhjMhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhjMhMubah}(h]j2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjMhMhj4hhubjS)}(hhh]jX)}(hEnable EEE at the PCSh]hEnable EEE at the PCS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj4hhhjMhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs ` **Description** Optional method informing the PCS that EEE is about to be enabled at the MAC.h](jX)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]j)}(hV``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs ` h](j)}(h``struct phylink_pcs *pcs``h]j)}(hj@h]hstruct phylink_pcs *pcs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhj:ubj)}(hhh]jX)}(h9a pointer to a :c:type:`struct phylink_pcs `h](ha pointer to a }(hjYhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjch]hstruct phylink_pcs}(hjehhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjUhMhjYubeh}(h]h ]h"]h$]h&]uh1jWhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hMOptional method informing the PCS that EEE is about to be enabled at the MAC.h]hMOptional method informing the PCS that EEE is about to be enabled at the MAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hpcs_pre_init (C function)c.pcs_pre_inithNtauh1hhjJhhhNhNubh)}(hhh](h)}(h*int pcs_pre_init (struct phylink_pcs *pcs)h]h)}(h)int pcs_pre_init(struct phylink_pcs *pcs)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(h pcs_pre_inith]j%)}(h pcs_pre_inith]h pcs_pre_init}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phylink_pcs *pcs)h]j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jjsbc.pcs_pre_initasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hpcsh]hpcs}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h9Configure PCS components necessary for MAC initializationh]h9Configure PCS components necessary for MAC initialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. **Description** This function can be called by MAC drivers through the phylink_pcs_pre_init() wrapper, before their hardware is initialized. It should not be called after the link is brought up, as reconfiguring the PCS at this point could break the link. Some MAC devices require specific hardware initialization to be performed by their associated PCS device before they can properly initialize their own hardware. An example of this is the initialization of stmmac controllers, which requires an active REF_CLK signal to be provided by the PHY/PCS. By calling phylink_pcs_pre_init(), MAC drivers can ensure that the PCS is setup in a way that allows for successful hardware initialization. The specific configuration performed by pcs_pre_init() is dependent on the model of PCS and the requirements of the MAC device attached to it. PCS driver authors should consider whether their target device is to be used in conjunction with a MAC device whose driver calls phylink_pcs_pre_init(). MAC driver authors should document their requirements for the PCS pre-initialization.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]j)}(hW``struct phylink_pcs *pcs`` a pointer to a :c:type:`struct phylink_pcs `. h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct phylink_pcs `.h](ha pointer to a }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hjh]hstruct phylink_pcs}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hThis function can be called by MAC drivers through the phylink_pcs_pre_init() wrapper, before their hardware is initialized. It should not be called after the link is brought up, as reconfiguring the PCS at this point could break the link.h]hThis function can be called by MAC drivers through the phylink_pcs_pre_init() wrapper, before their hardware is initialized. It should not be called after the link is brought up, as reconfiguring the PCS at this point could break the link.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hX'Some MAC devices require specific hardware initialization to be performed by their associated PCS device before they can properly initialize their own hardware. An example of this is the initialization of stmmac controllers, which requires an active REF_CLK signal to be provided by the PHY/PCS.h]hX'Some MAC devices require specific hardware initialization to be performed by their associated PCS device before they can properly initialize their own hardware. An example of this is the initialization of stmmac controllers, which requires an active REF_CLK signal to be provided by the PHY/PCS.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hBy calling phylink_pcs_pre_init(), MAC drivers can ensure that the PCS is setup in a way that allows for successful hardware initialization.h]hBy calling phylink_pcs_pre_init(), MAC drivers can ensure that the PCS is setup in a way that allows for successful hardware initialization.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubjX)}(hX}The specific configuration performed by pcs_pre_init() is dependent on the model of PCS and the requirements of the MAC device attached to it. PCS driver authors should consider whether their target device is to be used in conjunction with a MAC device whose driver calls phylink_pcs_pre_init(). MAC driver authors should document their requirements for the PCS pre-initialization.h]hX}The specific configuration performed by pcs_pre_init() is dependent on the model of PCS and the requirements of the MAC device attached to it. PCS driver authors should consider whether their target device is to be used in conjunction with a MAC device whose driver calls phylink_pcs_pre_init(). MAC driver authors should document their requirements for the PCS pre-initialization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phylink_get_link_timer_ns (C function)c.phylink_get_link_timer_nshNtauh1hhjJhhhNhNubh)}(hhh](h)}(h9int phylink_get_link_timer_ns (phy_interface_t interface)h]h)}(h8int phylink_get_link_timer_ns(phy_interface_t interface)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphylink_get_link_timer_nsh]j%)}(hphylink_get_link_timer_nsh]hphylink_get_link_timer_ns}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(phy_interface_t interface)h]j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phylink_get_link_timer_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hreturn the PCS link timer valueh]hreturn the PCS link timer value}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjEhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj`jxj`jyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode **Description** Return the PCS link timer setting in nanoseconds for the PHY **interface** mode, or -EINVAL if not appropriate.h](jX)}(h**Parameters**h]j)}(hjjh]h Parameters}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjdubj)}(hhh]j)}(h\``phy_interface_t interface`` link :c:type:`typedef phy_interface_t ` mode h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjubj)}(hhh]jX)}(h=link :c:type:`typedef phy_interface_t ` modeh](hlink }(hjhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjh]htypedef phy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhMhjubh mode}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjdubjX)}(hoReturn the PCS link timer setting in nanoseconds for the PHY **interface** mode, or -EINVAL if not appropriate.h](h=Return the PCS link timer setting in nanoseconds for the PHY }(hjhhhNhNubj)}(h **interface**h]h interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% mode, or -EINVAL if not appropriate.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_mac_implements_lpi (C function)c.phylink_mac_implements_lpihNtauh1hhjJhhhNhNubh)}(hhh](h)}(hCbool phylink_mac_implements_lpi (const struct phylink_mac_ops *ops)h]h)}(hBbool phylink_mac_implements_lpi(const struct phylink_mac_ops *ops)h](j)}(hjTh]hbool}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM)ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhjKhM)ubj)}(hphylink_mac_implements_lpih]j%)}(hphylink_mac_implements_lpih]hphylink_mac_implements_lpi}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj:hhhjKhM)ubj)}(h#(const struct phylink_mac_ops *ops)h]j)}(h!const struct phylink_mac_ops *opsh](h)}(hjh]hconst}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubh)}(hhh]j%)}(hphylink_mac_opsh]hphylink_mac_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jj`sbc.phylink_mac_implements_lpiasbuh1hhjvubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjvubj%)}(hopsh]hops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjvubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjrubah}(h]h ]h"]h$]h&]j<j=uh1jhj:hhhjKhM)ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj6hhhjKhM)ubah}(h]j1ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhM)hj3hhubjS)}(hhh]jX)}(h#determine if MAC implements LPI opsh]h#determine if MAC implements LPI ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM)hjhhubah}(h]h ]h"]h$]h&]uh1jRhj3hhhjKhM)ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``const struct phylink_mac_ops *ops`` phylink_mac_ops structure **Description** Returns true if the phylink MAC operations structure indicates that the LPI operations have been implemented, false otherwise.h](jX)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM-hj4ubj)}(hhh]j)}(h@``const struct phylink_mac_ops *ops`` phylink_mac_ops structure h](j)}(h%``const struct phylink_mac_ops *ops``h]j)}(hjYh]h!const struct phylink_mac_ops *ops}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM*hjSubj)}(hhh]jX)}(hphylink_mac_ops structureh]hphylink_mac_ops structure}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnhM*hjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhM*hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM,hj4ubjX)}(h~Returns true if the phylink MAC operations structure indicates that the LPI operations have been implemented, false otherwise.h]h~Returns true if the phylink MAC operations structure indicates that the LPI operations have been implemented, false otherwise.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhX/var/lib/git/docbuild/linux/Documentation/networking/kapi:147: ./include/linux/phylink.hhM+hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink (C struct) c.phylinkhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hphylinkh]h)}(hstruct phylinkh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphylinkh]j%)}(hjh]hphylink}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(hinternal data type for phylinkh]hinternal data type for phylink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chK'hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj3jxj3jyjzj{uh1hhhhjJhNhNubj})}(h6**Definition**:: struct phylink { }; **Members**h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh:}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chK+hj7ubjU)}(hstruct phylink { };h]hstruct phylink { };}hjXsbah}(h]h ]h"]h$]h&]j<j=uh1jThZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chK-hj7ubjX)}(h **Members**h]j)}(hjih]hMembers}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chK0hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phylink_set_port_modes (C function)c.phylink_set_port_modeshNtauh1hhjJhhhNhNubh)}(hhh](h)}(h1void phylink_set_port_modes (unsigned long *mask)h]h)}(h0void phylink_set_port_modes(unsigned long *mask)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphylink_set_port_modesh]j%)}(hphylink_set_port_modesh]hphylink_set_port_modes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(unsigned long *mask)h]j)}(hunsigned long *maskh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hmaskh]hmask}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h+set the port type modes in the ethtool maskh]h+set the port type modes in the ethtool mask}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjHhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``unsigned long *mask`` ethtool link mode mask **Description** Sets all the port type modes in the ethtool mask. MAC drivers should use this in their 'validate' callback.h](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjgubj)}(hhh]j)}(h/``unsigned long *mask`` ethtool link mode mask h](j)}(h``unsigned long *mask``h]j)}(hjh]hunsigned long *mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubj)}(hhh]jX)}(hethtool link mode maskh]hethtool link mode mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjgubjX)}(hlSets all the port type modes in the ethtool mask. MAC drivers should use this in their 'validate' callback.h]hpSets all the port type modes in the ethtool mask. MAC drivers should use this in their ‘validate’ callback.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phylink_interface_max_speed (C function)c.phylink_interface_max_speedhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h;int phylink_interface_max_speed (phy_interface_t interface)h]h)}(h:int phylink_interface_max_speed(phy_interface_t interface)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhKubj)}(hphylink_interface_max_speedh]j%)}(hphylink_interface_max_speedh]hphylink_interface_max_speed}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj)ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhKubj)}(h(phy_interface_t interface)h]j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjNmodnameN classnameNjj!)}j$]j')}jj/sbc.phylink_interface_max_speedasbuh1hhjEubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj%)}(h interfaceh]h interface}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjAubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhKubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhKhjhhubjS)}(hhh]jX)}(h(get the maximum speed of a phy interfaceh]h(get the maximum speed of a phy interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhKubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hXe**Parameters** ``phy_interface_t interface`` phy interface mode defined by :c:type:`typedef phy_interface_t ` **Description** Determine the maximum speed of a phy interface. This is intended to help determine the correct speed to pass to the MAC when the phy is performing rate matching. **Return** The maximum speed of **interface**h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubj)}(hhh]j)}(hp``phy_interface_t interface`` phy interface mode defined by :c:type:`typedef phy_interface_t ` h](j)}(h``phy_interface_t interface``h]j)}(hjh]hphy_interface_t interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubj)}(hhh]jX)}(hQphy interface mode defined by :c:type:`typedef phy_interface_t `h](hphy interface mode defined by }(hjhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjh]htypedef phy_interface_t}(hj hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1jWhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj?h]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubjX)}(hDetermine the maximum speed of a phy interface. This is intended to help determine the correct speed to pass to the MAC when the phy is performing rate matching.h]hDetermine the maximum speed of a phy interface. This is intended to help determine the correct speed to pass to the MAC when the phy is performing rate matching.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubjX)}(h **Return**h]j)}(hjfh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubjX)}(h"The maximum speed of **interface**h](hThe maximum speed of }(hj|hhhNhNubj)}(h **interface**h]h interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phylink_caps_to_link_caps (C function)c.phylink_caps_to_link_capshNtauh1hhjJhhhNhNubh)}(hhh](h)}(hh]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(h linkmodesh]h linkmodes}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjjubj)}(hunsigned long capsh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj1hhhjChMlubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj-hhhjChMlubah}(h]j(ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjChMlhj*hhubjS)}(hhh]jX)}(h*Convert capabilities to ethtool link modesh]h*Convert capabilities to ethtool link modes}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMlhj/hhubah}(h]h ]h"]h$]h&]uh1jRhj*hhhjChMlubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhjJhNhNubj})}(hXG**Parameters** ``unsigned long *linkmodes`` ethtool linkmode mask (must be already initialised) ``unsigned long caps`` bitmask of MAC capabilities **Description** Set all possible pause, speed and duplex linkmodes in **linkmodes** that are supported by the **caps**. **linkmodes** must have been initialised previously.h](jX)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMphjNubj)}(hhh](j)}(hQ``unsigned long *linkmodes`` ethtool linkmode mask (must be already initialised) h](j)}(h``unsigned long *linkmodes``h]j)}(hjsh]hunsigned long *linkmodes}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMmhjmubj)}(hhh]jX)}(h3ethtool linkmode mask (must be already initialised)h]h3ethtool linkmode mask (must be already initialised)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMmhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMmhjjubj)}(h3``unsigned long caps`` bitmask of MAC capabilities h](j)}(h``unsigned long caps``h]j)}(hjh]hunsigned long caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMnhjubj)}(hhh]jX)}(hbitmask of MAC capabilitiesh]hbitmask of MAC capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMnhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMnhjjubeh}(h]h ]h"]h$]h&]uh1jhjNubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMphjNubjX)}(hSet all possible pause, speed and duplex linkmodes in **linkmodes** that are supported by the **caps**. **linkmodes** must have been initialised previously.h](h6Set all possible pause, speed and duplex linkmodes in }(hjhhhNhNubj)}(h **linkmodes**h]h linkmodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh that are supported by the }(hjhhhNhNubj)}(h**caps**h]hcaps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. }(hjhhhNhNubj)}(h **linkmodes**h]h linkmodes}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' must have been initialised previously.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMohjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_limit_mac_speed (C function)c.phylink_limit_mac_speedhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hKvoid phylink_limit_mac_speed (struct phylink_config *config, u32 max_speed)h]h)}(hJvoid phylink_limit_mac_speed(struct phylink_config *config, u32 max_speed)h](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhjphMubj)}(hphylink_limit_mac_speedh]j%)}(hphylink_limit_mac_speedh]hphylink_limit_mac_speed}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhjphMubj)}(h.(struct phylink_config *config, u32 max_speed)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phylink_limit_mac_speedasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h u32 max_speedh](h)}(hhh]j%)}(hu32h]hu32}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj modnameN classnameNjj!)}j$]jc.phylink_limit_mac_speedasbuh1hhj ubj)}(h h]h }(hj2 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(h max_speedh]h max_speed}(hj@ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhjphMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjZhhhjphMubah}(h]jUah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjphMhjWhhubjS)}(hhh]jX)}(h+limit the phylink_config to a maximum speedh]h+limit the phylink_config to a maximum speed}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjg hhubah}(h]h ]h"]h$]h&]uh1jRhjWhhhjphMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjJhNhNubj})}(hX=**Parameters** ``struct phylink_config *config`` pointer to a :c:type:`struct phylink_config ` ``u32 max_speed`` maximum speed **Description** Mask off MAC capabilities for speeds higher than the **max_speed** parameter. Any further motifications of config.mac_capabilities will override this.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh](j)}(h```struct phylink_config *config`` pointer to a :c:type:`struct phylink_config ` h](j)}(h!``struct phylink_config *config``h]j)}(hj h]hstruct phylink_config *config}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]jX)}(h=pointer to a :c:type:`struct phylink_config `h](h pointer to a }(hj hhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hj h]hstruct phylink_config}(hj hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h ``u32 max_speed`` maximum speed h](j)}(h``u32 max_speed``h]j)}(hj h]h u32 max_speed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]jX)}(h maximum speedh]h maximum speed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hj> h]h Description}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(hMask off MAC capabilities for speeds higher than the **max_speed** parameter. Any further motifications of config.mac_capabilities will override this.h](h5Mask off MAC capabilities for speeds higher than the }(hjT hhhNhNubj)}(h **max_speed**h]h max_speed}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubhT parameter. Any further motifications of config.mac_capabilities will override this.}(hjT hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*phylink_cap_from_speed_duplex (C function)c.phylink_cap_from_speed_duplexhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hLunsigned long phylink_cap_from_speed_duplex (int speed, unsigned int duplex)h]h)}(hKunsigned long phylink_cap_from_speed_duplex(int speed, unsigned int duplex)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hphylink_cap_from_speed_duplexh]j%)}(hphylink_cap_from_speed_duplexh]hphylink_cap_from_speed_duplex}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMubj)}(h (int speed, unsigned int duplex)h](j)}(h int speedh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hspeedh]hspeed}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hunsigned int duplexh](j)}(hunsignedh]hunsigned}(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(hinth]hint}(hj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjM hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(hduplexh]hduplex}(hj[ hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhj hhubjS)}(hhh]jX)}(h$Get mac capability from speed/duplexh]h$Get mac capability from speed/duplex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjJhNhNubj})}(hX!**Parameters** ``int speed`` the speed to search for ``unsigned int duplex`` the duplex to search for **Description** Find the mac capability for a given speed and duplex. **Return** A mask with the mac capability patching **speed** and **duplex**, or 0 if there were no matches.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh](j)}(h&``int speed`` the speed to search for h](j)}(h ``int speed``h]j)}(hj h]h int speed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]jX)}(hthe speed to search forh]hthe speed to search for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h1``unsigned int duplex`` the duplex to search for h](j)}(h``unsigned int duplex``h]j)}(hj h]hunsigned int duplex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]jX)}(hthe duplex to search forh]hthe duplex to search for}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hj: h]h Description}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h5Find the mac capability for a given speed and duplex.h]h5Find the mac capability for a given speed and duplex.}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h **Return**h]j)}(hja h]hReturn}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h`A mask with the mac capability patching **speed** and **duplex**, or 0 if there were no matches.h](h(A mask with the mac capability patching }(hjw hhhNhNubj)}(h **speed**h]hspeed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh and }(hjw hhhNhNubj)}(h **duplex**h]hduplex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubh , or 0 if there were no matches.}(hjw hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%phylink_get_capabilities (C function)c.phylink_get_capabilitieshNtauh1hhjJhhhNhNubh)}(hhh](h)}(huunsigned long phylink_get_capabilities (phy_interface_t interface, unsigned long mac_capabilities, int rate_matching)h]h)}(htunsigned long phylink_get_capabilities(phy_interface_t interface, unsigned long mac_capabilities, int rate_matching)h](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhj hMubj)}(hphylink_get_capabilitiesh]j%)}(hphylink_get_capabilitiesh]hphylink_get_capabilities}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhj hMubj)}(hN(phy_interface_t interface, unsigned long mac_capabilities, int rate_matching)h](j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hj& hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj# ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj( modnameN classnameNjj!)}j$]j')}jj sbc.phylink_get_capabilitiesasbuh1hhj ubj)}(h h]h }(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(h interfaceh]h interface}(hjT hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hunsigned long mac_capabilitiesh](j)}(hunsignedh]hunsigned}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubj)}(h h]h }(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hji ubj)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hji ubj%)}(hmac_capabilitiesh]hmac_capabilities}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hji ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubj)}(hint rate_matchingh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj%)}(h rate_matchingh]h rate_matching}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj hhhj hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj hMhj hhubjS)}(hhh]jX)}(h get capabilities for a given MACh]h get capabilities for a given MAC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hXt**Parameters** ``phy_interface_t interface`` phy interface mode defined by :c:type:`typedef phy_interface_t ` ``unsigned long mac_capabilities`` bitmask of MAC capabilities ``int rate_matching`` type of rate matching being performed **Description** Get the MAC capabilities that are supported by the **interface** mode and **mac_capabilities**.h](jX)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh](j)}(hp``phy_interface_t interface`` phy interface mode defined by :c:type:`typedef phy_interface_t ` h](j)}(h``phy_interface_t interface``h]j)}(hjEh]hphy_interface_t interface}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj?ubj)}(hhh]jX)}(hQphy interface mode defined by :c:type:`typedef phy_interface_t `h](hphy interface mode defined by }(hj^hhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjhh]htypedef phy_interface_t}(hjjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjZhMhj^ubeh}(h]h ]h"]h$]h&]uh1jWhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhMhj<ubj)}(h?``unsigned long mac_capabilities`` bitmask of MAC capabilities h](j)}(h"``unsigned long mac_capabilities``h]j)}(hjh]hunsigned long mac_capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]jX)}(hbitmask of MAC capabilitiesh]hbitmask of MAC capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubj)}(h<``int rate_matching`` type of rate matching being performed h](j)}(h``int rate_matching``h]j)}(hjh]hint rate_matching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]jX)}(h%type of rate matching being performedh]h%type of rate matching being performed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h_Get the MAC capabilities that are supported by the **interface** mode and **mac_capabilities**.h](h3Get the MAC capabilities that are supported by the }(hj'hhhNhNubj)}(h **interface**h]h interface}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh mode and }(hj'hhhNhNubj)}(h**mac_capabilities**h]hmac_capabilities}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_validate_mask_caps (C function)c.phylink_validate_mask_capshNtauh1hhjJhhhNhNubh)}(hhh](h)}(h|void phylink_validate_mask_caps (unsigned long *supported, struct phylink_link_state *state, unsigned long mac_capabilities)h]h)}(h{void phylink_validate_mask_caps(unsigned long *supported, struct phylink_link_state *state, unsigned long mac_capabilities)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjvhhhjhMubj)}(hphylink_validate_mask_capsh]j%)}(hphylink_validate_mask_capsh]hphylink_validate_mask_caps}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjvhhhjhMubj)}(h\(unsigned long *supported, struct phylink_link_state *state, unsigned long mac_capabilities)h](j)}(hunsigned long *supportedh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h supportedh]h supported}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h struct phylink_link_state *stateh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hj3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj5modnameN classnameNjj!)}j$]j')}jjsbc.phylink_validate_mask_capsasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjahhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstateh]hstate}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hunsigned long mac_capabilitiesh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hmac_capabilitiesh]hmac_capabilities}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjrhhhjhMubah}(h]jmah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjohhubjS)}(hhh]jX)}(h!Restrict link modes based on capsh]h!Restrict link modes based on caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjohhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``unsigned long *supported`` ethtool bitmask for supported link modes. ``struct phylink_link_state *state`` pointer to a :c:type:`struct phylink_link_state `. ``unsigned long mac_capabilities`` bitmask of MAC capabilities **Description** Calculate the supported link modes based on **mac_capabilities**, and restrict **supported** and **state** based on that. Use this function if your capabiliies aren't constant, such as if they vary depending on the interface.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh](j)}(hG``unsigned long *supported`` ethtool bitmask for supported link modes. h](j)}(h``unsigned long *supported``h]j)}(hj*h]hunsigned long *supported}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj$ubj)}(hhh]jX)}(h)ethtool bitmask for supported link modes.h]h)ethtool bitmask for supported link modes.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(hl``struct phylink_link_state *state`` pointer to a :c:type:`struct phylink_link_state `. h](j)}(h$``struct phylink_link_state *state``h]j)}(hjch]h struct phylink_link_state *state}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj]ubj)}(hhh]jX)}(hFpointer to a :c:type:`struct phylink_link_state `.h](h pointer to a }(hj|hhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hjh]hstruct phylink_link_state}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhjxhMhj|ubh.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubj)}(h?``unsigned long mac_capabilities`` bitmask of MAC capabilities h](j)}(h"``unsigned long mac_capabilities``h]j)}(hjh]hunsigned long mac_capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]jX)}(hbitmask of MAC capabilitiesh]hbitmask of MAC capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubjX)}(hCalculate the supported link modes based on **mac_capabilities**, and restrict **supported** and **state** based on that. Use this function if your capabiliies aren't constant, such as if they vary depending on the interface.h](h,Calculate the supported link modes based on }(hjhhhNhNubj)}(h**mac_capabilities**h]hmac_capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, and restrict }(hjhhhNhNubj)}(h **supported**h]h supported}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h **state**h]hstate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhy based on that. Use this function if your capabiliies aren’t constant, such as if they vary depending on the interface.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!phylink_pcs_neg_mode (C function)c.phylink_pcs_neg_modehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hvoid phylink_pcs_neg_mode (struct phylink *pl, struct phylink_pcs *pcs, phy_interface_t interface, const unsigned long *advertising)h]h)}(hvoid phylink_pcs_neg_mode(struct phylink *pl, struct phylink_pcs *pcs, phy_interface_t interface, const unsigned long *advertising)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM.ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjqhhhjhM.ubj)}(hphylink_pcs_neg_modeh]j%)}(hphylink_pcs_neg_modeh]hphylink_pcs_neg_mode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjqhhhjhM.ubj)}(hj(struct phylink *pl, struct phylink_pcs *pcs, phy_interface_t interface, const unsigned long *advertising)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylinkh]hphylink}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.phylink_pcs_neg_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplh]hpl}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj?ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjDmodnameN classnameNjj!)}j$]jc.phylink_pcs_neg_modeasbuh1hhj ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj;)}(hj>h]h*}(hjnhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj ubj%)}(hpcsh]hpcs}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phylink_pcs_neg_modeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(h interfaceh]h interface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h const unsigned long *advertisingh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(h advertisingh]h advertising}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjqhhhjhM.ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjmhhhjhM.ubah}(h]jhah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM.hjjhhubjS)}(hhh]jX)}(h#helper to determine PCS inband modeh]h#helper to determine PCS inband mode}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM.hjchhubah}(h]h ]h"]h$]h&]uh1jRhjjhhhjhM.ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj~jxj~jyjzj{uh1hhhhjJhNhNubj})}(hXt**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct phylink_pcs *pcs`` a pointer to :c:type:`struct phylink_pcs ` ``phy_interface_t interface`` interface mode to be used ``const unsigned long *advertising`` adertisement ethtool link mode mask **Description** Determines the negotiation mode to be used by the PCS, and returns one of: - ``PHYLINK_PCS_NEG_NONE``: interface mode does not support inband - ``PHYLINK_PCS_NEG_OUTBAND``: an out of band mode (e.g. reading the PHY) will be used. - ``PHYLINK_PCS_NEG_INBAND_DISABLED``: inband mode selected but autoneg disabled - ``PHYLINK_PCS_NEG_INBAND_ENABLED``: inband mode selected and autoneg enabled **Note** this is for cases where the PCS itself is involved in negotiation (e.g. Clause 37, SGMII and similar) not Clause 73.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM2hjubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjh]hstruct phylink *pl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM/hjubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjh]hstruct phylink}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjhM/hjubh returned from phylink_create()}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM/hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM/hjubj)}(hT``struct phylink_pcs *pcs`` a pointer to :c:type:`struct phylink_pcs ` h](j)}(h``struct phylink_pcs *pcs``h]j)}(hjh]hstruct phylink_pcs *pcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM0hjubj)}(hhh]jX)}(h7a pointer to :c:type:`struct phylink_pcs `h](h a pointer to }(hjhhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hj&h]hstruct phylink_pcs}(hj(hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhjhM0hjubeh}(h]h ]h"]h$]h&]uh1jWhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(h8``phy_interface_t interface`` interface mode to be used h](j)}(h``phy_interface_t interface``h]j)}(hj[h]hphy_interface_t interface}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM1hjUubj)}(hhh]jX)}(hinterface mode to be usedh]hinterface mode to be used}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjphM1hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM1hjubj)}(hI``const unsigned long *advertising`` adertisement ethtool link mode mask h](j)}(h$``const unsigned long *advertising``h]j)}(hjh]h const unsigned long *advertising}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM2hjubj)}(hhh]jX)}(h#adertisement ethtool link mode maskh]h#adertisement ethtool link mode mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhM2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM4hjubjX)}(hJDetermines the negotiation mode to be used by the PCS, and returns one of:h]hJDetermines the negotiation mode to be used by the PCS, and returns one of:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM3hjubj4H)}(hhh](j9H)}(h@``PHYLINK_PCS_NEG_NONE``: interface mode does not support inbandh]jX)}(hjh](j)}(h``PHYLINK_PCS_NEG_NONE``h]hPHYLINK_PCS_NEG_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh(: interface mode does not support inband}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM6hjubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hU``PHYLINK_PCS_NEG_OUTBAND``: an out of band mode (e.g. reading the PHY) will be used.h]jX)}(hU``PHYLINK_PCS_NEG_OUTBAND``: an out of band mode (e.g. reading the PHY) will be used.h](j)}(h``PHYLINK_PCS_NEG_OUTBAND``h]hPHYLINK_PCS_NEG_OUTBAND}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh:: an out of band mode (e.g. reading the PHY) will be used.}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM7hjubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hN``PHYLINK_PCS_NEG_INBAND_DISABLED``: inband mode selected but autoneg disabledh]jX)}(hN``PHYLINK_PCS_NEG_INBAND_DISABLED``: inband mode selected but autoneg disabledh](j)}(h#``PHYLINK_PCS_NEG_INBAND_DISABLED``h]hPHYLINK_PCS_NEG_INBAND_DISABLED}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh+: inband mode selected but autoneg disabled}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM9hjDubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(hM``PHYLINK_PCS_NEG_INBAND_ENABLED``: inband mode selected and autoneg enabled h]jX)}(hL``PHYLINK_PCS_NEG_INBAND_ENABLED``: inband mode selected and autoneg enabledh](j)}(h"``PHYLINK_PCS_NEG_INBAND_ENABLED``h]hPHYLINK_PCS_NEG_INBAND_ENABLED}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh*: inband mode selected and autoneg enabled}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM;hjkubah}(h]h ]h"]h$]h&]uh1j8Hhjubeh}(h]h ]h"]h$]h&]jIjw-uh1j3HhjhM6hjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM=hjubjX)}(htthis is for cases where the PCS itself is involved in negotiation (e.g. Clause 37, SGMII and similar) not Clause 73.h]htthis is for cases where the PCS itself is involved in negotiation (e.g. Clause 37, SGMII and similar) not Clause 73.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM>hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phylink_set_fixed_link (C function)c.phylink_set_fixed_linkhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hWint phylink_set_fixed_link (struct phylink *pl, const struct phylink_link_state *state)h]h)}(hVint phylink_set_fixed_link(struct phylink *pl, const struct phylink_link_state *state)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphylink_set_fixed_linkh]j%)}(hphylink_set_fixed_linkh]hphylink_set_fixed_link}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h<(struct phylink *pl, const struct phylink_link_state *state)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylinkh]hphylink}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jjsbc.phylink_set_fixed_linkasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hplh]hpl}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h&const struct phylink_link_state *stateh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jVc.phylink_set_fixed_linkasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hstateh]hstate}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hset the fixed linkh]hset the fixed link}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``const struct phylink_link_state *state`` a pointer to a struct phylink_link_state. **Description** This function is used when the link parameters are known and do not change, making it suitable for certain types of network connections. **Return** zero on success or negative error code.h](jX)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjFubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjkh]hstruct phylink *pl}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjeubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjh]hstruct phylink}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjhMhjubh returned from phylink_create()}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(hU``const struct phylink_link_state *state`` a pointer to a struct phylink_link_state. h](j)}(h*``const struct phylink_link_state *state``h]j)}(hjh]h&const struct phylink_link_state *state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]jX)}(h)a pointer to a struct phylink_link_state.h]h)a pointer to a struct phylink_link_state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjFubjX)}(hThis function is used when the link parameters are known and do not change, making it suitable for certain types of network connections.h]hThis function is used when the link parameters are known and do not change, making it suitable for certain types of network connections.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjFubjX)}(h **Return**h]j)}(hj)h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjFubjX)}(h'zero on success or negative error code.h]h'zero on success or negative error code.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_create (C function)c.phylink_createhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hstruct phylink * phylink_create (struct phylink_config *config, const struct fwnode_handle *fwnode, phy_interface_t iface, const struct phylink_mac_ops *mac_ops)h]h)}(hstruct phylink *phylink_create(struct phylink_config *config, const struct fwnode_handle *fwnode, phy_interface_t iface, const struct phylink_mac_ops *mac_ops)h](h)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM"ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj{hM"ubh)}(hhh]j%)}(hphylinkh]hphylink}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jphylink_createsbc.phylink_createasbuh1hhjjhhhj{hM"ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhj{hM"ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjjhhhj{hM"ubj)}(hphylink_createh]j%)}(hjh]hphylink_create}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjjhhhj{hM"ubj)}(h(struct phylink_config *config, const struct fwnode_handle *fwnode, phy_interface_t iface, const struct phylink_mac_ops *mac_ops)h](j)}(hstruct phylink_config *configh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hphylink_configh]hphylink_config}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phylink_createasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hconfigh]hconfig}(hj?hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h"const struct fwnode_handle *fwnodeh](h)}(hjh]hconst}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phylink_createasbuh1hhjTubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hfwnodeh]hfwnode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hphy_interface_t ifaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.phylink_createasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj%)}(hifaceh]hiface}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h%const struct phylink_mac_ops *mac_opsh](h)}(hjh]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(hphylink_mac_opsh]hphylink_mac_ops}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjfmodnameN classnameNjj!)}j$]jc.phylink_createasbuh1hhj'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hmac_opsh]hmac_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjjhhhj{hM"ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhj{hM"ubah}(h]jaah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hM"hjchhubjS)}(hhh]jX)}(hcreate a phylink instanceh]hcreate a phylink instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM"hjhhubah}(h]h ]h"]h$]h&]uh1jRhjchhhj{hM"ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hXr**Parameters** ``struct phylink_config *config`` a pointer to the target :c:type:`struct phylink_config ` ``const struct fwnode_handle *fwnode`` a pointer to a :c:type:`struct fwnode_handle ` describing the network interface ``phy_interface_t iface`` the desired link mode defined by :c:type:`typedef phy_interface_t ` ``const struct phylink_mac_ops *mac_ops`` a pointer to a :c:type:`struct phylink_mac_ops ` for the MAC. **Description** Create a new phylink instance, and parse the link parameters found in **np**. This will parse in-band modes, fixed-link or SFP configuration. **Note** the rtnl lock must not be held when calling this function. Returns a pointer to a :c:type:`struct phylink `, or an error-pointer value. Users must use IS_ERR() to check for errors from this function.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM&hjubj)}(hhh](j)}(hk``struct phylink_config *config`` a pointer to the target :c:type:`struct phylink_config ` h](j)}(h!``struct phylink_config *config``h]j)}(hjh]hstruct phylink_config *config}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM#hjubj)}(hhh]jX)}(hHa pointer to the target :c:type:`struct phylink_config `h](ha pointer to the target }(hj!hhhNhNubh)}(h0:c:type:`struct phylink_config `h]j)}(hj+h]hstruct phylink_config}(hj-hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_configuh1hhjhM#hj!ubeh}(h]h ]h"]h$]h&]uh1jWhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(h``const struct fwnode_handle *fwnode`` a pointer to a :c:type:`struct fwnode_handle ` describing the network interface h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hj`h]h"const struct fwnode_handle *fwnode}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM%hjZubj)}(hhh]jX)}(h^a pointer to a :c:type:`struct fwnode_handle ` describing the network interfaceh](ha pointer to a }(hjyhhhNhNubh)}(h.:c:type:`struct fwnode_handle `h]j)}(hjh]hstruct fwnode_handle}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj fwnode_handleuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM$hjyubh! describing the network interface}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM$hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhM%hjubj)}(ho``phy_interface_t iface`` the desired link mode defined by :c:type:`typedef phy_interface_t ` h](j)}(h``phy_interface_t iface``h]j)}(hjh]hphy_interface_t iface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM&hjubj)}(hhh]jX)}(hTthe desired link mode defined by :c:type:`typedef phy_interface_t `h](h!the desired link mode defined by }(hjhhhNhNubh)}(h3:c:type:`typedef phy_interface_t `h]j)}(hjh]htypedef phy_interface_t}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphy_interface_tuh1hhjhM&hjubeh}(h]h ]h"]h$]h&]uh1jWhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(hy``const struct phylink_mac_ops *mac_ops`` a pointer to a :c:type:`struct phylink_mac_ops ` for the MAC. h](j)}(h)``const struct phylink_mac_ops *mac_ops``h]j)}(hjh]h%const struct phylink_mac_ops *mac_ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM'hjubj)}(hhh]jX)}(hNa pointer to a :c:type:`struct phylink_mac_ops ` for the MAC.h](ha pointer to a }(hj.hhhNhNubh)}(h2:c:type:`struct phylink_mac_ops `h]j)}(hj8h]hstruct phylink_mac_ops}(hj:hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_mac_opsuh1hhj*hM'hj.ubh for the MAC.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj*hM'hj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hM'hjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjsh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM)hjubjX)}(hCreate a new phylink instance, and parse the link parameters found in **np**. This will parse in-band modes, fixed-link or SFP configuration.h](hFCreate a new phylink instance, and parse the link parameters found in }(hjhhhNhNubj)}(h**np**h]hnp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA. This will parse in-band modes, fixed-link or SFP configuration.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM(hjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM+hjubjX)}(h:the rtnl lock must not be held when calling this function.h]h:the rtnl lock must not be held when calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM,hjubjX)}(hReturns a pointer to a :c:type:`struct phylink `, or an error-pointer value. Users must use IS_ERR() to check for errors from this function.h](hReturns a pointer to a }(hjhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjh]hstruct phylink}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM.hjubh\, or an error-pointer value. Users must use IS_ERR() to check for errors from this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_destroy (C function)c.phylink_destroyhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h)void phylink_destroy (struct phylink *pl)h]h)}(h(void phylink_destroy(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj1hMubj)}(hphylink_destroyh]j%)}(hphylink_destroyh]hphylink_destroy}(hjDhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj1hMubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjFsbc.phylink_destroyasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj\ubj%)}(hplh]hpl}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjXubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj1hMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj1hMhjhhubjS)}(hhh]jX)}(h(cleanup and destroy the phylink instanceh]h(cleanup and destroy the phylink instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhj1hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjJhNhNubj})}(hXc**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Destroy a phylink instance. Any PHY that has been attached must have been cleaned up via phylink_disconnect_phy() prior to calling this function. **Note** the rtnl lock must not be held when calling this function.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj$h]hstruct phylink *pl}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj=hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjGh]hstruct phylink}(hjIhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj9hMhj=ubh returned from phylink_create()}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubjX)}(hDestroy a phylink instance. Any PHY that has been attached must have been cleaned up via phylink_disconnect_phy() prior to calling this function.h]hDestroy a phylink instance. Any PHY that has been attached must have been cleaned up via phylink_disconnect_phy() prior to calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubjX)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubjX)}(h:the rtnl lock must not be held when calling this function.h]h:the rtnl lock must not be held when calling this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phylink_expects_phy (C function)c.phylink_expects_phyhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h-bool phylink_expects_phy (struct phylink *pl)h]h)}(h,bool phylink_expects_phy(struct phylink *pl)h](j)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hphylink_expects_phyh]j%)}(hphylink_expects_phyh]hphylink_expects_phy}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj& ubj)}(h h]h }(hj7 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj& ubh)}(hhh]j%)}(hphylinkh]hphylink}(hjH hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjE ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjJ modnameN classnameNjj!)}j$]j')}jj sbc.phylink_expects_phyasbuh1hhj& ubj)}(h h]h }(hjh hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj& ubj;)}(hj>h]h*}(hjv hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj& ubj%)}(hplh]hpl}(hj hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj& ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj" ubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h1Determine if phylink expects a phy to be attachedh]h1Determine if phylink expects a phy to be attached}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj jxj jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** When using fixed-link mode, or in-band mode with 1000base-X or 2500base-X, no PHY is needed. Returns true if phylink will be expecting a PHY.h](jX)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj h]hstruct phylink *pl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj!hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj!h]hstruct phylink}(hj!hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj!hMhj!ubh returned from phylink_create()}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubjX)}(h**Description**h]j)}(hjL!h]h Description}(hjN!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ!ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h\When using fixed-link mode, or in-band mode with 1000base-X or 2500base-X, no PHY is needed.h]h\When using fixed-link mode, or in-band mode with 1000base-X or 2500base-X, no PHY is needed.}(hjb!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubjX)}(h0Returns true if phylink will be expecting a PHY.h]h0Returns true if phylink will be expecting a PHY.}(hjq!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phylink_connect_phy (C function)c.phylink_connect_phyhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hDint phylink_connect_phy (struct phylink *pl, struct phy_device *phy)h]h)}(hCint phylink_connect_phy(struct phylink *pl, struct phy_device *phy)h](j)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhj!hMubj)}(hphylink_connect_phyh]j%)}(hphylink_connect_phyh]hphylink_connect_phy}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj!hhhj!hMubj)}(h,(struct phylink *pl, struct phy_device *phy)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj!modnameN classnameNjj!)}j$]j')}jj!sbc.phylink_connect_phyasbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj;)}(hj>h]h*}(hj)"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj!ubj%)}(hplh]hpl}(hj6"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj!ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj!ubj)}(hstruct phy_device *phyh](h)}(hjh]hstruct}(hjO"hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjK"ubj)}(h h]h }(hj\"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK"ubh)}(hhh]j%)}(h phy_deviceh]h phy_device}(hjm"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjj"ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjo"modnameN classnameNjj!)}j$]j"c.phylink_connect_phyasbuh1hhjK"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK"ubj;)}(hj>h]h*}(hj"hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjK"ubj%)}(hphyh]hphy}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjK"ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj!ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj!hhhj!hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj!hhhj!hMubah}(h]j!ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj!hMhj!hhubjS)}(hhh]jX)}(h%connect a PHY to the phylink instanceh]h%connect a PHY to the phylink instance}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jRhj!hhhj!hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj"jxj"jyjzj{uh1hhhhjJhNhNubj})}(hXJ**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct phy_device *phy`` a pointer to a :c:type:`struct phy_device `. **Description** Connect **phy** to the phylink instance specified by **pl** by calling phy_attach_direct(). Configure the **phy** according to the MAC driver's capabilities, start the PHYLIB state machine and enable any interrupts that the PHY supports. This updates the phylink's ethtool supported and advertising link mode masks. Returns 0 on success or a negative errno.h](jX)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj#h]hstruct phylink *pl}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj #ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj*#hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj4#h]hstruct phylink}(hj6#hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj2#ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj&#hMhj*#ubh returned from phylink_create()}(hj*#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj&#hMhj'#ubah}(h]h ]h"]h$]h&]uh1jhj #ubeh}(h]h ]h"]h$]h&]uh1jhj&#hMhj#ubj)}(hT``struct phy_device *phy`` a pointer to a :c:type:`struct phy_device `. h](j)}(h``struct phy_device *phy``h]j)}(hjm#h]hstruct phy_device *phy}(hjo#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk#ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjg#ubj)}(hhh]jX)}(h8a pointer to a :c:type:`struct phy_device `.h](ha pointer to a }(hj#hhhNhNubh)}(h(:c:type:`struct phy_device `h]j)}(hj#h]hstruct phy_device}(hj#hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phy_deviceuh1hhj#hMhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjg#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubjX)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"ubjX)}(hConnect **phy** to the phylink instance specified by **pl** by calling phy_attach_direct(). Configure the **phy** according to the MAC driver's capabilities, start the PHYLIB state machine and enable any interrupts that the PHY supports.h](hConnect }(hj#hhhNhNubj)}(h**phy**h]hphy}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh& to the phylink instance specified by }(hj#hhhNhNubj)}(h**pl**h]hpl}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh/ by calling phy_attach_direct(). Configure the }(hj#hhhNhNubj)}(h**phy**h]hphy}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh~ according to the MAC driver’s capabilities, start the PHYLIB state machine and enable any interrupts that the PHY supports.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"ubjX)}(hMThis updates the phylink's ethtool supported and advertising link mode masks.h]hOThis updates the phylink’s ethtool supported and advertising link mode masks.}(hj&$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"ubjX)}(h)Returns 0 on success or a negative errno.h]h)Returns 0 on success or a negative errno.}(hj5$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phylink_of_phy_connect (C function)c.phylink_of_phy_connecthNtauh1hhjJhhhNhNubh)}(hhh](h)}(hRint phylink_of_phy_connect (struct phylink *pl, struct device_node *dn, u32 flags)h]h)}(hQint phylink_of_phy_connect(struct phylink *pl, struct device_node *dn, u32 flags)h](j)}(hinth]hint}(hjd$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`$hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjs$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`$hhhjr$hMubj)}(hphylink_of_phy_connecth]j%)}(hphylink_of_phy_connecth]hphylink_of_phy_connect}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj`$hhhjr$hMubj)}(h7(struct phylink *pl, struct device_node *dn, u32 flags)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j')}jj$sbc.phylink_of_phy_connectasbuh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubj;)}(hj>h]h*}(hj$hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj$ubj%)}(hplh]hpl}(hj$hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj$ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubj)}(hstruct device_node *dnh](h)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj%ubj)}(h h]h }(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubh)}(hhh]j%)}(h device_nodeh]h device_node}(hj1%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj3%modnameN classnameNjj!)}j$]j$c.phylink_of_phy_connectasbuh1hhj%ubj)}(h h]h }(hjO%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj;)}(hj>h]h*}(hj]%hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj%ubj%)}(hdnh]hdn}(hjj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubj)}(h u32 flagsh](h)}(hhh]j%)}(hu32h]hu32}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj%modnameN classnameNjj!)}j$]j$c.phylink_of_phy_connectasbuh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj%)}(hflagsh]hflags}(hj%hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj$ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj`$hhhjr$hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj\$hhhjr$hMubah}(h]jW$ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjr$hMhjY$hhubjS)}(hhh]jX)}(h)connect the PHY specified in the DT mode.h]h)connect the PHY specified in the DT mode.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj%hhubah}(h]h ]h"]h$]h&]uh1jRhjY$hhhjr$hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj%jxj%jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct device_node *dn`` a pointer to a :c:type:`struct device_node `. ``u32 flags`` PHY-specific flags to communicate to the PHY device driver **Description** Connect the phy specified in the device node **dn** to the phylink instance specified by **pl**. Actions specified in phylink_connect_phy() will be performed. Returns 0 on success or a negative errno.h](jX)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj%ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj&h]hstruct phylink *pl}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj&ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj6&hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj@&h]hstruct phylink}(hjB&hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj>&ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj2&hMhj6&ubh returned from phylink_create()}(hj6&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj2&hMhj3&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj2&hMhj&ubj)}(hV``struct device_node *dn`` a pointer to a :c:type:`struct device_node `. h](j)}(h``struct device_node *dn``h]j)}(hjy&h]hstruct device_node *dn}(hj{&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjs&ubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct device_node `.h](ha pointer to a }(hj&hhhNhNubh)}(h*:c:type:`struct device_node `h]j)}(hj&h]hstruct device_node}(hj&hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj device_nodeuh1hhj&hMhj&ubh.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhjs&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubj)}(hI``u32 flags`` PHY-specific flags to communicate to the PHY device driver h](j)}(h ``u32 flags``h]j)}(hj&h]h u32 flags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj&ubj)}(hhh]jX)}(h:PHY-specific flags to communicate to the PHY device driverh]h:PHY-specific flags to communicate to the PHY device driver}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj%ubjX)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj%ubjX)}(hConnect the phy specified in the device node **dn** to the phylink instance specified by **pl**. Actions specified in phylink_connect_phy() will be performed.h](h-Connect the phy specified in the device node }(hj&'hhhNhNubj)}(h**dn**h]hdn}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&'ubh& to the phylink instance specified by }(hj&'hhhNhNubj)}(h**pl**h]hpl}(hj@'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&'ubh?. Actions specified in phylink_connect_phy() will be performed.}(hj&'hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj%ubjX)}(h)Returns 0 on success or a negative errno.h]h)Returns 0 on success or a negative errno.}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_fwnode_phy_connect (C function)c.phylink_fwnode_phy_connecthNtauh1hhjJhhhNhNubh)}(hhh](h)}(hbint phylink_fwnode_phy_connect (struct phylink *pl, const struct fwnode_handle *fwnode, u32 flags)h]h)}(haint phylink_fwnode_phy_connect(struct phylink *pl, const struct fwnode_handle *fwnode, u32 flags)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhj'hMubj)}(hphylink_fwnode_phy_connecth]j%)}(hphylink_fwnode_phy_connecth]hphylink_fwnode_phy_connect}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'hhhj'hMubj)}(hC(struct phylink *pl, const struct fwnode_handle *fwnode, u32 flags)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj'hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'modnameN classnameNjj!)}j$]j')}jj'sbc.phylink_fwnode_phy_connectasbuh1hhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj'ubj%)}(hplh]hpl}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj'ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubj)}(h"const struct fwnode_handle *fwnodeh](h)}(hjh]hconst}(hj7(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3(ubj)}(h h]h }(hjD(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3(ubh)}(hjh]hstruct}(hjR(hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj3(ubj)}(h h]h }(hj_(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3(ubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjp(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjm(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjr(modnameN classnameNjj!)}j$]j'c.phylink_fwnode_phy_connectasbuh1hhj3(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3(ubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3(ubj%)}(hfwnodeh]hfwnode}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubj)}(h u32 flagsh](h)}(hhh]j%)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj(modnameN classnameNjj!)}j$]j'c.phylink_fwnode_phy_connectasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj%)}(hflagsh]hflags}(hj(hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj'ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'hhhj'hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj'hhhj'hMubah}(h]j{'ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj'hMhj}'hhubjS)}(hhh]jX)}(h(connect the PHY specified in the fwnode.h]h(connect the PHY specified in the fwnode.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jRhj}'hhhj'hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj3)jxj3)jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``const struct fwnode_handle *fwnode`` a pointer to a :c:type:`struct fwnode_handle `. ``u32 flags`` PHY-specific flags to communicate to the PHY device driver **Description** Connect the phy specified **fwnode** to the phylink instance specified by **pl**. Returns 0 on success or a negative errno.h](jX)}(h**Parameters**h]j)}(hj=)h]h Parameters}(hj?)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;)ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj7)ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj\)h]hstruct phylink *pl}(hj^)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjV)ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hju)hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj)h]hstruct phylink}(hj)hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj})ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjq)hMhju)ubh returned from phylink_create()}(hju)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjq)hMhjr)ubah}(h]h ]h"]h$]h&]uh1jhjV)ubeh}(h]h ]h"]h$]h&]uh1jhjq)hMhjS)ubj)}(hf``const struct fwnode_handle *fwnode`` a pointer to a :c:type:`struct fwnode_handle `. h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hj)h]h"const struct fwnode_handle *fwnode}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj)ubj)}(hhh]jX)}(h>a pointer to a :c:type:`struct fwnode_handle `.h](ha pointer to a }(hj)hhhNhNubh)}(h.:c:type:`struct fwnode_handle `h]j)}(hj)h]hstruct fwnode_handle}(hj)hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj fwnode_handleuh1hhj)hMhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMhjS)ubj)}(hI``u32 flags`` PHY-specific flags to communicate to the PHY device driver h](j)}(h ``u32 flags``h]j)}(hj*h]h u32 flags}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj*ubj)}(hhh]jX)}(h:PHY-specific flags to communicate to the PHY device driverh]h:PHY-specific flags to communicate to the PHY device driver}(hj-*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)*hMhj**ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj)*hMhjS)ubeh}(h]h ]h"]h$]h&]uh1jhj7)ubjX)}(h**Description**h]j)}(hjO*h]h Description}(hjQ*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM*ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj7)ubjX)}(hQConnect the phy specified **fwnode** to the phylink instance specified by **pl**.h](hConnect the phy specified }(hje*hhhNhNubj)}(h **fwnode**h]hfwnode}(hjm*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje*ubh& to the phylink instance specified by }(hje*hhhNhNubj)}(h**pl**h]hpl}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje*ubh.}(hje*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj7)ubjX)}(h)Returns 0 on success or a negative errno.h]h)Returns 0 on success or a negative errno.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj7)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phylink_disconnect_phy (C function)c.phylink_disconnect_phyhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h0void phylink_disconnect_phy (struct phylink *pl)h]h)}(h/void phylink_disconnect_phy(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhj*hM ubj)}(hphylink_disconnect_phyh]j%)}(hphylink_disconnect_phyh]hphylink_disconnect_phy}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj*hhhj*hM ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj"+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$+modnameN classnameNjj!)}j$]j')}jj*sbc.phylink_disconnect_phyasbuh1hhj+ubj)}(h h]h }(hjB+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+ubj;)}(hj>h]h*}(hjP+hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubj%)}(hplh]hpl}(hj]+hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj+ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*ubah}(h]h ]h"]h$]h&]j<j=uh1jhj*hhhj*hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj*hhhj*hM ubah}(h]j*ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj*hM hj*hhubjS)}(hhh]jX)}(h4disconnect any PHY attached to the phylink instance.h]h4disconnect any PHY attached to the phylink instance.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj+hhubah}(h]h ]h"]h$]h&]uh1jRhj*hhhj*hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj+jxj+jyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Disconnect any current PHY from the phylink instance described by **pl**.h](jX)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM" hj+ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj+h]hstruct phylink *pl}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj+ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj+hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj+h]hstruct phylink}(hj+hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj+hM hj+ubh returned from phylink_create()}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj+hM hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hM hj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubjX)}(h**Description**h]j)}(hj&,h]h Description}(hj(,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$,ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM" hj+ubjX)}(hIDisconnect any current PHY from the phylink instance described by **pl**.h](hBDisconnect any current PHY from the phylink instance described by }(hj<,hhhNhNubj)}(h**pl**h]hpl}(hjD,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<,ubh.}(hj<,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM! hj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_mac_change (C function)c.phylink_mac_changehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h5void phylink_mac_change (struct phylink *pl, bool up)h]h)}(h4void phylink_mac_change(struct phylink *pl, bool up)h](j)}(hvoidh]hvoid}(hj},hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy,hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMG ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjy,hhhj,hMG ubj)}(hphylink_mac_changeh]j%)}(hphylink_mac_changeh]hphylink_mac_change}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjy,hhhj,hMG ubj)}(h(struct phylink *pl, bool up)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj,hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj,modnameN classnameNjj!)}j$]j')}jj,sbc.phylink_mac_changeasbuh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj,ubj%)}(hplh]hpl}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj,ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubj)}(hbool uph](j)}(hjTh]hbool}(hj,-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(-ubj)}(h h]h }(hj9-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(-ubj%)}(huph]hup}(hjG-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj(-ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj,ubeh}(h]h ]h"]h$]h&]j<j=uh1jhjy,hhhj,hMG ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhju,hhhj,hMG ubah}(h]jp,ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj,hMG hjr,hhubjS)}(hhh]jX)}(h'notify phylink of a change in MAC stateh]h'notify phylink of a change in MAC state}(hjq-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMG hjn-hhubah}(h]h ]h"]h$]h&]uh1jRhjr,hhhj,hMG ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj-jxj-jyjzj{uh1hhhhjJhNhNubj})}(hXB**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``bool up`` indicates whether the link is currently up. **Description** The MAC driver should call this driver when the state of its link changes (eg, link failure, new negotiation results, etc.)h](jX)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMK hj-ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj-h]hstruct phylink *pl}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMH hj-ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj-hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj-h]hstruct phylink}(hj-hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj-hMH hj-ubh returned from phylink_create()}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj-hMH hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hMH hj-ubj)}(h8``bool up`` indicates whether the link is currently up. h](j)}(h ``bool up``h]j)}(hj.h]hbool up}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMI hj.ubj)}(hhh]jX)}(h+indicates whether the link is currently up.h]h+indicates whether the link is currently up.}(hj'.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#.hMI hj$.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj#.hMI hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubjX)}(h**Description**h]j)}(hjI.h]h Description}(hjK.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG.ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMK hj-ubjX)}(h{The MAC driver should call this driver when the state of its link changes (eg, link failure, new negotiation results, etc.)h]h{The MAC driver should call this driver when the state of its link changes (eg, link failure, new negotiation results, etc.)}(hj_.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMJ hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_pcs_change (C function)c.phylink_pcs_changehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h:void phylink_pcs_change (struct phylink_pcs *pcs, bool up)h]h)}(h9void phylink_pcs_change(struct phylink_pcs *pcs, bool up)h](j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMU ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.hhhj.hMU ubj)}(hphylink_pcs_changeh]j%)}(hphylink_pcs_changeh]hphylink_pcs_change}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj.hhhj.hMU ubj)}(h"(struct phylink_pcs *pcs, bool up)h](j)}(hstruct phylink_pcs *pcsh](h)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubh)}(hhh]j%)}(h phylink_pcsh]h phylink_pcs}(hj.hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj.modnameN classnameNjj!)}j$]j')}jj.sbc.phylink_pcs_changeasbuh1hhj.ubj)}(h h]h }(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.ubj%)}(hpcsh]hpcs}(hj$/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubj)}(hbool uph](j)}(hjTh]hbool}(hj=/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9/ubj)}(h h]h }(hjJ/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9/ubj%)}(huph]hup}(hjX/hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj9/ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj.ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj.hhhj.hMU ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj.hhhj.hMU ubah}(h]j.ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj.hMU hj.hhubjS)}(hhh]jX)}(h,notify phylink of a change to PCS link stateh]h,notify phylink of a change to PCS link state}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMU hj/hhubah}(h]h ]h"]h$]h&]uh1jRhj.hhhj.hMU ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_pcs *pcs`` pointer to :c:type:`struct phylink_pcs ` ``bool up`` indicates whether the link is currently up. **Description** The PCS driver should call this when the state of its link changes (e.g. link failure, new negotiation results, etc.) Note: it should not determine "up" by reading the BMSR. If in doubt about the link state at interrupt time, then pass true if pcs_get_state() returns the latched link-down state, otherwise pass false.h](jX)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMY hj/ubj)}(hhh](j)}(hR``struct phylink_pcs *pcs`` pointer to :c:type:`struct phylink_pcs ` h](j)}(h``struct phylink_pcs *pcs``h]j)}(hj/h]hstruct phylink_pcs *pcs}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMV hj/ubj)}(hhh]jX)}(h5pointer to :c:type:`struct phylink_pcs `h](h pointer to }(hj/hhhNhNubh)}(h*:c:type:`struct phylink_pcs `h]j)}(hj/h]hstruct phylink_pcs}(hj/hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj phylink_pcsuh1hhj/hMV hj/ubeh}(h]h ]h"]h$]h&]uh1jWhj/hMV hj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMV hj/ubj)}(h8``bool up`` indicates whether the link is currently up. h](j)}(h ``bool up``h]j)}(hj0h]hbool up}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMW hj0ubj)}(hhh]jX)}(h+indicates whether the link is currently up.h]h+indicates whether the link is currently up.}(hj40hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj00hMW hj10ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj00hMW hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/ubjX)}(h**Description**h]j)}(hjV0h]h Description}(hjX0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMY hj/ubjX)}(hX>The PCS driver should call this when the state of its link changes (e.g. link failure, new negotiation results, etc.) Note: it should not determine "up" by reading the BMSR. If in doubt about the link state at interrupt time, then pass true if pcs_get_state() returns the latched link-down state, otherwise pass false.h]hXBThe PCS driver should call this when the state of its link changes (e.g. link failure, new negotiation results, etc.) Note: it should not determine “up” by reading the BMSR. If in doubt about the link state at interrupt time, then pass true if pcs_get_state() returns the latched link-down state, otherwise pass false.}(hjl0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMX hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_start (C function)c.phylink_starthNtauh1hhjJhhhNhNubh)}(hhh](h)}(h'void phylink_start (struct phylink *pl)h]h)}(h&void phylink_start(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMr ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0hhhj0hMr ubj)}(h phylink_starth]j%)}(h phylink_starth]h phylink_start}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj0hhhj0hMr ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj0hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj0modnameN classnameNjj!)}j$]j')}jj0sbc.phylink_startasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj0ubj;)}(hj>h]h*}(hj$1hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj0ubj%)}(hplh]hpl}(hj11hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj0ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj0ubah}(h]h ]h"]h$]h&]j<j=uh1jhj0hhhj0hMr ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj0hhhj0hMr ubah}(h]j0ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj0hMr hj0hhubjS)}(hhh]jX)}(hstart a phylink instanceh]hstart a phylink instance}(hj[1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMr hjX1hhubah}(h]h ]h"]h$]h&]uh1jRhj0hhhj0hMr ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjs1jxjs1jyjzj{uh1hhhhjJhNhNubj})}(hX~**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Start the phylink instance specified by **pl**, configuring the MAC for the desired link mode(s) and negotiation style. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_open() method.h](jX)}(h**Parameters**h]j)}(hj}1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{1ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMv hjw1ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj1h]hstruct phylink *pl}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMs hj1ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj1hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj1h]hstruct phylink}(hj1hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj1hMs hj1ubh returned from phylink_create()}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj1hMs hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMs hj1ubah}(h]h ]h"]h$]h&]uh1jhjw1ubjX)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMu hjw1ubjX)}(hStart the phylink instance specified by **pl**, configuring the MAC for the desired link mode(s) and negotiation style. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_open() method.h](h(Start the phylink instance specified by }(hj2hhhNhNubj)}(h**pl**h]hpl}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh, configuring the MAC for the desired link mode(s) and negotiation style. This should be called from the network device driver’s }(hj2hhhNhNubh)}(h0:c:type:`struct net_device_ops `h]j)}(hj,2h]hstruct net_device_ops}(hj.2hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj*2ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjnet_device_opsuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMt hj2ubh ndo_open() method.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjI2hMt hjw1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_stop (C function)c.phylink_stophNtauh1hhjJhhhNhNubh)}(hhh](h)}(h&void phylink_stop (struct phylink *pl)h]h)}(h%void phylink_stop(struct phylink *pl)h](j)}(hvoidh]hvoid}(hjt2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp2hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjp2hhhj2hM ubj)}(h phylink_stoph]j%)}(h phylink_stoph]h phylink_stop}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjp2hhhj2hM ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj2hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj2modnameN classnameNjj!)}j$]j')}jj2sbc.phylink_stopasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj;)}(hj>h]h*}(hj2hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj2ubj%)}(hplh]hpl}(hj 3hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj2ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj2ubah}(h]h ]h"]h$]h&]j<j=uh1jhjp2hhhj2hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjl2hhhj2hM ubah}(h]jg2ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj2hM hji2hhubjS)}(hhh]jX)}(hstop a phylink instanceh]hstop a phylink instance}(hj43hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj13hhubah}(h]h ]h"]h$]h&]uh1jRhji2hhhj2hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjL3jxjL3jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Stop the phylink instance specified by **pl**. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_stop() method. The network device's carrier state should not be changed prior to calling this function. This will synchronously bring down the link if the link is not already down (in other words, it will trigger a mac_link_down() method call.)h](jX)}(h**Parameters**h]j)}(hjV3h]h Parameters}(hjX3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT3ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjP3ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hju3h]hstruct phylink *pl}(hjw3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjo3ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj3hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj3h]hstruct phylink}(hj3hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj3hM hj3ubh returned from phylink_create()}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhjo3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjl3ubah}(h]h ]h"]h$]h&]uh1jhjP3ubjX)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjP3ubjX)}(hXStop the phylink instance specified by **pl**. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_stop() method. The network device's carrier state should not be changed prior to calling this function.h](h'Stop the phylink instance specified by }(hj3hhhNhNubj)}(h**pl**h]hpl}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh;. This should be called from the network device driver’s }(hj3hhhNhNubh)}(h0:c:type:`struct net_device_ops `h]j)}(hj4h]hstruct net_device_ops}(hj4hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjnet_device_opsuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj3ubho ndo_stop() method. The network device’s carrier state should not be changed prior to calling this function.}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj"4hM hjP3ubjX)}(hThis will synchronously bring down the link if the link is not already down (in other words, it will trigger a mac_link_down() method call.)h]hThis will synchronously bring down the link if the link is not already down (in other words, it will trigger a mac_link_down() method call.)}(hj-4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjP3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phylink_rx_clk_stop_block (C function)c.phylink_rx_clk_stop_blockhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h3void phylink_rx_clk_stop_block (struct phylink *pl)h]h)}(h2void phylink_rx_clk_stop_block(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj\4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX4hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hjk4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjX4hhhjj4hM ubj)}(hphylink_rx_clk_stop_blockh]j%)}(hphylink_rx_clk_stop_blockh]hphylink_rx_clk_stop_block}(hj}4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjy4ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjX4hhhjj4hM ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj4modnameN classnameNjj!)}j$]j')}jj4sbc.phylink_rx_clk_stop_blockasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj4ubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj4ubj%)}(hplh]hpl}(hj4hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj4ubah}(h]h ]h"]h$]h&]j<j=uh1jhjX4hhhjj4hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjT4hhhjj4hM ubah}(h]jO4ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjj4hM hjQ4hhubjS)}(hhh]jX)}(h.block PHY ability to stop receive clock in LPIh]h.block PHY ability to stop receive clock in LPI}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj5hhubah}(h]h ]h"]h$]h&]uh1jRhjQ4hhhjj4hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj45jxj45jyjzj{uh1hhhhjJhNhNubj})}(hX\**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Disable the PHY's ability to stop the receive clock while the receive path is in EEE LPI state, until the number of calls to phylink_rx_clk_stop_block() are balanced by calls to phylink_rx_clk_stop_unblock().h](jX)}(h**Parameters**h]j)}(hj>5h]h Parameters}(hj@5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<5ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj85ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj]5h]hstruct phylink *pl}(hj_5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[5ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjW5ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjv5hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj5h]hstruct phylink}(hj5hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj~5ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjr5hM hjv5ubh returned from phylink_create()}(hjv5hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjr5hM hjs5ubah}(h]h ]h"]h$]h&]uh1jhjW5ubeh}(h]h ]h"]h$]h&]uh1jhjr5hM hjT5ubah}(h]h ]h"]h$]h&]uh1jhj85ubjX)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj85ubjX)}(hDisable the PHY's ability to stop the receive clock while the receive path is in EEE LPI state, until the number of calls to phylink_rx_clk_stop_block() are balanced by calls to phylink_rx_clk_stop_unblock().h]hDisable the PHY’s ability to stop the receive clock while the receive path is in EEE LPI state, until the number of calls to phylink_rx_clk_stop_block() are balanced by calls to phylink_rx_clk_stop_unblock().}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj85ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phylink_rx_clk_stop_unblock (C function)c.phylink_rx_clk_stop_unblockhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h5void phylink_rx_clk_stop_unblock (struct phylink *pl)h]h)}(h4void phylink_rx_clk_stop_unblock(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhj6hM ubj)}(hphylink_rx_clk_stop_unblockh]j%)}(hphylink_rx_clk_stop_unblockh]hphylink_rx_clk_stop_unblock}(hj!6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj6ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj5hhhj6hM ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj=6hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj96ubj)}(h h]h }(hjJ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj96ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj[6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjX6ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj]6modnameN classnameNjj!)}j$]j')}jj#6sbc.phylink_rx_clk_stop_unblockasbuh1hhj96ubj)}(h h]h }(hj{6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj96ubj;)}(hj>h]h*}(hj6hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj96ubj%)}(hplh]hpl}(hj6hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj96ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj56ubah}(h]h ]h"]h$]h&]j<j=uh1jhj5hhhj6hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj5hhhj6hM ubah}(h]j5ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj6hM hj5hhubjS)}(hhh]jX)}(h)unblock PHY ability to stop receive clockh]h)unblock PHY ability to stop receive clock}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj6hhubah}(h]h ]h"]h$]h&]uh1jRhj5hhhj6hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj6jxj6jyjzj{uh1hhhhjJhNhNubj})}(hX`**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** All calls to phylink_rx_clk_stop_block() must be balanced with a corresponding call to phylink_rx_clk_stop_unblock() to restore the PHYs ability to stop the receive clock when the receive path is in EEE LPI mode.h](jX)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj6ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj7h]hstruct phylink *pl}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj6ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj7hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj$7h]hstruct phylink}(hj&7hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj"7ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj7hM hj7ubh returned from phylink_create()}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj7hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubjX)}(h**Description**h]j)}(hj_7h]h Description}(hja7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]7ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj6ubjX)}(hAll calls to phylink_rx_clk_stop_block() must be balanced with a corresponding call to phylink_rx_clk_stop_unblock() to restore the PHYs ability to stop the receive clock when the receive path is in EEE LPI mode.h]hAll calls to phylink_rx_clk_stop_block() must be balanced with a corresponding call to phylink_rx_clk_stop_unblock() to restore the PHYs ability to stop the receive clock when the receive path is in EEE LPI mode.}(hju7hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_suspend (C function)c.phylink_suspendhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h7void phylink_suspend (struct phylink *pl, bool mac_wol)h]h)}(h6void phylink_suspend(struct phylink *pl, bool mac_wol)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM! ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7hhhj7hM! ubj)}(hphylink_suspendh]j%)}(hphylink_suspendh]hphylink_suspend}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj7hhhj7hM! ubj)}(h"(struct phylink *pl, bool mac_wol)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj7hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj8modnameN classnameNjj!)}j$]j')}jj7sbc.phylink_suspendasbuh1hhj7ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj7ubj;)}(hj>h]h*}(hj-8hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj7ubj%)}(hplh]hpl}(hj:8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubj)}(h bool mac_wolh](j)}(hjTh]hbool}(hjS8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO8ubj)}(h h]h }(hj`8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjO8ubj%)}(hmac_wolh]hmac_wol}(hjn8hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjO8ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj7ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj7hhhj7hM! ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj7hhhj7hM! ubah}(h]j7ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj7hM! hj7hhubjS)}(hhh]jX)}(h%handle a network device suspend eventh]h%handle a network device suspend event}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM! hj8hhubah}(h]h ]h"]h$]h&]uh1jRhj7hhhj7hM! ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1hhhhjJhNhNubj})}(hX **Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``bool mac_wol`` true if the MAC needs to receive packets for Wake-on-Lan **Description** Handle a network device suspend event. There are several cases: - If Wake-on-Lan is not active, we can bring down the link between the MAC and PHY by calling phylink_stop(). - If Wake-on-Lan is active, and being handled only by the PHY, we can also bring down the link between the MAC and PHY. - If Wake-on-Lan is active, but being handled by the MAC, the MAC still needs to receive packets, so we can not bring the link down. **Note** when phylink managed Wake-on-Lan is in use, **mac_wol** is ignored. (struct phylink_mac_ops.mac_set_wol populated.)h](jX)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM% hj8ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj8h]hstruct phylink *pl}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM" hj8ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj8hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj8h]hstruct phylink}(hj8hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj8hM" hj8ubh returned from phylink_create()}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj8hM" hj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hM" hj8ubj)}(hJ``bool mac_wol`` true if the MAC needs to receive packets for Wake-on-Lan h](j)}(h``bool mac_wol``h]j)}(hj59h]h bool mac_wol}(hj79hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj39ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM# hj/9ubj)}(hhh]jX)}(h8true if the MAC needs to receive packets for Wake-on-Lanh]h8true if the MAC needs to receive packets for Wake-on-Lan}(hjN9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjJ9hM# hjK9ubah}(h]h ]h"]h$]h&]uh1jhj/9ubeh}(h]h ]h"]h$]h&]uh1jhjJ9hM# hj8ubeh}(h]h ]h"]h$]h&]uh1jhj8ubjX)}(h**Description**h]j)}(hjp9h]h Description}(hjr9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn9ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM% hj8ubjX)}(h?Handle a network device suspend event. There are several cases:h]h?Handle a network device suspend event. There are several cases:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM$ hj8ubj4H)}(hhh](j9H)}(hkIf Wake-on-Lan is not active, we can bring down the link between the MAC and PHY by calling phylink_stop().h]jX)}(hkIf Wake-on-Lan is not active, we can bring down the link between the MAC and PHY by calling phylink_stop().h]hkIf Wake-on-Lan is not active, we can bring down the link between the MAC and PHY by calling phylink_stop().}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM& hj9ubah}(h]h ]h"]h$]h&]uh1j8Hhj9ubj9H)}(huIf Wake-on-Lan is active, and being handled only by the PHY, we can also bring down the link between the MAC and PHY.h]jX)}(huIf Wake-on-Lan is active, and being handled only by the PHY, we can also bring down the link between the MAC and PHY.h]huIf Wake-on-Lan is active, and being handled only by the PHY, we can also bring down the link between the MAC and PHY.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM( hj9ubah}(h]h ]h"]h$]h&]uh1j8Hhj9ubj9H)}(hIf Wake-on-Lan is active, but being handled by the MAC, the MAC still needs to receive packets, so we can not bring the link down. h]jX)}(hIf Wake-on-Lan is active, but being handled by the MAC, the MAC still needs to receive packets, so we can not bring the link down.h]hIf Wake-on-Lan is active, but being handled by the MAC, the MAC still needs to receive packets, so we can not bring the link down.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM* hj9ubah}(h]h ]h"]h$]h&]uh1j8Hhj9ubeh}(h]h ]h"]h$]h&]jIjw-uh1j3Hhj9hM& hj8ubjX)}(h**Note**h]j)}(hj9h]hNote}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM- hj8ubjX)}(hswhen phylink managed Wake-on-Lan is in use, **mac_wol** is ignored. (struct phylink_mac_ops.mac_set_wol populated.)h](h,when phylink managed Wake-on-Lan is in use, }(hj:hhhNhNubj)}(h **mac_wol**h]hmac_wol}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh< is ignored. (struct phylink_mac_ops.mac_set_wol populated.)}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM. hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#phylink_prepare_resume (C function)c.phylink_prepare_resumehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h0void phylink_prepare_resume (struct phylink *pl)h]h)}(h/void phylink_prepare_resume(struct phylink *pl)h](j)}(hvoidh]hvoid}(hjB:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>:hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMX ubj)}(h h]h }(hjQ:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>:hhhjP:hMX ubj)}(hphylink_prepare_resumeh]j%)}(hphylink_prepare_resumeh]hphylink_prepare_resume}(hjc:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj_:ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj>:hhhjP:hMX ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj{:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{:ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj:ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj:modnameN classnameNjj!)}j$]j')}jje:sbc.phylink_prepare_resumeasbuh1hhj{:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{:ubj;)}(hj>h]h*}(hj:hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj{:ubj%)}(hplh]hpl}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{:ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjw:ubah}(h]h ]h"]h$]h&]j<j=uh1jhj>:hhhjP:hMX ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj::hhhjP:hMX ubah}(h]j5:ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjP:hMX hj7:hhubjS)}(hhh]jX)}(h"prepare to resume a network deviceh]h"prepare to resume a network device}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMX hj:hhubah}(h]h ]h"]h$]h&]uh1jRhj7:hhhjP:hMX ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj;jxj;jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Optional, but if called must be called prior to phylink_resume(). Prepare to resume a network device, preparing the PHY as necessary.h](jX)}(h**Parameters**h]j)}(hj$;h]h Parameters}(hj&;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj";ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM\ hj;ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjC;h]hstruct phylink *pl}(hjE;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMY hj=;ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj\;hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjf;h]hstruct phylink}(hjh;hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjd;ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjX;hMY hj\;ubh returned from phylink_create()}(hj\;hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjX;hMY hjY;ubah}(h]h ]h"]h$]h&]uh1jhj=;ubeh}(h]h ]h"]h$]h&]uh1jhjX;hMY hj:;ubah}(h]h ]h"]h$]h&]uh1jhj;ubjX)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM[ hj;ubjX)}(hAOptional, but if called must be called prior to phylink_resume().h]hAOptional, but if called must be called prior to phylink_resume().}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMZ hj;ubjX)}(hCPrepare to resume a network device, preparing the PHY as necessary.h]hCPrepare to resume a network device, preparing the PHY as necessary.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM\ hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_resume (C function)c.phylink_resumehNtauh1hhjJhhhNhNubh)}(hhh](h)}(h(void phylink_resume (struct phylink *pl)h]h)}(h'void phylink_resume(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMq ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj;hhhj<hMq ubj)}(hphylink_resumeh]j%)}(hphylink_resumeh]hphylink_resume}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj<ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj;hhhj<hMq ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj2<hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj.<ubj)}(h h]h }(hj?<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.<ubh)}(hhh]j%)}(hphylinkh]hphylink}(hjP<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM<ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjR<modnameN classnameNjj!)}j$]j')}jj<sbc.phylink_resumeasbuh1hhj.<ubj)}(h h]h }(hjp<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.<ubj;)}(hj>h]h*}(hj~<hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj.<ubj%)}(hplh]hpl}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj.<ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj*<ubah}(h]h ]h"]h$]h&]j<j=uh1jhj;hhhj<hMq ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj;hhhj<hMq ubah}(h]j;ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj<hMq hj;hhubjS)}(hhh]jX)}(h$handle a network device resume eventh]h$handle a network device resume event}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMq hj<hhubah}(h]h ]h"]h$]h&]uh1jRhj;hhhj<hMq ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj<jxj<jyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Undo the effects of phylink_suspend(), returning the link to an operational state.h](jX)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMu hj<ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj<h]hstruct phylink *pl}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMr hj<ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj=hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj=h]hstruct phylink}(hj=hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj =hMr hj=ubh returned from phylink_create()}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj =hMr hj =ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj =hMr hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubjX)}(h**Description**h]j)}(hjT=h]h Description}(hjV=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR=ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMt hj<ubjX)}(hRUndo the effects of phylink_suspend(), returning the link to an operational state.h]hRUndo the effects of phylink_suspend(), returning the link to an operational state.}(hjj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMs hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_ethtool_get_wol (C function)c.phylink_ethtool_get_wolhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hNvoid phylink_ethtool_get_wol (struct phylink *pl, struct ethtool_wolinfo *wol)h]h)}(hMvoid phylink_ethtool_get_wol(struct phylink *pl, struct ethtool_wolinfo *wol)h](j)}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=hhhj=hM ubj)}(hphylink_ethtool_get_wolh]j%)}(hphylink_ethtool_get_wolh]hphylink_ethtool_get_wol}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj=hhhj=hM ubj)}(h1(struct phylink *pl, struct ethtool_wolinfo *wol)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubh)}(hhh]j%)}(hphylinkh]hphylink}(hj=hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj=modnameN classnameNjj!)}j$]j')}jj=sbc.phylink_ethtool_get_wolasbuh1hhj=ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=ubj;)}(hj>h]h*}(hj">hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj=ubj%)}(hplh]hpl}(hj/>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj=ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubj)}(hstruct ethtool_wolinfo *wolh](h)}(hjh]hstruct}(hjH>hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjD>ubj)}(h h]h }(hjU>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjD>ubh)}(hhh]j%)}(hethtool_wolinfoh]hethtool_wolinfo}(hjf>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjc>ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjh>modnameN classnameNjj!)}j$]j>c.phylink_ethtool_get_wolasbuh1hhjD>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjD>ubj;)}(hj>h]h*}(hj>hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjD>ubj%)}(hwolh]hwol}(hj>hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjD>ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj=ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj=hhhj=hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj=hhhj=hM ubah}(h]j=ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj=hM hj=hhubjS)}(hhh]jX)}(h*get the wake on lan parameters for the PHYh]h*get the wake on lan parameters for the PHY}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj>hhubah}(h]h ]h"]h$]h&]uh1jRhj=hhhj=hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_wolinfo *wol`` a pointer to :c:type:`struct ethtool_wolinfo ` to hold the read parameters **Description** Read the wake on lan parameters from the PHY attached to the phylink instance specified by **pl**. If no PHY is currently attached, report no support for wake on lan.h](jX)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj>ubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj ?h]hstruct phylink *pl}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj?ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj#?hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj-?h]hstruct phylink}(hj/?hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj+?ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj?hM hj#?ubh returned from phylink_create()}(hj#?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj?hM hj ?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM hj?ubj)}(h|``struct ethtool_wolinfo *wol`` a pointer to :c:type:`struct ethtool_wolinfo ` to hold the read parameters h](j)}(h``struct ethtool_wolinfo *wol``h]j)}(hjf?h]hstruct ethtool_wolinfo *wol}(hjh?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj`?ubj)}(hhh]jX)}(h[a pointer to :c:type:`struct ethtool_wolinfo ` to hold the read parametersh](h a pointer to }(hj?hhhNhNubh)}(h2:c:type:`struct ethtool_wolinfo `h]j)}(hj?h]hstruct ethtool_wolinfo}(hj?hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_wolinfouh1hhj{?hM hj?ubh to hold the read parameters}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj{?hM hj|?ubah}(h]h ]h"]h$]h&]uh1jhj`?ubeh}(h]h ]h"]h$]h&]uh1jhj{?hM hj?ubeh}(h]h ]h"]h$]h&]uh1jhj>ubjX)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj>ubjX)}(hRead the wake on lan parameters from the PHY attached to the phylink instance specified by **pl**. If no PHY is currently attached, report no support for wake on lan.h](h[Read the wake on lan parameters from the PHY attached to the phylink instance specified by }(hj?hhhNhNubj)}(h**pl**h]hpl}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubhE. If no PHY is currently attached, report no support for wake on lan.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_ethtool_set_wol (C function)c.phylink_ethtool_set_wolhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hMint phylink_ethtool_set_wol (struct phylink *pl, struct ethtool_wolinfo *wol)h]h)}(hLint phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj*@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhj)@hM ubj)}(hphylink_ethtool_set_wolh]j%)}(hphylink_ethtool_set_wolh]hphylink_ethtool_set_wol}(hj<@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj8@ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj@hhhj)@hM ubj)}(h1(struct phylink *pl, struct ethtool_wolinfo *wol)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjX@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjT@ubj)}(h h]h }(hje@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjT@ubh)}(hhh]j%)}(hphylinkh]hphylink}(hjv@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjs@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjx@modnameN classnameNjj!)}j$]j')}jj>@sbc.phylink_ethtool_set_wolasbuh1hhjT@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjT@ubj;)}(hj>h]h*}(hj@hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjT@ubj%)}(hplh]hpl}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjT@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjP@ubj)}(hstruct ethtool_wolinfo *wolh](h)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubh)}(hhh]j%)}(hethtool_wolinfoh]hethtool_wolinfo}(hj@hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj@modnameN classnameNjj!)}j$]j@c.phylink_ethtool_set_wolasbuh1hhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@ubj;)}(hj>h]h*}(hjAhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj@ubj%)}(hwolh]hwol}(hj!AhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj@ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjP@ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj@hhhj)@hM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj@hhhj)@hM ubah}(h]j@ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj)@hM hj@hhubjS)}(hhh]jX)}(hset wake on lan parametersh]hset wake on lan parameters}(hjKAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjHAhhubah}(h]h ]h"]h$]h&]uh1jRhj@hhhj)@hM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjcAjxjcAjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_wolinfo *wol`` a pointer to :c:type:`struct ethtool_wolinfo ` for the desired parameters **Description** Set the wake on lan parameters for the PHY attached to the phylink instance specified by **pl**. If no PHY is attached, returns ``EOPNOTSUPP`` error. Returns zero on success or negative errno code.h](jX)}(h**Parameters**h]j)}(hjmAh]h Parameters}(hjoAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkAubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjgAubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjAh]hstruct phylink *pl}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjAubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjAhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjAh]hstruct phylink}(hjAhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjAhM hjAubh returned from phylink_create()}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjAhM hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM hjAubj)}(h{``struct ethtool_wolinfo *wol`` a pointer to :c:type:`struct ethtool_wolinfo ` for the desired parameters h](j)}(h``struct ethtool_wolinfo *wol``h]j)}(hjAh]hstruct ethtool_wolinfo *wol}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjAubj)}(hhh]jX)}(hZa pointer to :c:type:`struct ethtool_wolinfo ` for the desired parametersh](h a pointer to }(hjBhhhNhNubh)}(h2:c:type:`struct ethtool_wolinfo `h]j)}(hj Bh]hstruct ethtool_wolinfo}(hj BhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj Bubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_wolinfouh1hhjAhM hjBubh for the desired parameters}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjAhM hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM hjAubeh}(h]h ]h"]h$]h&]uh1jhjgAubjX)}(h**Description**h]j)}(hjFBh]h Description}(hjHBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDBubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjgAubjX)}(hSet the wake on lan parameters for the PHY attached to the phylink instance specified by **pl**. If no PHY is attached, returns ``EOPNOTSUPP`` error.h](hYSet the wake on lan parameters for the PHY attached to the phylink instance specified by }(hj\BhhhNhNubj)}(h**pl**h]hpl}(hjdBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Bubh!. If no PHY is attached, returns }(hj\BhhhNhNubj)}(h``EOPNOTSUPP``h]h EOPNOTSUPP}(hjvBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Bubh error.}(hj\BhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjgAubjX)}(h/Returns zero on success or negative errno code.h]h/Returns zero on success or negative errno code.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjgAubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*phylink_ethtool_ksettings_get (C function)c.phylink_ethtool_ksettings_gethNtauh1hhjJhhhNhNubh)}(hhh](h)}(h[int phylink_ethtool_ksettings_get (struct phylink *pl, struct ethtool_link_ksettings *kset)h]h)}(hZint phylink_ethtool_ksettings_get(struct phylink *pl, struct ethtool_link_ksettings *kset)h](j)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMQ ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBhhhjBhMQ ubj)}(hphylink_ethtool_ksettings_geth]j%)}(hphylink_ethtool_ksettings_geth]hphylink_ethtool_ksettings_get}(hjBhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjBhhhjBhMQ ubj)}(h9(struct phylink *pl, struct ethtool_link_ksettings *kset)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjBubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubh)}(hhh]j%)}(hphylinkh]hphylink}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j')}jjBsbc.phylink_ethtool_ksettings_getasbuh1hhjBubj)}(h h]h }(hj9ChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjBubj;)}(hj>h]h*}(hjGChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjBubj%)}(hplh]hpl}(hjTChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjBubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubj)}(h#struct ethtool_link_ksettings *kseth](h)}(hjh]hstruct}(hjmChhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiCubj)}(h h]h }(hjzChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiCubh)}(hhh]j%)}(hethtool_link_ksettingsh]hethtool_link_ksettings}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjCubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjCmodnameN classnameNjj!)}j$]j5Cc.phylink_ethtool_ksettings_getasbuh1hhjiCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiCubj;)}(hj>h]h*}(hjChhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiCubj%)}(hkseth]hkset}(hjChhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiCubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjBubeh}(h]h ]h"]h$]h&]j<j=uh1jhjBhhhjBhMQ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjBhhhjBhMQ ubah}(h]jBah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjBhMQ hjBhhubjS)}(hhh]jX)}(hget the current link settingsh]hget the current link settings}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMQ hjChhubah}(h]h ]h"]h$]h&]uh1jRhjBhhhjBhMQ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjDjxjDjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_link_ksettings *kset`` a pointer to a :c:type:`struct ethtool_link_ksettings ` to hold link settings **Description** Read the current link settings for the phylink instance specified by **pl**. This will be the link settings read from the MAC, PHY or fixed link settings depending on the current negotiation mode.h](jX)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMU hj Dubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj/Dh]hstruct phylink *pl}(hj1DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Dubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMR hj)Dubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjHDhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjRDh]hstruct phylink}(hjTDhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjPDubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjDDhMR hjHDubh returned from phylink_create()}(hjHDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjDDhMR hjEDubah}(h]h ]h"]h$]h&]uh1jhj)Dubeh}(h]h ]h"]h$]h&]uh1jhjDDhMR hj&Dubj)}(h``struct ethtool_link_ksettings *kset`` a pointer to a :c:type:`struct ethtool_link_ksettings ` to hold link settings h](j)}(h'``struct ethtool_link_ksettings *kset``h]j)}(hjDh]h#struct ethtool_link_ksettings *kset}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMS hjDubj)}(hhh]jX)}(hea pointer to a :c:type:`struct ethtool_link_ksettings ` to hold link settingsh](ha pointer to a }(hjDhhhNhNubh)}(h@:c:type:`struct ethtool_link_ksettings `h]j)}(hjDh]hstruct ethtool_link_ksettings}(hjDhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_link_ksettingsuh1hhjDhMS hjDubh to hold link settings}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjDhMS hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMS hj&Dubeh}(h]h ]h"]h$]h&]uh1jhj DubjX)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMU hj DubjX)}(hRead the current link settings for the phylink instance specified by **pl**. This will be the link settings read from the MAC, PHY or fixed link settings depending on the current negotiation mode.h](hERead the current link settings for the phylink instance specified by }(hjDhhhNhNubj)}(h**pl**h]hpl}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubhy. This will be the link settings read from the MAC, PHY or fixed link settings depending on the current negotiation mode.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMT hj Dubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*phylink_ethtool_ksettings_set (C function)c.phylink_ethtool_ksettings_sethNtauh1hhjJhhhNhNubh)}(hhh](h)}(haint phylink_ethtool_ksettings_set (struct phylink *pl, const struct ethtool_link_ksettings *kset)h]h)}(h`int phylink_ethtool_ksettings_set(struct phylink *pl, const struct ethtool_link_ksettings *kset)h](j)}(hinth]hint}(hj@EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh]h*}(hjEhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyEubj%)}(hplh]hpl}(hjEhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuEubj)}(h)const struct ethtool_link_ksettings *kseth](h)}(hjh]hconst}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hjh]hstruct}(hj FhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjEubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubh)}(hhh]j%)}(hethtool_link_ksettingsh]hethtool_link_ksettings}(hj(FhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj%Fubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj*FmodnameN classnameNjj!)}j$]jEc.phylink_ethtool_ksettings_setasbuh1hhjEubj)}(h h]h }(hjFFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjEubj;)}(hj>h]h*}(hjTFhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjEubj%)}(hkseth]hkset}(hjaFhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjEubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjuEubeh}(h]h ]h"]h$]h&]j<j=uh1jhj` returned from phylink_create() ``const struct ethtool_link_ksettings *kset`` a pointer to a :c:type:`struct ethtool_link_ksettings ` for the desired modesh](jX)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjFubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjFh]hstruct phylink *pl}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjFubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjFhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjFh]hstruct phylink}(hjFhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjFhM hjFubh returned from phylink_create()}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhM hjFubj)}(h``const struct ethtool_link_ksettings *kset`` a pointer to a :c:type:`struct ethtool_link_ksettings ` for the desired modesh](j)}(h-``const struct ethtool_link_ksettings *kset``h]j)}(hj(Gh]h)const struct ethtool_link_ksettings *kset}(hj*GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Gubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj"Gubj)}(hhh]jX)}(hea pointer to a :c:type:`struct ethtool_link_ksettings ` for the desired modesh](ha pointer to a }(hjAGhhhNhNubh)}(h@:c:type:`struct ethtool_link_ksettings `h]j)}(hjKGh]hstruct ethtool_link_ksettings}(hjMGhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjIGubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_link_ksettingsuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjAGubh for the desired modes}(hjAGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhGhM hj>Gubah}(h]h ]h"]h$]h&]uh1jhj"Gubeh}(h]h ]h"]h$]h&]uh1jhj=GhM hjFubeh}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_ethtool_nway_reset (C function)c.phylink_ethtool_nway_resethNtauh1hhjJhhhNhNubh)}(hhh](h)}(h3int phylink_ethtool_nway_reset (struct phylink *pl)h]h)}(h2int phylink_ethtool_nway_reset(struct phylink *pl)h](j)}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chME ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGhhhjGhME ubj)}(hphylink_ethtool_nway_reseth]j%)}(hphylink_ethtool_nway_reseth]hphylink_ethtool_nway_reset}(hjGhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjGhhhjGhME ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjGubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubh)}(hhh]j%)}(hphylinkh]hphylink}(hjHhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjHmodnameN classnameNjj!)}j$]j')}jjGsbc.phylink_ethtool_nway_resetasbuh1hhjGubj)}(h h]h }(hj HhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjGubj;)}(hj>h]h*}(hj.HhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjGubj%)}(hplh]hpl}(hj;HhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjGubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjGubah}(h]h ]h"]h$]h&]j<j=uh1jhjGhhhjGhME ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGhhhjGhME ubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjGhME hjGhhubjS)}(hhh]jX)}(hrestart negotiationh]hrestart negotiation}(hjeHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chME hjbHhhubah}(h]h ]h"]h$]h&]uh1jRhjGhhhjGhME ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj}Hjxj}Hjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Restart negotiation for the phylink instance specified by **pl**. This will cause any attached phy to restart negotiation with the link partner, and if the MAC is in a BaseX mode, the MAC will also be requested to restart negotiation. Returns zero on success, or negative error code.h](jX)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMI hjHubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjHh]hstruct phylink *pl}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMF hjHubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjHhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjHh]hstruct phylink}(hjHhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjHhMF hjHubh returned from phylink_create()}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjHhMF hjHubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMF hjHubah}(h]h ]h"]h$]h&]uh1jhjHubjX)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMH hjHubjX)}(hRestart negotiation for the phylink instance specified by **pl**. This will cause any attached phy to restart negotiation with the link partner, and if the MAC is in a BaseX mode, the MAC will also be requested to restart negotiation.h](h:Restart negotiation for the phylink instance specified by }(hjIhhhNhNubj)}(h**pl**h]hpl}(hj"IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh. This will cause any attached phy to restart negotiation with the link partner, and if the MAC is in a BaseX mode, the MAC will also be requested to restart negotiation.}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMG hjHubjX)}(h0Returns zero on success, or negative error code.h]h0Returns zero on success, or negative error code.}(hj;IhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chML hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+phylink_ethtool_get_pauseparam (C function) c.phylink_ethtool_get_pauseparamhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hZvoid phylink_ethtool_get_pauseparam (struct phylink *pl, struct ethtool_pauseparam *pause)h]h)}(hYvoid phylink_ethtool_get_pauseparam(struct phylink *pl, struct ethtool_pauseparam *pause)h](j)}(hvoidh]hvoid}(hjjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfIhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM^ ubj)}(h h]h }(hjyIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfIhhhjxIhM^ ubj)}(hphylink_ethtool_get_pauseparamh]j%)}(hphylink_ethtool_get_pauseparamh]hphylink_ethtool_get_pauseparam}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfIhhhjxIhM^ ubj)}(h6(struct phylink *pl, struct ethtool_pauseparam *pause)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubh)}(hhh]j%)}(hphylinkh]hphylink}(hjIhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjImodnameN classnameNjj!)}j$]j')}jjIsb c.phylink_ethtool_get_pauseparamasbuh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjIubj;)}(hj>h]h*}(hjIhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjIubj%)}(hplh]hpl}(hjJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjIubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubj)}(h struct ethtool_pauseparam *pauseh](h)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjJubj)}(h h]h }(hj&JhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubh)}(hhh]j%)}(hethtool_pauseparamh]hethtool_pauseparam}(hj7JhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj4Jubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj9JmodnameN classnameNjj!)}j$]jI c.phylink_ethtool_get_pauseparamasbuh1hhjJubj)}(h h]h }(hjUJhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjJubj;)}(hj>h]h*}(hjcJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjJubj%)}(hpauseh]hpause}(hjpJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjJubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjIubeh}(h]h ]h"]h$]h&]j<j=uh1jhjfIhhhjxIhM^ ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjbIhhhjxIhM^ ubah}(h]j]Iah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjxIhM^ hj_IhhubjS)}(hhh]jX)}(h get the current pause parametersh]h get the current pause parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM^ hjJhhubah}(h]h ]h"]h$]h&]uh1jRhj_IhhhjxIhM^ ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjJjxjJjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_pauseparam *pause`` a pointer to a :c:type:`struct ethtool_pauseparam `h](jX)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMb hjJubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjJh]hstruct phylink *pl}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM_ hjJubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjJhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjJh]hstruct phylink}(hjKhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjJhM_ hjJubh returned from phylink_create()}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjJhM_ hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM_ hjJubj)}(hl``struct ethtool_pauseparam *pause`` a pointer to a :c:type:`struct ethtool_pauseparam `h](j)}(h$``struct ethtool_pauseparam *pause``h]j)}(hj7Kh]h struct ethtool_pauseparam *pause}(hj9KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Kubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMa hj1Kubj)}(hhh]jX)}(hGa pointer to a :c:type:`struct ethtool_pauseparam `h](ha pointer to a }(hjPKhhhNhNubh)}(h8:c:type:`struct ethtool_pauseparam `h]j)}(hjZKh]hstruct ethtool_pauseparam}(hj\KhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjXKubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_pauseparamuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM` hjPKubeh}(h]h ]h"]h$]h&]uh1jWhjwKhM` hjMKubah}(h]h ]h"]h$]h&]uh1jhj1Kubeh}(h]h ]h"]h$]h&]uh1jhjLKhMa hjJubeh}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+phylink_ethtool_set_pauseparam (C function) c.phylink_ethtool_set_pauseparamhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hYint phylink_ethtool_set_pauseparam (struct phylink *pl, struct ethtool_pauseparam *pause)h]h)}(hXint phylink_ethtool_set_pauseparam(struct phylink *pl, struct ethtool_pauseparam *pause)h](j)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMn ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKhhhjKhMn ubj)}(hphylink_ethtool_set_pauseparamh]j%)}(hphylink_ethtool_set_pauseparamh]hphylink_ethtool_set_pauseparam}(hjKhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKhhhjKhMn ubj)}(h6(struct phylink *pl, struct ethtool_pauseparam *pause)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjKubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubh)}(hhh]j%)}(hphylinkh]hphylink}(hj LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj LmodnameN classnameNjj!)}j$]j')}jjKsb c.phylink_ethtool_set_pauseparamasbuh1hhjKubj)}(h h]h }(hj+LhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKubj;)}(hj>h]h*}(hj9LhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjKubj%)}(hplh]hpl}(hjFLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjKubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubj)}(h struct ethtool_pauseparam *pauseh](h)}(hjh]hstruct}(hj_LhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj[Lubj)}(h h]h }(hjlLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Lubh)}(hhh]j%)}(hethtool_pauseparamh]hethtool_pauseparam}(hj}LhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzLubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjLmodnameN classnameNjj!)}j$]j'L c.phylink_ethtool_set_pauseparamasbuh1hhj[Lubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[Lubj;)}(hj>h]h*}(hjLhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj[Lubj%)}(hpauseh]hpause}(hjLhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj[Lubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjKubeh}(h]h ]h"]h$]h&]j<j=uh1jhjKhhhjKhMn ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjKhhhjKhMn ubah}(h]jKah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjKhMn hjKhhubjS)}(hhh]jX)}(h set the current pause parametersh]h set the current pause parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMn hjLhhubah}(h]h ]h"]h$]h&]uh1jRhjKhhhjKhMn ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjLjxjLjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_pauseparam *pause`` a pointer to a :c:type:`struct ethtool_pauseparam `h](jX)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMr hjLubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj!Mh]hstruct phylink *pl}(hj#MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMo hjMubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hj:MhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjDMh]hstruct phylink}(hjFMhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjBMubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj6MhMo hj:Mubh returned from phylink_create()}(hj:MhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj6MhMo hj7Mubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhj6MhMo hjMubj)}(hl``struct ethtool_pauseparam *pause`` a pointer to a :c:type:`struct ethtool_pauseparam `h](j)}(h$``struct ethtool_pauseparam *pause``h]j)}(hj}Mh]h struct ethtool_pauseparam *pause}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Mubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMq hjwMubj)}(hhh]jX)}(hGa pointer to a :c:type:`struct ethtool_pauseparam `h](ha pointer to a }(hjMhhhNhNubh)}(h8:c:type:`struct ethtool_pauseparam `h]j)}(hjMh]hstruct ethtool_pauseparam}(hjMhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_pauseparamuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMp hjMubeh}(h]h ]h"]h$]h&]uh1jWhjMhMp hjMubah}(h]h ]h"]h$]h&]uh1jhjwMubeh}(h]h ]h"]h$]h&]uh1jhjMhMq hjMubeh}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h phylink_get_eee_err (C function)c.phylink_get_eee_errhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h,int phylink_get_eee_err (struct phylink *pl)h]h)}(h+int phylink_get_eee_err(struct phylink *pl)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjMhhhjNhM ubj)}(hphylink_get_eee_errh]j%)}(hphylink_get_eee_errh]hphylink_get_eee_err}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjMhhhjNhM ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hj3NhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj/Nubj)}(h h]h }(hj@NhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Nubh)}(hhh]j%)}(hphylinkh]hphylink}(hjQNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjNNubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjSNmodnameN classnameNjj!)}j$]j')}jjNsbc.phylink_get_eee_errasbuh1hhj/Nubj)}(h h]h }(hjqNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/Nubj;)}(hj>h]h*}(hjNhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj/Nubj%)}(hplh]hpl}(hjNhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/Nubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj+Nubah}(h]h ]h"]h$]h&]j<j=uh1jhjMhhhjNhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjMhhhjNhM ubah}(h]jMah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjNhM hjMhhubjS)}(hhh]jX)}(h0read the energy efficient ethernet error counterh]h0read the energy efficient ethernet error counter}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNhhubah}(h]h ]h"]h$]h&]uh1jRhjMhhhjNhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjNjxjNjyjzj{uh1hhhhjJhNhNubj})}(hXC**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create(). **Description** Read the Energy Efficient Ethernet error counter from the PHY associated with the phylink instance specified by **pl**. Returns positive error counter value, or negative error code.h](jX)}(h**Parameters**h]j)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNubj)}(hhh]j)}(hi``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create(). h](j)}(h``struct phylink *pl``h]j)}(hjNh]hstruct phylink *pl}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNubj)}(hhh]jX)}(hQa pointer to a :c:type:`struct phylink ` returned from phylink_create().h](ha pointer to a }(hjOhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjOh]hstruct phylink}(hjOhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj OhM hjOubh returned from phylink_create().}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj OhM hj Oubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhj OhM hjNubah}(h]h ]h"]h$]h&]uh1jhjNubjX)}(h**Description**h]j)}(hjUOh]h Description}(hjWOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSOubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNubjX)}(hwRead the Energy Efficient Ethernet error counter from the PHY associated with the phylink instance specified by **pl**.h](hpRead the Energy Efficient Ethernet error counter from the PHY associated with the phylink instance specified by }(hjkOhhhNhNubj)}(h**pl**h]hpl}(hjsOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkOubh.}(hjkOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNubjX)}(h=Returns positive error counter value, or negative error code.h]h=Returns positive error counter value, or negative error code.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjNubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_ethtool_get_eee (C function)c.phylink_ethtool_get_eeehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hJint phylink_ethtool_get_eee (struct phylink *pl, struct ethtool_keee *eee)h]h)}(hIint phylink_ethtool_get_eee(struct phylink *pl, struct ethtool_keee *eee)h](j)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhjOhM ubj)}(hphylink_ethtool_get_eeeh]j%)}(hphylink_ethtool_get_eeeh]hphylink_ethtool_get_eee}(hjOhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOhhhjOhM ubj)}(h.(struct phylink *pl, struct ethtool_keee *eee)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(hphylinkh]hphylink}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j')}jjOsbc.phylink_ethtool_get_eeeasbuh1hhjOubj)}(h h]h }(hj6PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjDPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hplh]hpl}(hjQPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubj)}(hstruct ethtool_keee *eeeh](h)}(hjh]hstruct}(hjjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjfPubj)}(h h]h }(hjwPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfPubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjPubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjPmodnameN classnameNjj!)}j$]j2Pc.phylink_ethtool_get_eeeasbuh1hhjfPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfPubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjfPubj%)}(heeeh]heee}(hjPhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfPubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjOubeh}(h]h ]h"]h$]h&]j<j=uh1jhjOhhhjOhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjOhhhjOhM ubah}(h]jOah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjOhM hjOhhubjS)}(hhh]jX)}(h-read the energy efficient ethernet parametersh]h-read the energy efficient ethernet parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjPhhubah}(h]h ]h"]h$]h&]uh1jRhjOhhhjOhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjQjxjQjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_keee *eee`` a pointer to a :c:type:`struct ethtool_keee ` for the read parametersh](jX)}(h**Parameters**h]j)}(hj Qh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Qubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjQubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj,Qh]hstruct phylink *pl}(hj.QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Qubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj&Qubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjEQhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjOQh]hstruct phylink}(hjQQhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjMQubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjAQhM hjEQubh returned from phylink_create()}(hjEQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjAQhM hjBQubah}(h]h ]h"]h$]h&]uh1jhj&Qubeh}(h]h ]h"]h$]h&]uh1jhjAQhM hj#Qubj)}(hp``struct ethtool_keee *eee`` a pointer to a :c:type:`struct ethtool_keee ` for the read parametersh](j)}(h``struct ethtool_keee *eee``h]j)}(hjQh]hstruct ethtool_keee *eee}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjQubj)}(hhh]jX)}(hSa pointer to a :c:type:`struct ethtool_keee ` for the read parametersh](ha pointer to a }(hjQhhhNhNubh)}(h,:c:type:`struct ethtool_keee `h]j)}(hjQh]hstruct ethtool_keee}(hjQhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj ethtool_keeeuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjQubh for the read parameters}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hj#Qubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_ethtool_set_eee (C function)c.phylink_ethtool_set_eeehNtauh1hhjJhhhNhNubh)}(hhh](h)}(hJint phylink_ethtool_set_eee (struct phylink *pl, struct ethtool_keee *eee)h]h)}(hIint phylink_ethtool_set_eee(struct phylink *pl, struct ethtool_keee *eee)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRhhhjRhM ubj)}(hphylink_ethtool_set_eeeh]j%)}(hphylink_ethtool_set_eeeh]hphylink_ethtool_set_eee}(hj&RhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"Rubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjRhhhjRhM ubj)}(h.(struct phylink *pl, struct ethtool_keee *eee)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjBRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj>Rubj)}(h h]h }(hjORhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>Rubh)}(hhh]j%)}(hphylinkh]hphylink}(hj`RhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]Rubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjbRmodnameN classnameNjj!)}j$]j')}jj(Rsbc.phylink_ethtool_set_eeeasbuh1hhj>Rubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>Rubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj>Rubj%)}(hplh]hpl}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj>Rubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:Rubj)}(hstruct ethtool_keee *eeeh](h)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(hhh]j%)}(h ethtool_keeeh]h ethtool_keee}(hjRhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjRmodnameN classnameNjj!)}j$]j|Rc.phylink_ethtool_set_eeeasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubj;)}(hj>h]h*}(hjRhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjRubj%)}(heeeh]heee}(hj ShhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjRubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj:Rubeh}(h]h ]h"]h$]h&]j<j=uh1jhjRhhhjRhM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjQhhhjRhM ubah}(h]jQah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjRhM hjQhhubjS)}(hhh]jX)}(h,set the energy efficient ethernet parametersh]h,set the energy efficient ethernet parameters}(hj5ShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj2Shhubah}(h]h ]h"]h$]h&]uh1jRhjQhhhjRhM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMSjxjMSjyjzj{uh1hhhhjJhNhNubj})}(h**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ethtool_keee *eee`` a pointer to a :c:type:`struct ethtool_keee ` for the desired parametersh](jX)}(h**Parameters**h]j)}(hjWSh]h Parameters}(hjYShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUSubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjQSubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjvSh]hstruct phylink *pl}(hjxShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjpSubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjShhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjSh]hstruct phylink}(hjShhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjShM hjSubh returned from phylink_create()}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjShM hjSubah}(h]h ]h"]h$]h&]uh1jhjpSubeh}(h]h ]h"]h$]h&]uh1jhjShM hjmSubj)}(hs``struct ethtool_keee *eee`` a pointer to a :c:type:`struct ethtool_keee ` for the desired parametersh](j)}(h``struct ethtool_keee *eee``h]j)}(hjSh]hstruct ethtool_keee *eee}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjSubj)}(hhh]jX)}(hVa pointer to a :c:type:`struct ethtool_keee ` for the desired parametersh](ha pointer to a }(hjShhhNhNubh)}(h,:c:type:`struct ethtool_keee `h]j)}(hjSh]hstruct ethtool_keee}(hjShhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj ethtool_keeeuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjSubh for the desired parameters}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjThM hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM hjmSubeh}(h]h ]h"]h$]h&]uh1jhjQSubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_mii_ioctl (C function)c.phylink_mii_ioctlhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hFint phylink_mii_ioctl (struct phylink *pl, struct ifreq *ifr, int cmd)h]h)}(hEint phylink_mii_ioctl(struct phylink *pl, struct ifreq *ifr, int cmd)h](j)}(hinth]hint}(hjOThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKThhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM ubj)}(h h]h }(hj^ThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjKThhhj]ThM ubj)}(hphylink_mii_ioctlh]j%)}(hphylink_mii_ioctlh]hphylink_mii_ioctl}(hjpThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjlTubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjKThhhj]ThM ubj)}(h0(struct phylink *pl, struct ifreq *ifr, int cmd)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hphylinkh]hphylink}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjTmodnameN classnameNjj!)}j$]j')}jjrTsbc.phylink_mii_ioctlasbuh1hhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjThhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hplh]hpl}(hjThhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(hstruct ifreq *ifrh](h)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjTubj)}(h h]h }(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubh)}(hhh]j%)}(hifreqh]hifreq}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjUubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjUmodnameN classnameNjj!)}j$]jTc.phylink_mii_ioctlasbuh1hhjTubj)}(h h]h }(hj:UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjTubj;)}(hj>h]h*}(hjHUhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjTubj%)}(hifrh]hifr}(hjUUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjTubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubj)}(hint cmdh](j)}(hinth]hint}(hjnUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjUubj)}(h h]h }(hj|UhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjUubj%)}(hcmdh]hcmd}(hjUhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjUubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjTubeh}(h]h ]h"]h$]h&]j<j=uh1jhjKThhhj]ThM ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjGThhhj]ThM ubah}(h]jBTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj]ThM hjDThhubjS)}(hhh]jX)}(hgeneric mii ioctl interfaceh]hgeneric mii ioctl interface}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUhhubah}(h]h ]h"]h$]h&]uh1jRhjDThhhj]ThM ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjUjxjUjyjzj{uh1hhhhjJhNhNubj})}(hX}**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``struct ifreq *ifr`` a pointer to a :c:type:`struct ifreq ` for socket ioctls ``int cmd`` ioctl cmd to execute **Description** Perform the specified MII ioctl on the PHY attached to the phylink instance specified by **pl**. If no PHY is attached, emulate the presence of the PHY. ``SIOCGMIIPHY``: read register from the current PHY. ``SIOCGMIIREG``: read register from the specified PHY. ``SIOCSMIIREG``: set a register on the specified PHY. **Return** zero on success or negative error code.h](jX)}(h**Parameters**h]j)}(hjUh]h Parameters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjUh]hstruct phylink *pl}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjVhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjVh]hstruct phylink}(hjVhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhj VhM hjVubh returned from phylink_create()}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj VhM hj Vubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhj VhM hjUubj)}(hV``struct ifreq *ifr`` a pointer to a :c:type:`struct ifreq ` for socket ioctls h](j)}(h``struct ifreq *ifr``h]j)}(hjQVh]hstruct ifreq *ifr}(hjSVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjKVubj)}(hhh]jX)}(h?a pointer to a :c:type:`struct ifreq ` for socket ioctlsh](ha pointer to a }(hjjVhhhNhNubh)}(h:c:type:`struct ifreq `h]j)}(hjtVh]h struct ifreq}(hjvVhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjrVubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjifrequh1hhjfVhM hjjVubh for socket ioctls}(hjjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjfVhM hjgVubah}(h]h ]h"]h$]h&]uh1jhjKVubeh}(h]h ]h"]h$]h&]uh1jhjfVhM hjUubj)}(h!``int cmd`` ioctl cmd to execute h](j)}(h ``int cmd``h]j)}(hjVh]hint cmd}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjVubj)}(hhh]jX)}(hioctl cmd to executeh]hioctl cmd to execute}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjUubeh}(h]h ]h"]h$]h&]uh1jhjUubjX)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubjX)}(hPerform the specified MII ioctl on the PHY attached to the phylink instance specified by **pl**. If no PHY is attached, emulate the presence of the PHY.h](hYPerform the specified MII ioctl on the PHY attached to the phylink instance specified by }(hjVhhhNhNubj)}(h**pl**h]hpl}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh9. If no PHY is attached, emulate the presence of the PHY.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubj)}(hhh](j)}(h4``SIOCGMIIPHY``: read register from the current PHY.h](j)}(h``SIOCGMIIPHY``:h](j)}(h``SIOCGMIIPHY``h]h SIOCGMIIPHY}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Wubh:}(hj&WhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hj"Wubj)}(hhh]jX)}(h#read register from the current PHY.h]h#read register from the current PHY.}(hjFWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjCWubah}(h]h ]h"]h$]h&]uh1jhj"Wubeh}(h]h ]h"]h$]h&]uh1jhjBWhM hjWubj)}(h6``SIOCGMIIREG``: read register from the specified PHY.h](j)}(h``SIOCGMIIREG``:h](j)}(h``SIOCGMIIREG``h]h SIOCGMIIREG}(hjiWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeWubh:}(hjeWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjaWubj)}(hhh]jX)}(h%read register from the specified PHY.h]h%read register from the specified PHY.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjWubah}(h]h ]h"]h$]h&]uh1jhjaWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubj)}(h6``SIOCSMIIREG``: set a register on the specified PHY. h](j)}(h``SIOCSMIIREG``:h](j)}(h``SIOCSMIIREG``h]h SIOCSMIIREG}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjWubj)}(hhh]jX)}(h$set a register on the specified PHY.h]h$set a register on the specified PHY.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWhM hjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjWhM hjWubeh}(h]h ]h"]h$]h&]uh1jhjUubjX)}(h **Return**h]j)}(hjWh]hReturn}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubjX)}(h'zero on success or negative error code.h]h'zero on success or negative error code.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM hjUubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_speed_down (C function)c.phylink_speed_downhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h6int phylink_speed_down (struct phylink *pl, bool sync)h]h)}(h5int phylink_speed_down(struct phylink *pl, bool sync)h](j)}(hinth]hint}(hj+XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'XhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj:XhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'Xhhhj9XhMubj)}(hphylink_speed_downh]j%)}(hphylink_speed_downh]hphylink_speed_down}(hjLXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjHXubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj'Xhhhj9XhMubj)}(h(struct phylink *pl, bool sync)h](j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjhXhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdXubj)}(h h]h }(hjuXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdXubh)}(hhh]j%)}(hphylinkh]hphylink}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjXmodnameN classnameNjj!)}j$]j')}jjNXsbc.phylink_speed_downasbuh1hhjdXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdXubj;)}(hj>h]h*}(hjXhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdXubj%)}(hplh]hpl}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`Xubj)}(h bool synch](j)}(hjTh]hbool}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXubj%)}(hsynch]hsync}(hjXhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj`Xubeh}(h]h ]h"]h$]h&]j<j=uh1jhj'Xhhhj9XhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj#Xhhhj9XhMubah}(h]jXah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj9XhMhj XhhubjS)}(hhh]jX)}(hCset the non-SFP PHY to lowest speed supported by both link partnersh]hCset the non-SFP PHY to lowest speed supported by both link partners}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjYhhubah}(h]h ]h"]h$]h&]uh1jRhj Xhhhj9XhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj7Yjxj7Yjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() ``bool sync`` perform action synchronously **Description** If we have a PHY that is not part of a SFP module, then set the speed as described in the phy_speed_down() function. Please see this function for a description of the **sync** parameter. Returns zero if there is no PHY, otherwise as per phy_speed_down().h](jX)}(h**Parameters**h]j)}(hjAYh]h Parameters}(hjCYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Yubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj;Yubj)}(hhh](j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj`Yh]hstruct phylink *pl}(hjbYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Yubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjZYubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjyYhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjYh]hstruct phylink}(hjYhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjuYhMhjyYubh returned from phylink_create()}(hjyYhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjuYhMhjvYubah}(h]h ]h"]h$]h&]uh1jhjZYubeh}(h]h ]h"]h$]h&]uh1jhjuYhMhjWYubj)}(h+``bool sync`` perform action synchronously h](j)}(h ``bool sync``h]j)}(hjYh]h bool sync}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjYubj)}(hhh]jX)}(hperform action synchronouslyh]hperform action synchronously}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjWYubeh}(h]h ]h"]h$]h&]uh1jhj;YubjX)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj;YubjX)}(hIf we have a PHY that is not part of a SFP module, then set the speed as described in the phy_speed_down() function. Please see this function for a description of the **sync** parameter.h](hIf we have a PHY that is not part of a SFP module, then set the speed as described in the phy_speed_down() function. Please see this function for a description of the }(hj ZhhhNhNubj)}(h**sync**h]hsync}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Zubh parameter.}(hj ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj;YubjX)}(hCReturns zero if there is no PHY, otherwise as per phy_speed_down().h]hCReturns zero if there is no PHY, otherwise as per phy_speed_down().}(hj.ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj;Yubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hphylink_speed_up (C function)c.phylink_speed_uphNtauh1hhjJhhhNhNubh)}(hhh](h)}(h)int phylink_speed_up (struct phylink *pl)h]h)}(h(int phylink_speed_up(struct phylink *pl)h](j)}(hinth]hint}(hj]ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYZhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjlZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYZhhhjkZhMubj)}(hphylink_speed_uph]j%)}(hphylink_speed_uph]hphylink_speed_up}(hj~ZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzZubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjYZhhhjkZhMubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubh)}(hhh]j%)}(hphylinkh]hphylink}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjZmodnameN classnameNjj!)}j$]j')}jjZsbc.phylink_speed_upasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjZubj;)}(hj>h]h*}(hjZhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjZubj%)}(hplh]hpl}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjZubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjZubah}(h]h ]h"]h$]h&]j<j=uh1jhjYZhhhjkZhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjUZhhhjkZhMubah}(h]jPZah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjkZhMhjRZhhubjS)}(hhh]jX)}(hGrestore the advertised speeds prior to the call to phylink_speed_down()h]hGrestore the advertised speeds prior to the call to phylink_speed_down()}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jRhjRZhhhjkZhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj5[jxj5[jyjzj{uh1hhhhjJhNhNubj})}(hX4**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** If we have a PHY that is not part of a SFP module, then restore the PHY speeds as per phy_speed_up(). Returns zero if there is no PHY, otherwise as per phy_speed_up().h](jX)}(h**Parameters**h]j)}(hj?[h]h Parameters}(hjA[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=[ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj9[ubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hj^[h]hstruct phylink *pl}(hj`[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\[ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjX[ubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjw[hhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hj[h]hstruct phylink}(hj[hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjs[hMhjw[ubh returned from phylink_create()}(hjw[hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjs[hMhjt[ubah}(h]h ]h"]h$]h&]uh1jhjX[ubeh}(h]h ]h"]h$]h&]uh1jhjs[hMhjU[ubah}(h]h ]h"]h$]h&]uh1jhj9[ubjX)}(h**Description**h]j)}(hj[h]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj9[ubjX)}(heIf we have a PHY that is not part of a SFP module, then restore the PHY speeds as per phy_speed_up().h]heIf we have a PHY that is not part of a SFP module, then restore the PHY speeds as per phy_speed_up().}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj9[ubjX)}(hAReturns zero if there is no PHY, otherwise as per phy_speed_up().h]hAReturns zero if there is no PHY, otherwise as per phy_speed_up().}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj9[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(phylink_decode_usxgmii_word (C function)c.phylink_decode_usxgmii_wordhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hQvoid phylink_decode_usxgmii_word (struct phylink_link_state *state, uint16_t lpa)h]h)}(hPvoid phylink_decode_usxgmii_word(struct phylink_link_state *state, uint16_t lpa)h](j)}(hvoidh]hvoid}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj \hhhj\hMubj)}(hphylink_decode_usxgmii_wordh]j%)}(hphylink_decode_usxgmii_wordh]hphylink_decode_usxgmii_word}(hj1\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj-\ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj \hhhj\hMubj)}(h0(struct phylink_link_state *state, uint16_t lpa)h](j)}(h struct phylink_link_state *stateh](h)}(hjh]hstruct}(hjM\hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjI\ubj)}(h h]h }(hjZ\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI\ubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjk\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjh\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjm\modnameN classnameNjj!)}j$]j')}jj3\sbc.phylink_decode_usxgmii_wordasbuh1hhjI\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjI\ubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjI\ubj%)}(hstateh]hstate}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjI\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE\ubj)}(h uint16_t lpah](h)}(hhh]j%)}(huint16_th]huint16_t}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj\modnameN classnameNjj!)}j$]j\c.phylink_decode_usxgmii_wordasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\ubj%)}(hlpah]hlpa}(hj\hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjE\ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj \hhhj\hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj\hhhj\hMubah}(h]j\ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj\hMhj\hhubjS)}(hhh]jX)}(h&decode the USXGMII word from a MAC PCSh]h&decode the USXGMII word from a MAC PCS}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj]hhubah}(h]h ]h"]h$]h&]uh1jRhj\hhhj\hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj0]jxj0]jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_link_state *state`` a pointer to a struct phylink_link_state. ``uint16_t lpa`` a 16 bit value which stores the USXGMII auto-negotiation word **Description** Helper for MAC PCS supporting the USXGMII protocol and the auto-negotiation code word. Decode the USXGMII code word and populate the corresponding fields (speed, duplex) into the phylink_link_state structure.h](jX)}(h**Parameters**h]j)}(hj:]h]h Parameters}(hj<]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8]ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj4]ubj)}(hhh](j)}(hO``struct phylink_link_state *state`` a pointer to a struct phylink_link_state. h](j)}(h$``struct phylink_link_state *state``h]j)}(hjY]h]h struct phylink_link_state *state}(hj[]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjS]ubj)}(hhh]jX)}(h)a pointer to a struct phylink_link_state.h]h)a pointer to a struct phylink_link_state.}(hjr]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjn]hMhjo]ubah}(h]h ]h"]h$]h&]uh1jhjS]ubeh}(h]h ]h"]h$]h&]uh1jhjn]hMhjP]ubj)}(hO``uint16_t lpa`` a 16 bit value which stores the USXGMII auto-negotiation word h](j)}(h``uint16_t lpa``h]j)}(hj]h]h uint16_t lpa}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj]ubj)}(hhh]jX)}(h=a 16 bit value which stores the USXGMII auto-negotiation wordh]h=a 16 bit value which stores the USXGMII auto-negotiation word}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj]hMhjP]ubeh}(h]h ]h"]h$]h&]uh1jhj4]ubjX)}(h**Description**h]j)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj4]ubjX)}(hHelper for MAC PCS supporting the USXGMII protocol and the auto-negotiation code word. Decode the USXGMII code word and populate the corresponding fields (speed, duplex) into the phylink_link_state structure.h]hHelper for MAC PCS supporting the USXGMII protocol and the auto-negotiation code word. Decode the USXGMII code word and populate the corresponding fields (speed, duplex) into the phylink_link_state structure.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj4]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_decode_usgmii_word (C function)c.phylink_decode_usgmii_wordhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hPvoid phylink_decode_usgmii_word (struct phylink_link_state *state, uint16_t lpa)h]h)}(hOvoid phylink_decode_usgmii_word(struct phylink_link_state *state, uint16_t lpa)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hj!^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^hhhj ^hMubj)}(hphylink_decode_usgmii_wordh]j%)}(hphylink_decode_usgmii_wordh]hphylink_decode_usgmii_word}(hj3^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj/^ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj^hhhj ^hMubj)}(h0(struct phylink_link_state *state, uint16_t lpa)h](j)}(h struct phylink_link_state *stateh](h)}(hjh]hstruct}(hjO^hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjK^ubj)}(h h]h }(hj\^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK^ubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjm^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjo^modnameN classnameNjj!)}j$]j')}jj5^sbc.phylink_decode_usgmii_wordasbuh1hhjK^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjK^ubj;)}(hj>h]h*}(hj^hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjK^ubj%)}(hstateh]hstate}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjK^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjG^ubj)}(h uint16_t lpah](h)}(hhh]j%)}(huint16_th]huint16_t}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj^modnameN classnameNjj!)}j$]j^c.phylink_decode_usgmii_wordasbuh1hhj^ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj^ubj%)}(hlpah]hlpa}(hj^hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj^ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjG^ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj^hhhj ^hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj ^hhhj ^hMubah}(h]j^ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj ^hMhj^hhubjS)}(hhh]jX)}(h%decode the USGMII word from a MAC PCSh]h%decode the USGMII word from a MAC PCS}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jRhj^hhhj ^hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj2_jxj2_jyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_link_state *state`` a pointer to a struct phylink_link_state. ``uint16_t lpa`` a 16 bit value which stores the USGMII auto-negotiation word **Description** Helper for MAC PCS supporting the USGMII protocol and the auto-negotiation code word. Decode the USGMII code word and populate the corresponding fields (speed, duplex) into the phylink_link_state structure. The structure for this word is the same as the USXGMII word, except it only supports speeds up to 1Gbps.h](jX)}(h**Parameters**h]j)}(hj<_h]h Parameters}(hj>_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:_ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj6_ubj)}(hhh](j)}(hO``struct phylink_link_state *state`` a pointer to a struct phylink_link_state. h](j)}(h$``struct phylink_link_state *state``h]j)}(hj[_h]h struct phylink_link_state *state}(hj]_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY_ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjU_ubj)}(hhh]jX)}(h)a pointer to a struct phylink_link_state.h]h)a pointer to a struct phylink_link_state.}(hjt_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp_hMhjq_ubah}(h]h ]h"]h$]h&]uh1jhjU_ubeh}(h]h ]h"]h$]h&]uh1jhjp_hMhjR_ubj)}(hN``uint16_t lpa`` a 16 bit value which stores the USGMII auto-negotiation word h](j)}(h``uint16_t lpa``h]j)}(hj_h]h uint16_t lpa}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj_ubj)}(hhh]jX)}(hh]h*}(hj`hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjM`ubj%)}(hstateh]hstate}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjM`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjI`ubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubj%)}(hneg_modeh]hneg_mode}(hj`hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjI`ubj)}(hu16 bmsrh](h)}(hhh]j%)}(hu16h]hu16}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjamodnameN classnameNjj!)}j$]j`"c.phylink_mii_c22_pcs_decode_stateasbuh1hhjaubj)}(h h]h }(hj5ahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjaubj%)}(hbmsrh]hbmsr}(hjCahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjI`ubj)}(hu16 lpah](h)}(hhh]j%)}(hu16h]hu16}(hj_ahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj\aubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjaamodnameN classnameNjj!)}j$]j`"c.phylink_mii_c22_pcs_decode_stateasbuh1hhjXaubj)}(h h]h }(hj}ahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXaubj%)}(hlpah]hlpa}(hjahhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXaubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjI`ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj`hhhj"`hM&ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj `hhhj"`hM&ubah}(h]j`ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj"`hM&hj `hhubjS)}(hhh]jX)}(h'Decode MAC PCS state from MII registersh]h'Decode MAC PCS state from MII registers}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM&hjahhubah}(h]h ]h"]h$]h&]uh1jRhj `hhhj"`hM&ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjajxjajyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. ``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) ``u16 bmsr`` The value of the ``MII_BMSR`` register ``u16 lpa`` The value of the ``MII_LPA`` register **Description** Helper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control. Parse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink **state** structure. This is suitable to be used for implementing the pcs_get_state() member of the struct phylink_pcs_ops structure if accessing **bmsr** and **lpa** cannot be done with MDIO directly.h](jX)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM*hjaubj)}(hhh](j)}(hn``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. h](j)}(h$``struct phylink_link_state *state``h]j)}(hjah]h struct phylink_link_state *state}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM'hjaubj)}(hhh]jX)}(hHa pointer to a :c:type:`struct phylink_link_state `.h](ha pointer to a }(hjbhhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hjbh]hstruct phylink_link_state}(hjbhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhj bhM'hjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj bhM'hj bubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj bhM'hjaubj)}(hF``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) h](j)}(h``unsigned int neg_mode``h]j)}(hjRbh]hunsigned int neg_mode}(hjTbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPbubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM(hjLbubj)}(hhh]jX)}(h+link negotiation mode (PHYLINK_PCS_NEG_xxx)h]h+link negotiation mode (PHYLINK_PCS_NEG_xxx)}(hjkbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjgbhM(hjhbubah}(h]h ]h"]h$]h&]uh1jhjLbubeh}(h]h ]h"]h$]h&]uh1jhjgbhM(hjaubj)}(h4``u16 bmsr`` The value of the ``MII_BMSR`` register h](j)}(h ``u16 bmsr``h]j)}(hjbh]hu16 bmsr}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM)hjbubj)}(hhh]jX)}(h&The value of the ``MII_BMSR`` registerh](hThe value of the }(hjbhhhNhNubj)}(h ``MII_BMSR``h]hMII_BMSR}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh register}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjbhM)hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM)hjaubj)}(h2``u16 lpa`` The value of the ``MII_LPA`` register h](j)}(h ``u16 lpa``h]j)}(hjbh]hu16 lpa}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM*hjbubj)}(hhh]jX)}(h%The value of the ``MII_LPA`` registerh](hThe value of the }(hjbhhhNhNubj)}(h ``MII_LPA``h]hMII_LPA}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh register}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjbhM*hjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhM*hjaubeh}(h]h ]h"]h$]h&]uh1jhjaubjX)}(h**Description**h]j)}(hj#ch]h Description}(hj%chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!cubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM,hjaubjX)}(hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.h]hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.}(hj9chhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM+hjaubjX)}(hXParse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink **state** structure. This is suitable to be used for implementing the pcs_get_state() member of the struct phylink_pcs_ops structure if accessing **bmsr** and **lpa** cannot be done with MDIO directly.h](hRParse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink }(hjHchhhNhNubj)}(h **state**h]hstate}(hjPchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHcubh structure. This is suitable to be used for implementing the pcs_get_state() member of the struct phylink_pcs_ops structure if accessing }(hjHchhhNhNubj)}(h**bmsr**h]hbmsr}(hjbchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHcubh and }(hjHchhhNhNubj)}(h**lpa**h]hlpa}(hjtchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHcubh# cannot be done with MDIO directly.}(hjHchhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM.hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*phylink_mii_c22_pcs_get_state (C function)c.phylink_mii_c22_pcs_get_statehNtauh1hhjJhhhNhNubh)}(hhh](h)}(huvoid phylink_mii_c22_pcs_get_state (struct mdio_device *pcs, unsigned int neg_mode, struct phylink_link_state *state)h]h)}(htvoid phylink_mii_c22_pcs_get_state(struct mdio_device *pcs, unsigned int neg_mode, struct phylink_link_state *state)h](j)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMfubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjchhhjchMfubj)}(hphylink_mii_c22_pcs_get_stateh]j%)}(hphylink_mii_c22_pcs_get_stateh]hphylink_mii_c22_pcs_get_state}(hjchhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjchhhjchMfubj)}(hR(struct mdio_device *pcs, unsigned int neg_mode, struct phylink_link_state *state)h](j)}(hstruct mdio_device *pcsh](h)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubh)}(hhh]j%)}(h mdio_deviceh]h mdio_device}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj dmodnameN classnameNjj!)}j$]j')}jjcsbc.phylink_mii_c22_pcs_get_stateasbuh1hhjcubj)}(h h]h }(hj(dhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjcubj;)}(hj>h]h*}(hj6dhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjcubj%)}(hpcsh]hpcs}(hjCdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjcubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hj\dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXdubj)}(h h]h }(hjjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXdubj)}(hinth]hint}(hjxdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXdubj%)}(hneg_modeh]hneg_mode}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjXdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubj)}(h struct phylink_link_state *stateh](h)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubh)}(hhh]j%)}(hphylink_link_stateh]hphylink_link_state}(hjdhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjdmodnameN classnameNjj!)}j$]j$dc.phylink_mii_c22_pcs_get_stateasbuh1hhjdubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjdubj;)}(hj>h]h*}(hjdhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjdubj%)}(hstateh]hstate}(hjehhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjdubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjcubeh}(h]h ]h"]h$]h&]j<j=uh1jhjchhhjchMfubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjchhhjchMfubah}(h]jcah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjchMfhjchhubjS)}(hhh]jX)}(hread the MAC PCS stateh]hread the MAC PCS state}(hj.ehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMfhj+ehhubah}(h]h ]h"]h$]h&]uh1jRhjchhhjchMfubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjFejxjFejyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. ``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) ``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. **Description** Helper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control. Read the MAC PCS state from the MII device configured in **config** and parse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink **state** structure. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.h](jX)}(h**Parameters**h]j)}(hjPeh]h Parameters}(hjRehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNeubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMjhjJeubj)}(hhh](j)}(hW``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. h](j)}(h``struct mdio_device *pcs``h]j)}(hjoeh]hstruct mdio_device *pcs}(hjqehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMghjieubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct mdio_device `.h](ha pointer to a }(hjehhhNhNubh)}(h*:c:type:`struct mdio_device `h]j)}(hjeh]hstruct mdio_device}(hjehhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj mdio_deviceuh1hhjehMghjeubh.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjehMghjeubah}(h]h ]h"]h$]h&]uh1jhjieubeh}(h]h ]h"]h$]h&]uh1jhjehMghjfeubj)}(hF``unsigned int neg_mode`` link negotiation mode (PHYLINK_PCS_NEG_xxx) h](j)}(h``unsigned int neg_mode``h]j)}(hjeh]hunsigned int neg_mode}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhhjeubj)}(hhh]jX)}(h+link negotiation mode (PHYLINK_PCS_NEG_xxx)h]h+link negotiation mode (PHYLINK_PCS_NEG_xxx)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjehMhhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhhjfeubj)}(hn``struct phylink_link_state *state`` a pointer to a :c:type:`struct phylink_link_state `. h](j)}(h$``struct phylink_link_state *state``h]j)}(hjfh]h struct phylink_link_state *state}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMihjeubj)}(hhh]jX)}(hHa pointer to a :c:type:`struct phylink_link_state `.h](ha pointer to a }(hjfhhhNhNubh)}(h8:c:type:`struct phylink_link_state `h]j)}(hj'fh]hstruct phylink_link_state}(hj)fhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj%fubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylink_link_stateuh1hhjfhMihjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjfhMihjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhMihjfeubeh}(h]h ]h"]h$]h&]uh1jhjJeubjX)}(h**Description**h]j)}(hjbfh]h Description}(hjdfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`fubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMkhjJeubjX)}(hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.h]hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.}(hjxfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMjhjJeubjX)}(hXRead the MAC PCS state from the MII device configured in **config** and parse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink **state** structure. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.h](h9Read the MAC PCS state from the MII device configured in }(hjfhhhNhNubj)}(h **config**h]hconfig}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubhW and parse the Clause 37 or Cisco SGMII link partner negotiation word into the phylink }(hjfhhhNhNubj)}(h **state**h]hstate}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh| structure. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMmhjJeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h5phylink_mii_c22_pcs_encode_advertisement (C function)*c.phylink_mii_c22_pcs_encode_advertisementhNtauh1hhjJhhhNhNubh)}(hhh](h)}(hjint phylink_mii_c22_pcs_encode_advertisement (phy_interface_t interface, const unsigned long *advertising)h]h)}(hiint phylink_mii_c22_pcs_encode_advertisement(phy_interface_t interface, const unsigned long *advertising)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfhhhjfhMubj)}(h(phylink_mii_c22_pcs_encode_advertisementh]j%)}(h(phylink_mii_c22_pcs_encode_advertisementh]h(phylink_mii_c22_pcs_encode_advertisement}(hjfhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjfubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjfhhhjfhMubj)}(h=(phy_interface_t interface, const unsigned long *advertising)h](j)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjgmodnameN classnameNjj!)}j$]j')}jjfsb*c.phylink_mii_c22_pcs_encode_advertisementasbuh1hhjgubj)}(h h]h }(hj:ghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjgubj%)}(h interfaceh]h interface}(hjHghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjgubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjgubj)}(h const unsigned long *advertisingh](h)}(hjh]hconst}(hjaghhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]gubj)}(h h]h }(hjnghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]gubj)}(hunsignedh]hunsigned}(hj|ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]gubj)}(hlongh]hlong}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]gubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]gubj;)}(hj>h]h*}(hjghhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]gubj%)}(h advertisingh]h advertising}(hjghhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj]gubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjgubeh}(h]h ]h"]h$]h&]j<j=uh1jhjfhhhjfhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjfhhhjfhMubah}(h]jfah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjfhMhjfhhubjS)}(hhh]jX)}(h)configure the clause 37 PCS advertisementh]h)configure the clause 37 PCS advertisement}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjghhubah}(h]h ]h"]h$]h&]uh1jRhjfhhhjfhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjhjxjhjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``phy_interface_t interface`` the PHY interface mode being configured ``const unsigned long *advertising`` the ethtool advertisement mask **Description** Helper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control. Encode the clause 37 PCS advertisement as specified by **interface** and **advertising**. **Return** The new value for **adv**, or ``-EINVAL`` if it should not be changed.h](jX)}(h**Parameters**h]j)}(hj hh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubj)}(hhh](j)}(hF``phy_interface_t interface`` the PHY interface mode being configured h](j)}(h``phy_interface_t interface``h]j)}(hj,hh]hphy_interface_t interface}(hj.hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*hubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj&hubj)}(hhh]jX)}(h'the PHY interface mode being configuredh]h'the PHY interface mode being configured}(hjEhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAhhMhjBhubah}(h]h ]h"]h$]h&]uh1jhj&hubeh}(h]h ]h"]h$]h&]uh1jhjAhhMhj#hubj)}(hD``const unsigned long *advertising`` the ethtool advertisement mask h](j)}(h$``const unsigned long *advertising``h]j)}(hjehh]h const unsigned long *advertising}(hjghhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjchubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj_hubj)}(hhh]jX)}(hthe ethtool advertisement maskh]hthe ethtool advertisement mask}(hj~hhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhhMhj{hubah}(h]h ]h"]h$]h&]uh1jhj_hubeh}(h]h ]h"]h$]h&]uh1jhjzhhMhj#hubeh}(h]h ]h"]h$]h&]uh1jhjhubjX)}(h**Description**h]j)}(hjhh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubjX)}(hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.h]hnHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation and/or SGMII control.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubjX)}(hYEncode the clause 37 PCS advertisement as specified by **interface** and **advertising**.h](h7Encode the clause 37 PCS advertisement as specified by }(hjhhhhNhNubj)}(h **interface**h]h interface}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh and }(hjhhhhNhNubj)}(h**advertising**h]h advertising}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubjX)}(h **Return**h]j)}(hjhh]hReturn}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubjX)}(hFThe new value for **adv**, or ``-EINVAL`` if it should not be changed.h](hThe new value for }(hjihhhNhNubj)}(h**adv**h]hadv}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh, or }(hjihhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hj*ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh if it should not be changed.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'phylink_mii_c22_pcs_config (C function)c.phylink_mii_c22_pcs_confighNtauh1hhjJhhhNhNubh)}(hhh](h)}(hint phylink_mii_c22_pcs_config (struct mdio_device *pcs, phy_interface_t interface, const unsigned long *advertising, unsigned int neg_mode)h]h)}(hint phylink_mii_c22_pcs_config(struct mdio_device *pcs, phy_interface_t interface, const unsigned long *advertising, unsigned int neg_mode)h](j)}(hinth]hint}(hjcihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ihhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjrihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj_ihhhjqihMubj)}(hphylink_mii_c22_pcs_configh]j%)}(hphylink_mii_c22_pcs_configh]hphylink_mii_c22_pcs_config}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj_ihhhjqihMubj)}(hm(struct mdio_device *pcs, phy_interface_t interface, const unsigned long *advertising, unsigned int neg_mode)h](j)}(hstruct mdio_device *pcsh](h)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(hhh]j%)}(h mdio_deviceh]h mdio_device}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjimodnameN classnameNjj!)}j$]j')}jjisbc.phylink_mii_c22_pcs_configasbuh1hhjiubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubj;)}(hj>h]h*}(hjihhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjiubj%)}(hpcsh]hpcs}(hjihhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubj)}(hphy_interface_t interfaceh](h)}(hhh]j%)}(hphy_interface_th]hphy_interface_t}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjjmodnameN classnameNjj!)}j$]jic.phylink_mii_c22_pcs_configasbuh1hhjjubj)}(h h]h }(hj3jhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj%)}(h interfaceh]h interface}(hjAjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubj)}(h const unsigned long *advertisingh](h)}(hjh]hconst}(hjZjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjVjubj)}(h h]h }(hjgjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVjubj)}(hunsignedh]hunsigned}(hjujhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVjubj)}(hlongh]hlong}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVjubj;)}(hj>h]h*}(hjjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjVjubj%)}(h advertisingh]h advertising}(hjjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjVjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubj)}(hunsigned int neg_modeh](j)}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjubj%)}(hneg_modeh]hneg_mode}(hj khhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjiubeh}(h]h ]h"]h$]h&]j<j=uh1jhj_ihhhjqihMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj[ihhhjqihMubah}(h]jViah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjqihMhjXihhubjS)}(hhh]jX)}(hconfigure clause 22 PCSh]hconfigure clause 22 PCS}(hj5khhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj2khhubah}(h]h ]h"]h$]h&]uh1jRhjXihhhjqihMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjMkjxjMkjyjzj{uh1hhhhjJhNhNubj})}(hX=**Parameters** ``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. ``phy_interface_t interface`` the PHY interface mode being configured ``const unsigned long *advertising`` the ethtool advertisement mask ``unsigned int neg_mode`` PCS negotiation mode **Description** Configure a Clause 22 PCS PHY with the appropriate negotiation parameters for the **mode**, **interface** and **advertising** parameters. Returns negative error number on failure, zero if the advertisement has not changed, or positive if there is a change.h](jX)}(h**Parameters**h]j)}(hjWkh]h Parameters}(hjYkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUkubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjQkubj)}(hhh](j)}(hW``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. h](j)}(h``struct mdio_device *pcs``h]j)}(hjvkh]hstruct mdio_device *pcs}(hjxkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtkubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjpkubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct mdio_device `.h](ha pointer to a }(hjkhhhNhNubh)}(h*:c:type:`struct mdio_device `h]j)}(hjkh]hstruct mdio_device}(hjkhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj mdio_deviceuh1hhjkhMhjkubh.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjpkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjmkubj)}(hF``phy_interface_t interface`` the PHY interface mode being configured h](j)}(h``phy_interface_t interface``h]j)}(hjkh]hphy_interface_t interface}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjkubj)}(hhh]jX)}(h'the PHY interface mode being configuredh]h'the PHY interface mode being configured}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhMhjmkubj)}(hD``const unsigned long *advertising`` the ethtool advertisement mask h](j)}(h$``const unsigned long *advertising``h]j)}(hj lh]h const unsigned long *advertising}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj lubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjlubj)}(hhh]jX)}(hthe ethtool advertisement maskh]hthe ethtool advertisement mask}(hj$lhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj lhMhj!lubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhj lhMhjmkubj)}(h/``unsigned int neg_mode`` PCS negotiation mode h](j)}(h``unsigned int neg_mode``h]j)}(hjDlh]hunsigned int neg_mode}(hjFlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBlubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhj>lubj)}(hhh]jX)}(hPCS negotiation modeh]hPCS negotiation mode}(hj]lhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYlhMhjZlubah}(h]h ]h"]h$]h&]uh1jhj>lubeh}(h]h ]h"]h$]h&]uh1jhjYlhMhjmkubeh}(h]h ]h"]h$]h&]uh1jhjQkubjX)}(h**Description**h]j)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}lubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjQkubjX)}(hXConfigure a Clause 22 PCS PHY with the appropriate negotiation parameters for the **mode**, **interface** and **advertising** parameters. Returns negative error number on failure, zero if the advertisement has not changed, or positive if there is a change.h](hRConfigure a Clause 22 PCS PHY with the appropriate negotiation parameters for the }(hjlhhhNhNubj)}(h**mode**h]hmode}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh, }(hjlhhhNhNubj)}(h **interface**h]h interface}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh and }(hjlhhhNhNubj)}(h**advertising**h]h advertising}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh parameters. Returns negative error number on failure, zero if the advertisement has not changed, or positive if there is a change.}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjQkubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h+phylink_mii_c22_pcs_an_restart (C function) c.phylink_mii_c22_pcs_an_restarthNtauh1hhjJhhhNhNubh)}(hhh](h)}(h=void phylink_mii_c22_pcs_an_restart (struct mdio_device *pcs)h]h)}(hh]h*}(hjmhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj3mubj%)}(hpcsh]hpcs}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj3mubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj/mubah}(h]h ]h"]h$]h&]j<j=uh1jhjlhhhjmhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjlhhhjmhMubah}(h]jlah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjmhMhjlhhubjS)}(hhh]jX)}(hrestart 802.3z autonegotiationh]hrestart 802.3z autonegotiation}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jRhjlhhhjmhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. **Description** Helper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation. Restart the clause 37 negotiation with the link partner. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.h](jX)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmubj)}(hhh]j)}(hW``struct mdio_device *pcs`` a pointer to a :c:type:`struct mdio_device `. h](j)}(h``struct mdio_device *pcs``h]j)}(hjmh]hstruct mdio_device *pcs}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmubj)}(hhh]jX)}(h:a pointer to a :c:type:`struct mdio_device `.h](ha pointer to a }(hjnhhhNhNubh)}(h*:c:type:`struct mdio_device `h]j)}(hjnh]hstruct mdio_device}(hj nhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjj mdio_deviceuh1hhjnhMhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjnhMhjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjnhMhjmubah}(h]h ]h"]h$]h&]uh1jhjmubjX)}(h**Description**h]j)}(hjYnh]h Description}(hj[nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWnubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmubjX)}(hYHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation.h]hYHelper for MAC PCS supporting the 802.3 clause 22 register set for clause 37 negotiation.}(hjonhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmubjX)}(hRestart the clause 37 negotiation with the link partner. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.h]hRestart the clause 37 negotiation with the link partner. This is suitable to be directly plugged into the pcs_get_state() member of the struct phylink_pcs_ops structure.}(hj~nhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h&phylink_replay_link_begin (C function)c.phylink_replay_link_beginhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h3void phylink_replay_link_begin (struct phylink *pl)h]h)}(h2void phylink_replay_link_begin(struct phylink *pl)h](j)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhjnhMubj)}(hphylink_replay_link_beginh]j%)}(hphylink_replay_link_beginh]hphylink_replay_link_begin}(hjnhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjnhhhjnhMubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubh)}(hhh]j%)}(hphylinkh]hphylink}(hjohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj omodnameN classnameNjj!)}j$]j')}jjnsbc.phylink_replay_link_beginasbuh1hhjnubj)}(h h]h }(hj(ohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnubj;)}(hj>h]h*}(hj6ohhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjnubj%)}(hplh]hpl}(hjCohhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjnubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjnubah}(h]h ]h"]h$]h&]j<j=uh1jhjnhhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjnhhhjnhMubah}(h]jnah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjnhhubjS)}(hhh]jX)}(h;begin replay of link callbacks for driver which loses stateh]h;begin replay of link callbacks for driver which loses state}(hjmohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjjohhubah}(h]h ]h"]h$]h&]uh1jRhjnhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjojxjojyjzj{uh1hhhhjJhNhNubj})}(hX**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Helper for MAC drivers which may perform a destructive reset at runtime. Both the own driver's mac_link_down() method is called, as well as the pcs_link_down() method of the split PCS (if any). This is similar to phylink_stop(), except it does not alter the state of the phylib PHY (it is assumed that it is not affected by the MAC destructive reset).h](jX)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjoubj)}(hhh]j)}(hh``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjoh]hstruct phylink *pl}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjoubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjohhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjoh]hstruct phylink}(hjohhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjohMhjoubh returned from phylink_create()}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohMhjoubah}(h]h ]h"]h$]h&]uh1jhjoubjX)}(h**Description**h]j)}(hj ph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj pubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjoubjX)}(hHelper for MAC drivers which may perform a destructive reset at runtime. Both the own driver's mac_link_down() method is called, as well as the pcs_link_down() method of the split PCS (if any).h]hHelper for MAC drivers which may perform a destructive reset at runtime. Both the own driver’s mac_link_down() method is called, as well as the pcs_link_down() method of the split PCS (if any).}(hj"phhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjoubjX)}(hThis is similar to phylink_stop(), except it does not alter the state of the phylib PHY (it is assumed that it is not affected by the MAC destructive reset).h]hThis is similar to phylink_stop(), except it does not alter the state of the phylib PHY (it is assumed that it is not affected by the MAC destructive reset).}(hj1phhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chMhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$phylink_replay_link_end (C function)c.phylink_replay_link_endhNtauh1hhjJhhhNhNubh)}(hhh](h)}(h1void phylink_replay_link_end (struct phylink *pl)h]h)}(h0void phylink_replay_link_end(struct phylink *pl)h](j)}(hvoidh]hvoid}(hj`phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\phhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM#ubj)}(h h]h }(hjophhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj\phhhjnphM#ubj)}(hphylink_replay_link_endh]j%)}(hphylink_replay_link_endh]hphylink_replay_link_end}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}pubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj\phhhjnphM#ubj)}(h(struct phylink *pl)h]j)}(hstruct phylink *plh](h)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(hhh]j%)}(hphylinkh]hphylink}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjpmodnameN classnameNjj!)}j$]j')}jjpsbc.phylink_replay_link_endasbuh1hhjpubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubj;)}(hj>h]h*}(hjphhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjpubj%)}(hplh]hpl}(hjphhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjpubah}(h]h ]h"]h$]h&]j<j=uh1jhj\phhhjnphM#ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjXphhhjnphM#ubah}(h]jSpah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnphM#hjUphhubjS)}(hhh]jX)}(h8end replay of link callbacks for driver which lost stateh]h8end replay of link callbacks for driver which lost state}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM#hjqhhubah}(h]h ]h"]h$]h&]uh1jRhjUphhhjnphM#ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj8qjxj8qjyjzj{uh1hhhhjJhNhNubj})}(hXA**Parameters** ``struct phylink *pl`` a pointer to a :c:type:`struct phylink ` returned from phylink_create() **Description** Helper for MAC drivers which may perform a destructive reset at runtime. Both the own driver's mac_config() and mac_link_up() methods, as well as the pcs_config() and pcs_link_up() method of the split PCS (if any), are called. This is similar to phylink_start(), except it does not alter the state of the phylib PHY. One must call this method only within the same rtnl_lock() critical section as a previous phylink_replay_link_start().h](jX)}(h**Parameters**h]j)}(hjBqh]h Parameters}(hjDqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@qubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM'hj` returned from phylink_create() h](j)}(h``struct phylink *pl``h]j)}(hjaqh]hstruct phylink *pl}(hjcqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_qubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:150: ./drivers/net/phy/phylink.chM%hj[qubj)}(hhh]jX)}(hPa pointer to a :c:type:`struct phylink ` returned from phylink_create()h](ha pointer to a }(hjzqhhhNhNubh)}(h":c:type:`struct phylink `h]j)}(hjqh]hstruct phylink}(hjqhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjphylinkuh1hhjvqhM%hjzqubh returned from phylink_create()}(hjzqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjvqhM%hjwqubah}(h]h ]h"]h$]h&]uh1jhj[qubeh}(h]h ]h"]h$]h&]uh1jhjvqhM%hjXqubah}(h]h ]h"]h$]h&]uh1jhjhttps://www.snia.org/technology-communities/sff/specificationsh]h>https://www.snia.org/technology-communities/sff/specifications}(hjLthhhNhNubah}(h]h ]h"]h$]h&]refurijNtuh1jJthjBtubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhKhjrhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_module_caps (C struct)c.sfp_module_capshNtauh1hhjrhhhNhNubh)}(hhh](h)}(hsfp_module_capsh]h)}(hstruct sfp_module_capsh](h)}(hjh]hstruct}(hj{thhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjwthhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhKubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjwthhhjthKubj)}(hsfp_module_capsh]j%)}(hjuth]hsfp_module_caps}(hjthhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjtubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjwthhhjthKubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjsthhhjthKubah}(h]jntah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjthKhjpthhubjS)}(hhh]jX)}(hsfp module capabilitiesh]hsfp module capabilities}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM hjthhubah}(h]h ]h"]h$]h&]uh1jRhjpthhhjthKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1hhhhjrhNhNubj})}(hX**Definition**:: struct sfp_module_caps { unsigned long interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long link_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool may_have_phy; u8 port; }; **Members** ``interfaces`` bitmap of interfaces that the module may support ``link_modes`` bitmap of ethtool link modes that the module may support ``may_have_phy`` indicate whether the module may have an ethernet PHY There is no way to be sure that a module has a PHY as the EEPROM doesn't contain this information. When set, this does not mean that the module definitely has a PHY. ``port`` one of ethtool ``PORT_*`` definitions, parsed from the module EEPROM, or ``PORT_OTHER`` if the port type is not known.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh:}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjtubjU)}(hstruct sfp_module_caps { unsigned long interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long link_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool may_have_phy; u8 port; };h]hstruct sfp_module_caps { unsigned long interfaces[BITS_TO_LONGS(PHY_INTERFACE_MODE_MAX)]; unsigned long link_modes[BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS)]; bool may_have_phy; u8 port; };}hjtsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjtubjX)}(h **Members**h]j)}(hj uh]hMembers}(hj uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj uubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjtubj)}(hhh](j)}(h@``interfaces`` bitmap of interfaces that the module may support h](j)}(h``interfaces``h]j)}(hj*uh]h interfaces}(hj,uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(uubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhj$uubj)}(hhh]jX)}(h0bitmap of interfaces that the module may supporth]h0bitmap of interfaces that the module may support}(hjCuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?uhMhj@uubah}(h]h ]h"]h$]h&]uh1jhj$uubeh}(h]h ]h"]h$]h&]uh1jhj?uhMhj!uubj)}(hH``link_modes`` bitmap of ethtool link modes that the module may support h](j)}(h``link_modes``h]j)}(hjcuh]h link_modes}(hjeuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjauubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhj]uubj)}(hhh]jX)}(h8bitmap of ethtool link modes that the module may supporth]h8bitmap of ethtool link modes that the module may support}(hj|uhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxuhMhjyuubah}(h]h ]h"]h$]h&]uh1jhj]uubeh}(h]h ]h"]h$]h&]uh1jhjxuhMhj!uubj)}(h``may_have_phy`` indicate whether the module may have an ethernet PHY There is no way to be sure that a module has a PHY as the EEPROM doesn't contain this information. When set, this does not mean that the module definitely has a PHY. h](j)}(h``may_have_phy``h]j)}(hjuh]h may_have_phy}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjuubj)}(hhh]jX)}(hindicate whether the module may have an ethernet PHY There is no way to be sure that a module has a PHY as the EEPROM doesn't contain this information. When set, this does not mean that the module definitely has a PHY.h]hindicate whether the module may have an ethernet PHY There is no way to be sure that a module has a PHY as the EEPROM doesn’t contain this information. When set, this does not mean that the module definitely has a PHY.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhj!uubj)}(h``port`` one of ethtool ``PORT_*`` definitions, parsed from the module EEPROM, or ``PORT_OTHER`` if the port type is not known.h](j)}(h``port``h]j)}(hjuh]hport}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhMhjuubj)}(hhh]jX)}(hvone of ethtool ``PORT_*`` definitions, parsed from the module EEPROM, or ``PORT_OTHER`` if the port type is not known.h](hone of ethtool }(hjuhhhNhNubj)}(h ``PORT_*``h]hPORT_*}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh0 definitions, parsed from the module EEPROM, or }(hjuhhhNhNubj)}(h``PORT_OTHER``h]h PORT_OTHER}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh if the port type is not known.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhMhj!uubeh}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_upstream_ops (C struct)c.sfp_upstream_opshNtauh1hhjrhhhNhNubh)}(hhh](h)}(hsfp_upstream_opsh]h)}(hstruct sfp_upstream_opsh](h)}(hjh]hstruct}(hjSvhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOvhhhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM$ubj)}(h h]h }(hjavhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOvhhhj`vhM$ubj)}(hsfp_upstream_opsh]j%)}(hjMvh]hsfp_upstream_ops}(hjsvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjovubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjOvhhhj`vhM$ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjKvhhhj`vhM$ubah}(h]jFvah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj`vhM$hjHvhhubjS)}(hhh]jX)}(hupstream operations structureh]hupstream operations structure}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM#hjvhhubah}(h]h ]h"]h$]h&]uh1jRhjHvhhhj`vhM$ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjvjxjvjyjzj{uh1hhhhjrhNhNubj})}(hXD**Definition**:: struct sfp_upstream_ops { void (*attach)(void *priv, struct sfp_bus *bus); void (*detach)(void *priv, struct sfp_bus *bus); int (*module_insert)(void *priv, const struct sfp_eeprom_id *id); void (*module_remove)(void *priv); int (*module_start)(void *priv); void (*module_stop)(void *priv); void (*link_down)(void *priv); void (*link_up)(void *priv); int (*connect_phy)(void *priv, struct phy_device *); void (*disconnect_phy)(void *priv, struct phy_device *); }; **Members** ``attach`` called when the sfp socket driver is bound to the upstream (mandatory). ``detach`` called when the sfp socket driver is unbound from the upstream (mandatory). ``module_insert`` called after a module has been detected to determine whether the module is supported for the upstream device. ``module_remove`` called after the module has been removed. ``module_start`` called after the PHY probe step ``module_stop`` called before the PHY is removed ``link_down`` called when the link is non-operational for whatever reason. ``link_up`` called when the link is operational. ``connect_phy`` called when an I2C accessible PHY has been detected on the module. ``disconnect_phy`` called when a module with an I2C accessible PHY has been removed.h](jX)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh:}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM'hjvubjU)}(hXstruct sfp_upstream_ops { void (*attach)(void *priv, struct sfp_bus *bus); void (*detach)(void *priv, struct sfp_bus *bus); int (*module_insert)(void *priv, const struct sfp_eeprom_id *id); void (*module_remove)(void *priv); int (*module_start)(void *priv); void (*module_stop)(void *priv); void (*link_down)(void *priv); void (*link_up)(void *priv); int (*connect_phy)(void *priv, struct phy_device *); void (*disconnect_phy)(void *priv, struct phy_device *); };h]hXstruct sfp_upstream_ops { void (*attach)(void *priv, struct sfp_bus *bus); void (*detach)(void *priv, struct sfp_bus *bus); int (*module_insert)(void *priv, const struct sfp_eeprom_id *id); void (*module_remove)(void *priv); int (*module_start)(void *priv); void (*module_stop)(void *priv); void (*link_down)(void *priv); void (*link_up)(void *priv); int (*connect_phy)(void *priv, struct phy_device *); void (*disconnect_phy)(void *priv, struct phy_device *); };}hjvsbah}(h]h ]h"]h$]h&]j<j=uh1jThT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM)hjvubjX)}(h **Members**h]j)}(hjvh]hMembers}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM6hjvubj)}(hhh](j)}(hS``attach`` called when the sfp socket driver is bound to the upstream (mandatory). h](j)}(h ``attach``h]j)}(hjwh]hattach}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM&hjvubj)}(hhh]jX)}(hGcalled when the sfp socket driver is bound to the upstream (mandatory).h]hGcalled when the sfp socket driver is bound to the upstream (mandatory).}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM%hjwubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjwhM&hjvubj)}(hW``detach`` called when the sfp socket driver is unbound from the upstream (mandatory). h](j)}(h ``detach``h]j)}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:wubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM(hj6wubj)}(hhh]jX)}(hKcalled when the sfp socket driver is unbound from the upstream (mandatory).h]hKcalled when the sfp socket driver is unbound from the upstream (mandatory).}(hjUwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM'hjRwubah}(h]h ]h"]h$]h&]uh1jhj6wubeh}(h]h ]h"]h$]h&]uh1jhjQwhM(hjvubj)}(h``module_insert`` called after a module has been detected to determine whether the module is supported for the upstream device. h](j)}(h``module_insert``h]j)}(hjvwh]h module_insert}(hjxwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM*hjpwubj)}(hhh]jX)}(hmcalled after a module has been detected to determine whether the module is supported for the upstream device.h]hmcalled after a module has been detected to determine whether the module is supported for the upstream device.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM)hjwubah}(h]h ]h"]h$]h&]uh1jhjpwubeh}(h]h ]h"]h$]h&]uh1jhjwhM*hjvubj)}(h<``module_remove`` called after the module has been removed. h](j)}(h``module_remove``h]j)}(hjwh]h module_remove}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM+hjwubj)}(hhh]jX)}(h)called after the module has been removed.h]h)called after the module has been removed.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhM+hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM+hjvubj)}(h1``module_start`` called after the PHY probe step h](j)}(h``module_start``h]j)}(hjwh]h module_start}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM,hjwubj)}(hhh]jX)}(hcalled after the PHY probe steph]hcalled after the PHY probe step}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwhM,hjwubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjwhM,hjvubj)}(h1``module_stop`` called before the PHY is removed h](j)}(h``module_stop``h]j)}(hj"xh]h module_stop}(hj$xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj xubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM-hjxubj)}(hhh]jX)}(h called before the PHY is removedh]h called before the PHY is removed}(hj;xhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7xhM-hj8xubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhj7xhM-hjvubj)}(hK``link_down`` called when the link is non-operational for whatever reason. h](j)}(h ``link_down``h]j)}(hj[xh]h link_down}(hj]xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYxubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/networking/kapi:158: ./include/linux/sfp.hhM/hjUxubj)}(hhh]jX)}(hh]h*}(hjyhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjyubj%)}(hbush]hbus}(hj zhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjyubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubj)}(hconst unsigned long *link_modesh](h)}(hjh]hconst}(hj#zhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjzubj)}(h h]h }(hj0zhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj)}(hunsignedh]hunsigned}(hj>zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjLzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj)}(hlongh]hlong}(hjZzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhzhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjzubj;)}(hj>h]h*}(hjvzhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjzubj%)}(h link_modesh]h link_modes}(hjzhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjzubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjyubeh}(h]h ]h"]h$]h&]j<j=uh1jhj]yhhhjyhMMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYyhhhjyhMMubah}(h]jTyah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjyhMMhjVyhhubjS)}(hhh]jX)}(h'Select appropriate phy_interface_t modeh]h'Select appropriate phy_interface_t mode}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMMhjzhhubah}(h]h ]h"]h$]h&]uh1jRhjVyhhhjyhMMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module ``const unsigned long *link_modes`` ethtool link modes mask **Description** Derive the phy_interface_t mode for the SFP module from the link modes mask.h](jX)}(h**Parameters**h]j)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMQhjzubj)}(hhh](j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjzh]hstruct sfp_bus *bus}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMNhjzubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hj{hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hj{h]hstruct sfp_bus}(hj{hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj{hMNhj{ubh structure for the sfp module}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj{hMNhj{ubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhj{hMNhjzubj)}(h<``const unsigned long *link_modes`` ethtool link modes mask h](j)}(h#``const unsigned long *link_modes``h]j)}(hjJ{h]hconst unsigned long *link_modes}(hjL{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH{ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMOhjD{ubj)}(hhh]jX)}(hethtool link modes maskh]hethtool link modes mask}(hjc{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj_{hMOhj`{ubah}(h]h ]h"]h$]h&]uh1jhjD{ubeh}(h]h ]h"]h$]h&]uh1jhj_{hMOhjzubeh}(h]h ]h"]h$]h&]uh1jhjzubjX)}(h**Description**h]j)}(hj{h]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMQhjzubjX)}(hLDerive the phy_interface_t mode for the SFP module from the link modes mask.h]hLDerive the phy_interface_t mode for the SFP module from the link modes mask.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMPhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_bus_put (C function) c.sfp_bus_puthNtauh1hhjrhhhNhNubh)}(hhh](h)}(h&void sfp_bus_put (struct sfp_bus *bus)h]h)}(h%void sfp_bus_put(struct sfp_bus *bus)h](j)}(hvoidh]hvoid}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj{hhhj{hMubj)}(h sfp_bus_puth]j%)}(h sfp_bus_puth]h sfp_bus_put}(hj{hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj{ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj{hhhj{hMubj)}(h(struct sfp_bus *bus)h]j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj%|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj"|ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj'|modnameN classnameNjj!)}j$]j')}jj{sb c.sfp_bus_putasbuh1hhj|ubj)}(h h]h }(hjE|hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|ubj;)}(hj>h]h*}(hjS|hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj|ubj%)}(hbush]hbus}(hj`|hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj|ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj{ubah}(h]h ]h"]h$]h&]j<j=uh1jhj{hhhj{hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj{hhhj{hMubah}(h]j{ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj{hMhj{hhubjS)}(hhh]jX)}(h9put a reference on the :c:type:`struct sfp_bus `h](hput a reference on the }(hj|hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hj|h]hstruct sfp_bus}(hj|hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjj!)}j$]jA| c.sfp_bus_putasbjsfp_busuh1hhjyhMMhj|ubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jRhj{hhhj{hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj|jxj|jyjzj{uh1hhhhjrhNhNubj})}(h**Parameters** ``struct sfp_bus *bus`` the :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode() **Description** Put a reference on the :c:type:`struct sfp_bus ` and free the underlying structure if this was the last reference.h](jX)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj|ubj)}(hhh]j)}(h_``struct sfp_bus *bus`` the :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode() h](j)}(h``struct sfp_bus *bus``h]j)}(hj|h]hstruct sfp_bus *bus}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj|ubj)}(hhh]jX)}(hFthe :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode()h](hthe }(hj}hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hj}h]hstruct sfp_bus}(hj}hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj}hMhj}ubh found via sfp_bus_find_fwnode()}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj}hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj|ubjX)}(h**Description**h]j)}(hjM}h]h Description}(hjO}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK}ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj|ubjX)}(h{Put a reference on the :c:type:`struct sfp_bus ` and free the underlying structure if this was the last reference.h](hPut a reference on the }(hjc}hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjm}h]hstruct sfp_bus}(hjo}hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjk}ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjc}ubhB and free the underlying structure if this was the last reference.}(hjc}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj}hMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sfp_get_module_info (C function)c.sfp_get_module_infohNtauh1hhjrhhhNhNubh)}(hhh](h)}(hNint sfp_get_module_info (struct sfp_bus *bus, struct ethtool_modinfo *modinfo)h]h)}(hMint sfp_get_module_info(struct sfp_bus *bus, struct ethtool_modinfo *modinfo)h](j)}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}hhhj}hMubj)}(hsfp_get_module_infoh]j%)}(hsfp_get_module_infoh]hsfp_get_module_info}(hj}hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj}hhhj}hMubj)}(h6(struct sfp_bus *bus, struct ethtool_modinfo *modinfo)h](j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj ~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j')}jj}sbc.sfp_get_module_infoasbuh1hhj}ubj)}(h h]h }(hj0~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}ubj;)}(hj>h]h*}(hj>~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}ubj%)}(hbush]hbus}(hjK~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj}ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubj)}(hstruct ethtool_modinfo *modinfoh](h)}(hjh]hstruct}(hjd~hhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj`~ubj)}(h h]h }(hjq~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`~ubh)}(hhh]j%)}(hethtool_modinfoh]hethtool_modinfo}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj~ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj~modnameN classnameNjj!)}j$]j,~c.sfp_get_module_infoasbuh1hhj`~ubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`~ubj;)}(hj>h]h*}(hj~hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj`~ubj%)}(hmodinfoh]hmodinfo}(hj~hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj`~ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhj}ubeh}(h]h ]h"]h$]h&]j<j=uh1jhj}hhhj}hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj}hhhj}hMubah}(h]j}ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj}hMhj}hhubjS)}(hhh]jX)}(h(Get the ethtool_modinfo for a SFP moduleh]h(Get the ethtool_modinfo for a SFP module}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj~hhubah}(h]h ]h"]h$]h&]uh1jRhj}hhhj}hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj~jxj~jyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module ``struct ethtool_modinfo *modinfo`` a :c:type:`struct ethtool_modinfo ` **Description** Fill in the type and eeprom_len parameters in **modinfo** for a module on the sfp bus specified by **bus**. Returns 0 on success or a negative errno number.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh](j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hj&h]hstruct sfp_bus *bus}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj ubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hj?hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjIh]hstruct sfp_bus}(hjKhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj;hMhj?ubh structure for the sfp module}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjubj)}(hY``struct ethtool_modinfo *modinfo`` a :c:type:`struct ethtool_modinfo ` h](j)}(h#``struct ethtool_modinfo *modinfo``h]j)}(hjh]hstruct ethtool_modinfo *modinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj|ubj)}(hhh]jX)}(h4a :c:type:`struct ethtool_modinfo `h](ha }(hjhhhNhNubh)}(h2:c:type:`struct ethtool_modinfo `h]j)}(hjh]hstruct ethtool_modinfo}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_modinfouh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubjX)}(hkFill in the type and eeprom_len parameters in **modinfo** for a module on the sfp bus specified by **bus**.h](h.Fill in the type and eeprom_len parameters in }(hjhhhNhNubj)}(h **modinfo**h]hmodinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* for a module on the sfp bus specified by }(hjhhhNhNubj)}(h**bus**h]hbus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubjX)}(h0Returns 0 on success or a negative errno number.h]h0Returns 0 on success or a negative errno number.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"sfp_get_module_eeprom (C function)c.sfp_get_module_eepromhNtauh1hhjrhhhNhNubh)}(hhh](h)}(hTint sfp_get_module_eeprom (struct sfp_bus *bus, struct ethtool_eeprom *ee, u8 *data)h]h)}(hSint sfp_get_module_eeprom(struct sfp_bus *bus, struct ethtool_eeprom *ee, u8 *data)h](j)}(hinth]hint}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPhhhjbhMubj)}(hsfp_get_module_eepromh]j%)}(hsfp_get_module_eepromh]hsfp_get_module_eeprom}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjqubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjPhhhjbhMubj)}(h:(struct sfp_bus *bus, struct ethtool_eeprom *ee, u8 *data)h](j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjwsbc.sfp_get_module_eepromasbuh1hhjubj)}(h h]h }(hjπhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj݀hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hstruct ethtool_eeprom *eeh](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hethtool_eepromh]hethtool_eeprom}(hj!hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj#modnameN classnameNjj!)}j$]jˀc.sfp_get_module_eepromasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjMhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(heeh]hee}(hjZhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hu8 *datah](h)}(hhh]j%)}(hu8h]hu8}(hjvhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjsubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjxmodnameN classnameNjj!)}j$]jˀc.sfp_get_module_eepromasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjoubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjoubj%)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjoubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjPhhhjbhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjLhhhjbhMubah}(h]jGah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjbhMhjIhhubjS)}(hhh]jX)}(hRead the SFP module EEPROMh]hRead the SFP module EEPROM}(hjفhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjցhhubah}(h]h ]h"]h$]h&]uh1jRhjIhhhjbhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module ``struct ethtool_eeprom *ee`` a :c:type:`struct ethtool_eeprom ` ``u8 *data`` buffer to contain the EEPROM data (must be at least **ee->len** bytes) **Description** Read the EEPROM as specified by the supplied **ee**. See the documentation for :c:type:`struct ethtool_eeprom ` for the region to be read. Returns 0 on success or a negative errno number.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh](j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hj3hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hj=h]hstruct sfp_bus}(hj?hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj/hMhj3ubh structure for the sfp module}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMhjubj)}(hQ``struct ethtool_eeprom *ee`` a :c:type:`struct ethtool_eeprom ` h](j)}(h``struct ethtool_eeprom *ee``h]j)}(hjvh]hstruct ethtool_eeprom *ee}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjpubj)}(hhh]jX)}(h2a :c:type:`struct ethtool_eeprom `h](ha }(hjhhhNhNubh)}(h0:c:type:`struct ethtool_eeprom `h]j)}(hjh]hstruct ethtool_eeprom}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_eepromuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hT``u8 *data`` buffer to contain the EEPROM data (must be at least **ee->len** bytes) h](j)}(h ``u8 *data``h]j)}(hj΂h]hu8 *data}(hjЂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhĵubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjȂubj)}(hhh]jX)}(hFbuffer to contain the EEPROM data (must be at least **ee->len** bytes)h](h4buffer to contain the EEPROM data (must be at least }(hjhhhNhNubj)}(h **ee->len**h]hee->len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bytes)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȂubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubjX)}(hRead the EEPROM as specified by the supplied **ee**. See the documentation for :c:type:`struct ethtool_eeprom ` for the region to be read.h](h-Read the EEPROM as specified by the supplied }(hj1hhhNhNubj)}(h**ee**h]hee}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh. See the documentation for }(hj1hhhNhNubh)}(h0:c:type:`struct ethtool_eeprom `h]j)}(hjMh]hstruct ethtool_eeprom}(hjOhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_eepromuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj1ubh for the region to be read.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjjhMhjubjX)}(h0Returns 0 on success or a negative errno number.h]h0Returns 0 on success or a negative errno number.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h*sfp_get_module_eeprom_by_page (C function)c.sfp_get_module_eeprom_by_pagehNtauh1hhjrhhhNhNubh)}(hhh](h)}(hint sfp_get_module_eeprom_by_page (struct sfp_bus *bus, const struct ethtool_module_eeprom *page, struct netlink_ext_ack *extack)h]h)}(hint sfp_get_module_eeprom_by_page(struct sfp_bus *bus, const struct ethtool_module_eeprom *page, struct netlink_ext_ack *extack)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hsfp_get_module_eeprom_by_pageh]j%)}(hsfp_get_module_eeprom_by_pageh]hsfp_get_module_eeprom_by_page}(hjŃhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h_(struct sfp_bus *bus, const struct ethtool_module_eeprom *page, struct netlink_ext_ack *extack)h](j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj݃ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj݃ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjǃsbc.sfp_get_module_eeprom_by_pageasbuh1hhj݃ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj݃ubj;)}(hj>h]h*}(hj-hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj݃ubj%)}(hbush]hbus}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj݃ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjكubj)}(h(const struct ethtool_module_eeprom *pageh](h)}(hjh]hconst}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjOubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubh)}(hhh]j%)}(hethtool_module_eepromh]hethtool_module_eeprom}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.sfp_get_module_eeprom_by_pageasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjOubj%)}(hpageh]hpage}(hjńhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjOubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjكubj)}(hstruct netlink_ext_ack *extackh](h)}(hjh]hstruct}(hjބhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjڄubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڄubh)}(hhh]j%)}(hnetlink_ext_ackh]hnetlink_ext_ack}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]jc.sfp_get_module_eeprom_by_pageasbuh1hhjڄubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjڄubj;)}(hj>h]h*}(hj(hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjڄubj%)}(hextackh]hextack}(hj5hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjڄubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjكubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(h&Read a page from the SFP module EEPROMh]h&Read a page from the SFP module EEPROM}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1hhhhjrhNhNubj})}(hXT**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module ``const struct ethtool_module_eeprom *page`` a :c:type:`struct ethtool_module_eeprom ` ``struct netlink_ext_ack *extack`` extack for reporting problems **Description** Read an EEPROM page as specified by the supplied **page**. See the documentation for :c:type:`struct ethtool_module_eeprom ` for the page to be read. Returns 0 on success or a negative errno number. More error information might be provided via extackh](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj{ubj)}(hhh](j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hjhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjÅh]hstruct sfp_bus}(hjŅhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhjhMhjubh structure for the sfp module}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hn``const struct ethtool_module_eeprom *page`` a :c:type:`struct ethtool_module_eeprom ` h](j)}(h,``const struct ethtool_module_eeprom *page``h]j)}(hjh]h(const struct ethtool_module_eeprom *page}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(h@a :c:type:`struct ethtool_module_eeprom `h](ha }(hjhhhNhNubh)}(h>:c:type:`struct ethtool_module_eeprom `h]j)}(hjh]hstruct ethtool_module_eeprom}(hj!hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_module_eepromuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hA``struct netlink_ext_ack *extack`` extack for reporting problems h](j)}(h"``struct netlink_ext_ack *extack``h]j)}(hjTh]hstruct netlink_ext_ack *extack}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjNubj)}(hhh]jX)}(hextack for reporting problemsh]hextack for reporting problems}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj{ubjX)}(hRead an EEPROM page as specified by the supplied **page**. See the documentation for :c:type:`struct ethtool_module_eeprom ` for the page to be read.h](h1Read an EEPROM page as specified by the supplied }(hjhhhNhNubj)}(h**page**h]hpage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. See the documentation for }(hjhhhNhNubh)}(h>:c:type:`struct ethtool_module_eeprom `h]j)}(hjh]hstruct ethtool_module_eeprom}(hjÆhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjethtool_module_eepromuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubh for the page to be read.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjކhMhj{ubjX)}(hdReturns 0 on success or a negative errno number. More error information might be provided via extackh]hdReturns 0 on success or a negative errno number. More error information might be provided via extack}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_upstream_start (C function)c.sfp_upstream_starthNtauh1hhjrhhhNhNubh)}(hhh](h)}(h-void sfp_upstream_start (struct sfp_bus *bus)h]h)}(h,void sfp_upstream_start(struct sfp_bus *bus)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhj&hMubj)}(hsfp_upstream_starth]j%)}(hsfp_upstream_starth]hsfp_upstream_start}(hj9hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj5ubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhj&hMubj)}(h(struct sfp_bus *bus)h]j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjQubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjshhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjpubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjumodnameN classnameNjj!)}j$]j')}jj;sbc.sfp_upstream_startasbuh1hhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjQubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjMubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhj&hMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhj&hMubah}(h]j ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhj&hMhj hhubjS)}(hhh]jX)}(h,Inform the SFP that the network device is uph]h,Inform the SFP that the network device is up}(hj؇hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjՇhhubah}(h]h ]h"]h$]h&]uh1jRhj hhhj&hMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module **Description** Inform the SFP socket that the network device is now up, so that the module can be enabled by allowing TX_DISABLE to be deasserted. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_open() method.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hj2hhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hj<h]hstruct sfp_bus}(hj>hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj.hMhj2ubh structure for the sfp module}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hjwh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubjX)}(hInform the SFP socket that the network device is now up, so that the module can be enabled by allowing TX_DISABLE to be deasserted. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_open() method.h](hInform the SFP socket that the network device is now up, so that the module can be enabled by allowing TX_DISABLE to be deasserted. This should be called from the network device driver’s }(hjhhhNhNubh)}(h0:c:type:`struct net_device_ops `h]j)}(hjh]hstruct net_device_ops}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjnet_device_opsuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubh ndo_open() method.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_upstream_stop (C function)c.sfp_upstream_stophNtauh1hhjrhhhNhNubh)}(hhh](h)}(h,void sfp_upstream_stop (struct sfp_bus *bus)h]h)}(h+void sfp_upstream_stop(struct sfp_bus *bus)h](j)}(hvoidh]hvoid}(hj߈hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۈhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjۈhhhjhM&ubj)}(hsfp_upstream_stoph]j%)}(hsfp_upstream_stoph]hsfp_upstream_stop}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjۈhhhjhM&ubj)}(h(struct sfp_bus *bus)h]j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj:hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj7ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj<modnameN classnameNjj!)}j$]j')}jjsbc.sfp_upstream_stopasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjuhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjۈhhhjhM&ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhj׈hhhjhM&ubah}(h]j҈ah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM&hjԈhhubjS)}(hhh]jX)}(h.Inform the SFP that the network device is downh]h.Inform the SFP that the network device is down}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM&hjhhubah}(h]h ]h"]h$]h&]uh1jRhjԈhhhjhM&ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module **Description** Inform the SFP socket that the network device is now up, so that the module can be disabled by asserting TX_DISABLE, disabling the laser in optical modules. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_stop() method.h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjÉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM*hjubj)}(hhh]j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjމubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM'hjډubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hjhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjh]hstruct sfp_bus}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhjhM'hjubh structure for the sfp module}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjډubeh}(h]h ]h"]h$]h&]uh1jhjhM'hj׉ubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM)hjubjX)}(hXInform the SFP socket that the network device is now up, so that the module can be disabled by asserting TX_DISABLE, disabling the laser in optical modules. This should be called from the network device driver's :c:type:`struct net_device_ops ` ndo_stop() method.h](hInform the SFP socket that the network device is now up, so that the module can be disabled by asserting TX_DISABLE, disabling the laser in optical modules. This should be called from the network device driver’s }(hjThhhNhNubh)}(h0:c:type:`struct net_device_ops `h]j)}(hj^h]hstruct net_device_ops}(hj`hhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjnet_device_opsuh1hhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM(hjTubh ndo_stop() method.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj{hM(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h)sfp_upstream_set_signal_rate (C function)c.sfp_upstream_set_signal_ratehNtauh1hhjrhhhNhNubh)}(hhh](h)}(hNvoid sfp_upstream_set_signal_rate (struct sfp_bus *bus, unsigned int rate_kbd)h]h)}(hMvoid sfp_upstream_set_signal_rate(struct sfp_bus *bus, unsigned int rate_kbd)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM=ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhM=ubj)}(hsfp_upstream_set_signal_rateh]j%)}(hsfp_upstream_set_signal_rateh]hsfp_upstream_set_signal_rate}(hjNJhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjÊubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhM=ubj)}(h,(struct sfp_bus *bus, unsigned int rate_kbd)h](j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjߊubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߊubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjɊsbc.sfp_upstream_set_signal_rateasbuh1hhjߊubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjߊubj;)}(hj>h]h*}(hj/hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjߊubj%)}(hbush]hbus}(hj<hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjߊubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjۊubj)}(hunsigned int rate_kbdh](j)}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj)}(hinth]hint}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQubj%)}(hrate_kbdh]hrate_kbd}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjQubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjۊubeh}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhM=ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhM=ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhM=hjhhubjS)}(hhh]jX)}(hset data signalling rateh]hset data signalling rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM=hjhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhM=ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjϋjxjϋjyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module ``unsigned int rate_kbd`` signalling rate in units of 1000 baud **Description** Configure the rate select settings on the SFP module for the signalling rate (not the same as the data rate). Locks that may be held: Phylink's state_mutex rtnl lock SFP's sm_mutexh](jX)}(h**Parameters**h]j)}(hjًh]h Parameters}(hjۋhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׋ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMAhjӋubj)}(hhh](j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM>hjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hjhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjh]hstruct sfp_bus}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhj hM>hjubh structure for the sfp module}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhj hM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM>hjubj)}(h@``unsigned int rate_kbd`` signalling rate in units of 1000 baud h](j)}(h``unsigned int rate_kbd``h]j)}(hjTh]hunsigned int rate_kbd}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM?hjNubj)}(hhh]jX)}(h%signalling rate in units of 1000 baudh]h%signalling rate in units of 1000 baud}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjihM?hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM?hjubeh}(h]h ]h"]h$]h&]uh1jhjӋubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMAhjӋubjX)}(hmConfigure the rate select settings on the SFP module for the signalling rate (not the same as the data rate).h]hmConfigure the rate select settings on the SFP module for the signalling rate (not the same as the data rate).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM@hjӋubj)}(hhh]j)}(hFLocks that may be held: Phylink's state_mutex rtnl lock SFP's sm_mutexh](j)}(hLocks that may be held:h]hLocks that may be held:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMEhjubj)}(hhh]jX)}(h.Phylink's state_mutex rtnl lock SFP's sm_mutexh]h2Phylink’s state_mutex rtnl lock SFP’s sm_mutex}(hj͌hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMDhjʌubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjɌhMEhjubah}(h]h ]h"]h$]h&]uh1jhjӋubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sfp_bus_find_fwnode (C function)c.sfp_bus_find_fwnodehNtauh1hhjrhhhNhNubh)}(hhh](h)}(hIstruct sfp_bus * sfp_bus_find_fwnode (const struct fwnode_handle *fwnode)h]h)}(hGstruct sfp_bus *sfp_bus_find_fwnode(const struct fwnode_handle *fwnode)h](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMQubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj-hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj*ubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj/modnameN classnameNjj!)}j$]j')}jsfp_bus_find_fwnodesbc.sfp_bus_find_fwnodeasbuh1hhj hhhjhMQubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhjhMQubj;)}(hj>h]h*}(hj\hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj hhhjhMQubj)}(hsfp_bus_find_fwnodeh]j%)}(hjKh]hsfp_bus_find_fwnode}(hjmhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjiubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj hhhjhMQubj)}(h$(const struct fwnode_handle *fwnode)h]j)}(h"const struct fwnode_handle *fwnodeh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjÍmodnameN classnameNjj!)}j$]jIc.sfp_bus_find_fwnodeasbuh1hhjubj)}(h h]h }(hjߍhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hfwnodeh]hfwnode}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj hhhjhMQubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMQubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMQhjhhubjS)}(hhh]jX)}(h(parse and locate the SFP bus from fwnodeh]h(parse and locate the SFP bus from fwnode}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMQhj!hhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMQubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwj<jxj<jyjzj{uh1hhhhjrhNhNubj})}(hX{**Parameters** ``const struct fwnode_handle *fwnode`` firmware node for the parent device (MAC or PHY) **Description** Parse the parent device's firmware node for a SFP bus, and locate the sfp_bus structure, incrementing its reference count. This must be put via sfp_bus_put() when done. - corresponding to the errors detailed for fwnode_property_get_reference_args(). - ``-ENOMEM`` if we failed to allocate the bus. - an error from the upstream's connect_phy() method. **Return** - on success, a pointer to the sfp_bus structure, - ``NULL`` if no SFP is specified, - on failure, an error pointer value:h](jX)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMUhj@ubj)}(hhh]j)}(hX``const struct fwnode_handle *fwnode`` firmware node for the parent device (MAC or PHY) h](j)}(h&``const struct fwnode_handle *fwnode``h]j)}(hjeh]h"const struct fwnode_handle *fwnode}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMRhj_ubj)}(hhh]jX)}(h0firmware node for the parent device (MAC or PHY)h]h0firmware node for the parent device (MAC or PHY)}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzhMRhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhMRhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMThj@ubjX)}(hParse the parent device's firmware node for a SFP bus, and locate the sfp_bus structure, incrementing its reference count. This must be put via sfp_bus_put() when done.h]hParse the parent device’s firmware node for a SFP bus, and locate the sfp_bus structure, incrementing its reference count. This must be put via sfp_bus_put() when done.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMShj@ubj )}(h- corresponding to the errors detailed for fwnode_property_get_reference_args(). - ``-ENOMEM`` if we failed to allocate the bus. - an error from the upstream's connect_phy() method. h]j4H)}(hhh](j9H)}(hNcorresponding to the errors detailed for fwnode_property_get_reference_args().h]jX)}(hNcorresponding to the errors detailed for fwnode_property_get_reference_args().h]hNcorresponding to the errors detailed for fwnode_property_get_reference_args().}(hjЎhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMXhj̎ubah}(h]h ]h"]h$]h&]uh1j8HhjɎubj9H)}(h-``-ENOMEM`` if we failed to allocate the bus.h]jX)}(hjh](j)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh" if we failed to allocate the bus.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMZhjubah}(h]h ]h"]h$]h&]uh1j8HhjɎubj9H)}(h3an error from the upstream's connect_phy() method. h]jX)}(h2an error from the upstream's connect_phy() method.h]h4an error from the upstream’s connect_phy() method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM[hj ubah}(h]h ]h"]h$]h&]uh1j8HhjɎubeh}(h]h ]h"]h$]h&]jIjw-uh1j3HhjގhMXhjŎubah}(h]h ]h"]h$]h&]uh1j hjގhMXhj@ubjX)}(h **Return**h]j)}(hj2h]hReturn}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM]hj@ubj4H)}(hhh](j9H)}(h/on success, a pointer to the sfp_bus structure,h]jX)}(hjMh]h/on success, a pointer to the sfp_bus structure,}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMXhjKubah}(h]h ]h"]h$]h&]uh1j8HhjHubj9H)}(h ``NULL`` if no SFP is specified,h]jX)}(hjeh](j)}(h``NULL``h]hNULL}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh if no SFP is specified,}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMYhjcubah}(h]h ]h"]h$]h&]uh1j8HhjHubj9H)}(h#on failure, an error pointer value:h]jX)}(hjh]h#on failure, an error pointer value:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMZhjubah}(h]h ]h"]h$]h&]uh1j8HhjHubeh}(h]h ]h"]h$]h&]jIjw-uh1j3Hhj\hMXhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!sfp_bus_add_upstream (C function)c.sfp_bus_add_upstreamhNtauh1hhjrhhhNhNubh)}(hhh](h)}(hbint sfp_bus_add_upstream (struct sfp_bus *bus, void *upstream, const struct sfp_upstream_ops *ops)h]h)}(haint sfp_bus_add_upstream(struct sfp_bus *bus, void *upstream, const struct sfp_upstream_ops *ops)h](j)}(hinth]hint}(hjǏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÏhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM~ubj)}(h h]h }(hj֏hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjÏhhhjՏhM~ubj)}(hsfp_bus_add_upstreamh]j%)}(hsfp_bus_add_upstreamh]hsfp_bus_add_upstream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjÏhhhjՏhM~ubj)}(hI(struct sfp_bus *bus, void *upstream, const struct sfp_upstream_ops *ops)7h](j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hj"hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetj$modnameN classnameNjj!)}j$]j')}jjsbc.sfp_bus_add_upstreamasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjPhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hj]hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(hvoid *upstreamh](j)}(hvoidh]hvoid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjrubj%)}(hupstreamh]hupstream}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjrubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubj)}(h"const struct sfp_upstream_ops *opsh](h)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjŐhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hjh]hstruct}(hjӐhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsfp_upstream_opsh]hsfp_upstream_ops}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j>c.sfp_bus_add_upstreamasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hopsh]hops}(hj*hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubeh}(h]h ]h"]h$]h&]j<j=uh1jhjÏhhhjՏhM~ubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjՏhM~ubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjՏhM~hjhhubjS)}(hhh]jX)}(h*parse and register the neighbouring deviceh]h*parse and register the neighbouring device}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chM~hjQhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjՏhM~ubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjljxjljyjzj{uh1hhhhjrhNhNubj})}(hX=**Parameters** ``struct sfp_bus *bus`` the :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode() ``void *upstream`` the upstream private data ``const struct sfp_upstream_ops *ops`` the upstream's :c:type:`struct sfp_upstream_ops ` **Description** Add upstream driver for the SFP bus, and if the bus is complete, register the SFP bus using sfp_register_upstream(). This takes a reference on the bus, so it is safe to put the bus after this call. - corresponding to the errors detailed for fwnode_property_get_reference_args(). - ``-ENOMEM`` if we failed to allocate the bus. - an error from the upstream's connect_phy() method. **Return** - on success, a pointer to the sfp_bus structure, - ``NULL`` if no SFP is specified, - on failure, an error pointer value:h](jX)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjpubj)}(hhh](j)}(h_``struct sfp_bus *bus`` the :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode() h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hFthe :c:type:`struct sfp_bus ` found via sfp_bus_find_fwnode()h](hthe }(hjhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjh]hstruct sfp_bus}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhjhMhjubh found via sfp_bus_find_fwnode()}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``void *upstream`` the upstream private data h](j)}(h``void *upstream``h]j)}(hjh]hvoid *upstream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hthe upstream private datah]hthe upstream private data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hk``const struct sfp_upstream_ops *ops`` the upstream's :c:type:`struct sfp_upstream_ops ` h](j)}(h&``const struct sfp_upstream_ops *ops``h]j)}(hj*h]h"const struct sfp_upstream_ops *ops}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj$ubj)}(hhh]jX)}(hCthe upstream's :c:type:`struct sfp_upstream_ops `h](hthe upstream’s }(hjChhhNhNubh)}(h4:c:type:`struct sfp_upstream_ops `h]j)}(hjMh]hstruct sfp_upstream_ops}(hjOhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_upstream_opsuh1hhj?hMhjCubeh}(h]h ]h"]h$]h&]uh1jWhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubeh}(h]h ]h"]h$]h&]uh1jhjpubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjpubjX)}(hAdd upstream driver for the SFP bus, and if the bus is complete, register the SFP bus using sfp_register_upstream(). This takes a reference on the bus, so it is safe to put the bus after this call.h]hAdd upstream driver for the SFP bus, and if the bus is complete, register the SFP bus using sfp_register_upstream(). This takes a reference on the bus, so it is safe to put the bus after this call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjpubj )}(h- corresponding to the errors detailed for fwnode_property_get_reference_args(). - ``-ENOMEM`` if we failed to allocate the bus. - an error from the upstream's connect_phy() method. h]j4H)}(hhh](j9H)}(hNcorresponding to the errors detailed for fwnode_property_get_reference_args().h]jX)}(hNcorresponding to the errors detailed for fwnode_property_get_reference_args().h]hNcorresponding to the errors detailed for fwnode_property_get_reference_args().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(h-``-ENOMEM`` if we failed to allocate the bus.h]jX)}(hj˒h](j)}(h ``-ENOMEM``h]h-ENOMEM}(hjВhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͒ubh" if we failed to allocate the bus.}(hj͒hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjɒubah}(h]h ]h"]h$]h&]uh1j8Hhjubj9H)}(h3an error from the upstream's connect_phy() method. h]jX)}(h2an error from the upstream's connect_phy() method.h]h4an error from the upstream’s connect_phy() method.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubah}(h]h ]h"]h$]h&]uh1j8Hhjubeh}(h]h ]h"]h$]h&]jIjw-uh1j3Hhj’hMhjubah}(h]h ]h"]h$]h&]uh1j hj’hMhjpubjX)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjpubj4H)}(hhh](j9H)}(h/on success, a pointer to the sfp_bus structure,h]jX)}(hj1h]h/on success, a pointer to the sfp_bus structure,}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj/ubah}(h]h ]h"]h$]h&]uh1j8Hhj,ubj9H)}(h ``NULL`` if no SFP is specified,h]jX)}(hjIh](j)}(h``NULL``h]hNULL}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh if no SFP is specified,}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjGubah}(h]h ]h"]h$]h&]uh1j8Hhj,ubj9H)}(h#on failure, an error pointer value:h]jX)}(hjoh]h#on failure, an error pointer value:}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjmubah}(h]h ]h"]h$]h&]uh1j8Hhj,ubeh}(h]h ]h"]h$]h&]jIjw-uh1j3Hhj@hMhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!sfp_bus_del_upstream (C function)c.sfp_bus_del_upstreamhNtauh1hhjrhhhNhNubh)}(hhh](h)}(h/void sfp_bus_del_upstream (struct sfp_bus *bus)h]h)}(h.void sfp_bus_del_upstream(struct sfp_bus *bus)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMubj)}(hsfp_bus_del_upstreamh]j%)}(hsfp_bus_del_upstreamh]hsfp_bus_del_upstream}(hj̓hhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjȓubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhjhhhjhMubj)}(h(struct sfp_bus *bus)h]j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjΓsbc.sfp_bus_del_upstreamasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj;)}(hj>h]h*}(hj4hhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubj%)}(hbush]hbus}(hjAhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjhhhjhMubah}(h]jah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjhMhjhhubjS)}(hhh]jX)}(hDelete a sfp bush]hDelete a sfp bus}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jRhjhhhjhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjjxjjyjzj{uh1hhhhjrhNhNubj})}(hX **Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module **Description** Delete a previously registered upstream connection for the SFP module. **bus** should have been added by sfp_bus_add_upstream().h](jX)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hjŔhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjϔh]hstruct sfp_bus}(hjєhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhj͔ubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhjhMhjŔubh structure for the sfp module}(hjŔhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhj”ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubjX)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubjX)}(hDelete a previously registered upstream connection for the SFP module. **bus** should have been added by sfp_bus_add_upstream().h](hGDelete a previously registered upstream connection for the SFP module. }(hj hhhNhNubj)}(h**bus**h]hbus}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh2 should have been added by sfp_bus_add_upstream().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hsfp_get_name (C function)c.sfp_get_namehNtauh1hhjrhhhNhNubh)}(hhh](h)}(h/const char * sfp_get_name (struct sfp_bus *bus)h]h)}(h-const char *sfp_get_name(struct sfp_bus *bus)h](h)}(hjh]hconst}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj]hhhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjnhMubj)}(hcharh]hchar}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjnhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhjnhMubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj]hhhjnhMubj)}(h sfp_get_nameh]j%)}(h sfp_get_nameh]h sfp_get_name}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ](j7j8eh"]h$]h&]j<j=uh1jhj]hhhjnhMubj)}(h(struct sfp_bus *bus)h]j)}(hstruct sfp_bus *bush](h)}(hjh]hstruct}(hjƕhhhNhNubah}(h]h ]jah"]h$]h&]uh1hhj•ubj)}(h h]h }(hjӕhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj•ubh)}(hhh]j%)}(hsfp_bush]hsfp_bus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hjubah}(h]h ]h"]h$]h&] refdomainjqreftypej reftargetjmodnameN classnameNjj!)}j$]j')}jjsbc.sfp_get_nameasbuh1hhj•ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj•ubj;)}(hj>h]h*}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj•ubj%)}(hbush]hbus}(hjhhhNhNubah}(h]h ]j0ah"]h$]h&]uh1j$hj•ubeh}(h]h ]h"]h$]h&]noemphj<j=uh1jhjubah}(h]h ]h"]h$]h&]j<j=uh1jhj]hhhjnhMubeh}(h]h ]h"]h$]h&]j<j=jDuh1hjEjFhjYhhhjnhMubah}(h]jTah ](jJjKeh"]h$]h&]jOjP)jQhuh1hhjnhMhjVhhubjS)}(hhh]jX)}(hGet the SFP device nameh]hGet the SFP device name}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jRhjVhhhjnhMubeh}(h]h ](jqfunctioneh"]h$]h&]jvjqjwjajxjajyjzj{uh1hhhhjrhNhNubj})}(hX**Parameters** ``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module **Description** Gets the SFP device's name, if **bus** has a registered socket. Callers must hold RTNL, and the returned name is only valid until RTNL is released. **Return** - The name of the SFP device registered with sfp_register_socket() - ``NULL`` if no device was registered on **bus**h](jX)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjeubj)}(hhh]j)}(hi``struct sfp_bus *bus`` a pointer to the :c:type:`struct sfp_bus ` structure for the sfp module h](j)}(h``struct sfp_bus *bus``h]j)}(hjh]hstruct sfp_bus *bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjubj)}(hhh]jX)}(hPa pointer to the :c:type:`struct sfp_bus ` structure for the sfp moduleh](ha pointer to the }(hjhhhNhNubh)}(h":c:type:`struct sfp_bus `h]j)}(hjh]hstruct sfp_bus}(hjhhhNhNubah}(h]h ](jjqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjqreftypetype refexplicitrefwarnjjjsfp_busuh1hhjhMhjubh structure for the sfp module}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubjX)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjeubjX)}(hGets the SFP device's name, if **bus** has a registered socket. Callers must hold RTNL, and the returned name is only valid until RTNL is released.h](h!Gets the SFP device’s name, if }(hjhhhNhNubj)}(h**bus**h]hbus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhm has a registered socket. Callers must hold RTNL, and the returned name is only valid until RTNL is released.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjeubjX)}(h **Return**h]j)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjeubj4H)}(hhh](j9H)}(h@The name of the SFP device registered with sfp_register_socket()h]jX)}(hj<h]h@The name of the SFP device registered with sfp_register_socket()}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhj:ubah}(h]h ]h"]h$]h&]uh1j8Hhj7ubj9H)}(h/``NULL`` if no device was registered on **bus**h]jX)}(hjTh](j)}(h``NULL``h]hNULL}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh if no device was registered on }(hjVhhhNhNubj)}(h**bus**h]hbus}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jWhZ/var/lib/git/docbuild/linux/Documentation/networking/kapi:161: ./drivers/net/phy/sfp-bus.chMhjRubah}(h]h ]h"]h$]h&]uh1j8Hhj7ubeh}(h]h ]h"]h$]h&]jIjw-uh1j3HhjKhMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjrhhhNhNubeh}(h] sfp-supportah ]h"] sfp supportah$]h&]uh1hhjhhhhhKubeh}(h]network-device-supportah ]h"]network device supportah$]h&]uh1hhhhhhhhKWubeh}(h])linux-networking-and-network-devices-apisah ]h"])linux networking and network devices apisah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjΗerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjXjUjejejpjpjjj~j{jjjnjnjGjDjrj rjju nametypes}(jjjXjejpjj~jjnjGjrjuh}(jhjhjUhhhjxj}jjjej[jxj}j j j j j j jEjJjjjj$jj jB-jG-j.j.j0j0ja2jf2jF4jK4jp6ju6j8j8j:j:j;j;j!=j&=j|>j>j@j@jBjBjEjEjGj$GjHjHjiJjnJjLjLj]OjbOj&Rj+RjTjTjVjVj[Xj`XjZjZj[j[j(]j-]j~_j_jbjbjKdjPdjOfjTfjhjhj4kj9kjmjmjnjnjvpj{pjrjrjtjtjvjvj?yjDyj+|j0|jn~js~jjjjjajfj*j/jjj jjjjqjvjjjjjؘjݘjwj|jj#j3j8jРjՠjܢjj&j+jjj#j(j^jcjjjѮj֮jjjgjlj#j(jjjַj۷jǹj̹jjjjj!j&jjjjjjjjj4j9jIjNj^jcjjjj jjj-j2jjjcjhjjj0j5jEjJjPjUjjjjjjjjjjjBjGjjjjjGjLj_jdjjjjjP jU j&j&jk(jp(j*j*j,j,jK.jP.j.j.j0j0j2j2j24j74j5j5ji7jn7j=9jB9j;j;j=j=jkAjpAjCjCjGj"Gj.Ij3IjCKjHKjLjLj=NjBNjPjPjTjTjWjWj[j[j_j_jAcjFcj#fj(fjijijTkjYkjljljRojWojJqjOqj+tj0tj_wjdwjyjyj{j{j~j~jjjjŁj4j9j߅jjzjj֊jۊjCjHjTjYjjƓjLjQj@jEj˙jЙjVj[jjj j%jjjڣjߣjwj|jcjhjެjj jjjj2j7jjjjjjžjjjj jj"j2j7jjjjjjjjjjj\jajjj jjrjwjjjjj2j7jpjujjj}jjjjBjGjdjijjjjjjjjj,j1jjj j jy j~ jyj~j*j/j?jDjjjjjjj:j?j j j}"j"j_%jd%j'j'jt*jy*jJ-jO-je/jj/j1j1j!3j&3j6j6j9j9j<j<jT?jY?jAjAjCjCj,Ij1IjLjLjOjOjRjRjUjUjXjXjZjZj^j^jajajcjcjpjejejejHijMijkjkjnjnjjpjpjpj)rj.rjksjpsjtjtjvjvjwjwjj|jo|j jjʃjσjjjމjjRjWjʏjϏjYj^jӖjؖjsjxjajfj{jjjjjjjjjjjjejjj`jejjjjjjjjjjjjjajfjjjojtj^jcjjjjjYj^jjjjjj#jJjOjUjZj4j9jjjajfjjjjjjj*j/jjj&j+jjjjjjjijnjjj jjhjmji jn j j j! j& j|jj0j5jjj:j?jjjjj jju jz j"j"j$j$j&j&j)j!)j*j*j-j-jZ/j_/j0j0j[2j`2j3j3j5j5j6j6j8j8j:j:jF<jK<j=j=jH?jM?j7AjDjEjEj*Gj/GjHjHjJjJj0Lj5LjMjMjOjOj RjRjkTjpTjXjXjYjYjZjZj]j]j<`jA`jbjbjgjgjIijNijkjkjljlj ojoj rjrjujujyjyj|j|j~j~jjjڄj߄jjjGjLjjjUjZjjjjjjjHjMjpjujjjjjnjjjjtjyj1j6jjjjjȪjͪj6j;jjjjj]jbjjjjj̽jѽjjjkjpjjjjjjj\jajjj|jjjjjjjjvj{jjj&j+jjjjjjjj#jFjKjjjHjMjjjjjjjTjYjjjjj9j>jjjjj7j<jjjQjVjjj_jdjjjQjVjjjQ jV jz j j j j#j(jjjQjVjjjjjj"jjjgjlj: j? j$j$j-&j2&jW(j\(j;+j@+j-j-j/j/jb1jg1j"4j'4j6j6j8j8jm:jr:j;j;jG>jL>j?j?jAjAjDj DjyFj~FjHjHj?JjDJjNjNjmPjrPjQjQj Sj%SjcUjhUjWjWjXjXjW[j\[jN]jS]jajaj~djdjfjfjhjhjkjkjnjnjpjpjqjqjsjsjujujCwjHwjyjyj|j|j,~j1~jjj,j1jjj.j3jjjVj[jjj}jjjjjj$j)jڑjߑjYj^jjĔj%j*jjj jjjjjjٞjޞjjj;j@jjjjjjj j%jjj!j&jajfjjjj´jٶj޶jjjjjejjjjjDjIjjjjjoj~jjjjjjjjjj=jBjjj- j2 jxj}j jjjjj$jjj5j:jjjjjwj|jjj1 j6 jj"jo"j %j%j'j'j)j)jN+jS+jm-jr-j/j/j1j1j3j3j15j65ju7jz7jw9j|9j<j<j>j>jGAjLAjxDj}DjFjFjGjGjIjIjJjJj1Lj6LjMjMjBOjGOjPjPjmRjrRjSjSjUjUj$Wj)WjXjXj@ZjEZj^j^jajajejejhjhjakjfkjDjnjnjnjpjpjrjrjStjXtjujuj.xj3xjzjzjv}j{}j-j2jjjqjvj̄jфj^jcjbjgj*j/jjjjjjj>jCj;j@jjjhjmjjjjj@jEjjjGjLjȢj͢jKjPj̦jѦjjjϪjԪjPjUjjjjjjjjôjjjjjӺjغj~jjjjUjZj:j?j jj7j<jajfjOjTj=jBjgjljjjjjjjjjj"jjjjjjj)j.jojtjjjjj]jbjjjjjjjjjj jtjyjsjxjrjwjjjjjjjFjKjjjU jZ jjjujzjjjjjojjj jjjj+#j0#j$j$j%j%j<'jA'j(j(j'*j,*j+j+jG-jL-jD/jI/j0j0jU2jZ2j3j3jC5jH5j6j6j7j7jT9jY9j:j:j0<j5<j=j=j2?j7?j@j@j^BjcBjwDj|DjFjFj;Ij@IjKjKjMjMjOjOjQjRj,Tj1Tj%Vj*VjWjWjYjYjCcjHcjdjdjRfjWfj_hjdhjwnj|njojojrjrjbtjgtjvj vjjjbjgj،j݌jdjijjjGjLjjj–jǖjjjjjҮj׮jjj<jAjjjjjjjrjwjjjjjjjjjjjJjOj,j1jjj2j7jjjjjjjjjjjdjijjj>jCjjjjjLjQjjjMjRjjjjjsjxjjj'j,jjjojjj]jbjjj9j>jjjCjHjjjjjjjh jm jf jk jjjjjLjQjjjjjjjYj^jj jjj>jCjjj1"j6"j#j#j%j%j'j'j)j )j*j*j$,j),j-j-j&/j+/j0j0jo3jt3j5j5j7j7jj:jo:jo=jt=j@j@jCjCjSEjXEjGjGjHjHjJjJjgLjlLjOjOjRjRj^UjcUjXjXjYjYj\j\j]j^j_j_jajajPcjUcjejejZgj_gjhjhjjjjjljljknjpnj)qj.qjvtj{tj6xj;xjb{jg{jj"jہjjrjwjwj|jjjjjjjjjejjjכjܛjjj)j.j jjjjjj rjJjjjjjjjjjjjjjjjpjujjjjj_jdjjjjjjjyj~j0j5jjjjjfjkjjjjjjjjjjj2j7jjjjj1j6jjjjjjjjj(j-jUjZj j j j jmjrjhjmjjjajfjjjjj!j!jW$j\$j{'j'j*j*jp,ju,j.j.j0j0jg2jl2jO4jT4j5j5j7j7j5:j::j;j;j=j=j@j@jBjBj3Ej8EjGjGj]IjbIjKjKjMjMjOjOjQjQjBTjGTjXj#XjPZjUZj\j\j^j ^j`j `jcjcjfjfjVij[ijljljnjnjSpjXpjjrj.rj3rjrjrjntjstjFvjKvjTyjYyj{j{j}j}jGjLjjj jj҈j׈jjjjjjjjjTjYu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]jX)}(h:Enumerated list start value not ordinal-1: "8" (ordinal 8)h]h>Enumerated list start value not ordinal-1: “8” (ordinal 8)}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceS/var/lib/git/docbuild/linux/Documentation/networking/kapi:32: ./net/core/datagram.clineMuh1j0hjHubatransform_messages] transformerN include_log] decorationNhhub.