Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'ethtool-generate-uapi-header-from-the-spec'

Stanislav Fomichev says:

====================
ethtool: generate uapi header from the spec

We keep expanding ethtool netlink api surface and this leads to
constantly playing catchup on the ynl spec side. There are a couple
of things that prevent us from fully converting to generating
the header from the spec (stats and cable tests), but we can
generate 95% of the header which is still better than maintaining
c header and spec separately. The series adds a couple of missing
features on the ynl-gen-c side and separates the parts
that we can generate into new ethtool_netlink_generated.h.
====================

Link: https://patch.msgid.link/20241204155549.641348-1-sdf@fomichev.me
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+1253 -941
+346 -12
Documentation/netlink/specs/ethtool.yaml
··· 5 5 protocol: genetlink-legacy 6 6 7 7 doc: Partial family for Ethtool Netlink. 8 + uapi-header: linux/ethtool_netlink_generated.h 8 9 9 10 definitions: 10 11 - ··· 13 12 enum-name: 14 13 type: enum 15 14 entries: [ vxlan, geneve, vxlan-gpe ] 15 + enum-cnt-name: __ethtool-udp-tunnel-type-cnt 16 + render-max: true 16 17 - 17 18 name: stringset 18 19 type: enum 19 20 entries: [] 21 + header: linux/ethtool.h # skip rendering, no actual definition 20 22 - 21 23 name: header-flags 22 24 type: flags 23 - entries: [ compact-bitsets, omit-reply, stats ] 25 + name-prefix: ethtool-flag- 26 + doc: common ethtool header flags 27 + entries: 28 + - 29 + name: compact-bitsets 30 + doc: use compact bitsets in reply 31 + - 32 + name: omit-reply 33 + doc: provide optional reply for SET or ACT requests 34 + - 35 + name: stats 36 + doc: request statistics, if supported by the driver 24 37 - 25 38 name: module-fw-flash-status 26 39 type: enum 27 - entries: [ started, in_progress, completed, error ] 40 + doc: plug-in module firmware flashing status 41 + header: linux/ethtool.h 42 + entries: 43 + - 44 + name: started 45 + doc: The firmware flashing process has started. 46 + - 47 + name: in_progress 48 + doc: The firmware flashing process is in progress. 49 + - 50 + name: completed 51 + doc: The firmware flashing process was completed successfully. 52 + - 53 + name: error 54 + doc: The firmware flashing process was stopped due to an error. 28 55 - 29 56 name: c33-pse-ext-state 30 - enum-name: 57 + doc: "groups of PSE extended states functions. IEEE 802.3-2022 33.2.4.4 Variables" 31 58 type: enum 32 59 name-prefix: ethtool-c33-pse-ext-state- 60 + header: linux/ethtool.h 33 61 entries: 34 - - none 35 - - error-condition 36 - - mr-mps-valid 37 - - mr-pse-enable 38 - - option-detect-ted 39 - - option-vport-lim 40 - - ovld-detected 41 - - power-not-available 42 - - short-detected 62 + - 63 + name: none 64 + doc: none 65 + - 66 + name: error-condition 67 + doc: Group of error_condition states 68 + - 69 + name: mr-mps-valid 70 + doc: Group of mr_mps_valid states 71 + - 72 + name: mr-pse-enable 73 + doc: Group of mr_pse_enable states 74 + - 75 + name: option-detect-ted 76 + doc: Group of option_detect_ted states 77 + - 78 + name: option-vport-lim 79 + doc: Group of option_vport_lim states 80 + - 81 + name: ovld-detected 82 + doc: Group of ovld_detected states 83 + - 84 + name: power-not-available 85 + doc: Group of power_not_available states 86 + - 87 + name: short-detected 88 + doc: Group of short_detected states 43 89 - 44 90 name: phy-upstream-type 45 91 enum-name: 46 92 type: enum 47 93 entries: [ mac, phy ] 94 + - 95 + name: tcp-data-split 96 + type: enum 97 + entries: [ unknown, disabled, enabled ] 48 98 49 99 attribute-sets: 50 100 - 51 101 name: header 102 + attr-cnt-name: __ethtool-a-header-cnt 52 103 attributes: 104 + - 105 + name: unspec 106 + type: unused 107 + value: 0 53 108 - 54 109 name: dev-index 55 110 type: u32 ··· 122 65 123 66 - 124 67 name: bitset-bit 68 + attr-cnt-name: __ethtool-a-bitset-bit-cnt 125 69 attributes: 70 + - 71 + name: unspec 72 + type: unused 73 + value: 0 126 74 - 127 75 name: index 128 76 type: u32 ··· 139 77 type: flag 140 78 - 141 79 name: bitset-bits 80 + attr-cnt-name: __ethtool-a-bitset-bits-cnt 142 81 attributes: 82 + - 83 + name: unspec 84 + type: unused 85 + value: 0 143 86 - 144 87 name: bit 145 88 type: nest ··· 152 85 nested-attributes: bitset-bit 153 86 - 154 87 name: bitset 88 + attr-cnt-name: __ethtool-a-bitset-cnt 155 89 attributes: 90 + - 91 + name: unspec 92 + type: unused 93 + value: 0 156 94 - 157 95 name: nomask 158 96 type: flag ··· 176 104 type: binary 177 105 - 178 106 name: string 107 + attr-cnt-name: __ethtool-a-string-cnt 179 108 attributes: 109 + - 110 + name: unspec 111 + type: unused 112 + value: 0 180 113 - 181 114 name: index 182 115 type: u32 ··· 190 113 type: string 191 114 - 192 115 name: strings 116 + attr-cnt-name: __ethtool-a-strings-cnt 193 117 attributes: 118 + - 119 + name: unspec 120 + type: unused 121 + value: 0 122 + - 123 + name: unspec 124 + type: unused 125 + value: 0 194 126 - 195 127 name: string 196 128 type: nest ··· 207 121 nested-attributes: string 208 122 - 209 123 name: stringset 124 + attr-cnt-name: __ethtool-a-stringset-cnt 210 125 attributes: 126 + - 127 + name: unspec 128 + type: unused 129 + value: 0 211 130 - 212 131 name: id 213 132 type: u32 ··· 226 135 nested-attributes: strings 227 136 - 228 137 name: stringsets 138 + attr-cnt-name: __ethtool-a-stringsets-cnt 229 139 attributes: 140 + - 141 + name: unspec 142 + type: unused 143 + value: 0 230 144 - 231 145 name: stringset 232 146 type: nest ··· 239 143 nested-attributes: stringset 240 144 - 241 145 name: strset 146 + attr-cnt-name: __ethtool-a-strset-cnt 242 147 attributes: 148 + - 149 + name: unspec 150 + type: unused 151 + value: 0 243 152 - 244 153 name: header 245 154 type: nest ··· 259 158 260 159 - 261 160 name: privflags 161 + attr-cnt-name: __ethtool-a-privflags-cnt 262 162 attributes: 163 + - 164 + name: unspec 165 + type: unused 166 + value: 0 263 167 - 264 168 name: header 265 169 type: nest ··· 276 170 277 171 - 278 172 name: rings 173 + attr-cnt-name: __ethtool-a-rings-cnt 279 174 attributes: 175 + - 176 + name: unspec 177 + type: unused 178 + value: 0 280 179 - 281 180 name: header 282 181 type: nest ··· 316 205 - 317 206 name: tcp-data-split 318 207 type: u8 208 + enum: tcp-data-split 319 209 - 320 210 name: cqe-size 321 211 type: u32 ··· 335 223 336 224 - 337 225 name: mm-stat 226 + attr-cnt-name: __ethtool-a-mm-stat-cnt 227 + doc: MAC Merge (802.3) 338 228 attributes: 229 + - 230 + name: unspec 231 + type: unused 232 + value: 0 339 233 - 340 234 name: pad 341 235 type: pad 342 236 - 343 237 name: reassembly-errors 238 + doc: aMACMergeFrameAssErrorCount 344 239 type: u64 345 240 - 346 241 name: smd-errors 242 + doc: aMACMergeFrameSmdErrorCount 347 243 type: u64 348 244 - 349 245 name: reassembly-ok 246 + doc: aMACMergeFrameAssOkCount 350 247 type: u64 351 248 - 352 249 name: rx-frag-count 250 + doc: aMACMergeFragCountRx 353 251 type: u64 354 252 - 355 253 name: tx-frag-count 254 + doc: aMACMergeFragCountTx 356 255 type: u64 357 256 - 358 257 name: hold-count 258 + doc: aMACMergeHoldCount 359 259 type: u64 360 260 - 361 261 name: mm 262 + attr-cnt-name: __ethtool-a-mm-cnt 362 263 attributes: 264 + - 265 + name: unspec 266 + type: unused 267 + value: 0 363 268 - 364 269 name: header 365 270 type: nest ··· 414 285 nested-attributes: mm-stat 415 286 - 416 287 name: linkinfo 288 + attr-cnt-name: __ethtool-a-linkinfo-cnt 417 289 attributes: 290 + - 291 + name: unspec 292 + type: unused 293 + value: 0 418 294 - 419 295 name: header 420 296 type: nest ··· 441 307 type: u8 442 308 - 443 309 name: linkmodes 310 + attr-cnt-name: __ethtool-a-linkmodes-cnt 444 311 attributes: 312 + - 313 + name: unspec 314 + type: unused 315 + value: 0 445 316 - 446 317 name: header 447 318 type: nest ··· 482 343 type: u8 483 344 - 484 345 name: linkstate 346 + attr-cnt-name: __ethtool-a-linkstate-cnt 485 347 attributes: 348 + - 349 + name: unspec 350 + type: unused 351 + value: 0 486 352 - 487 353 name: header 488 354 type: nest ··· 512 368 type: u32 513 369 - 514 370 name: debug 371 + attr-cnt-name: __ethtool-a-debug-cnt 515 372 attributes: 373 + - 374 + name: unspec 375 + type: unused 376 + value: 0 516 377 - 517 378 name: header 518 379 type: nest ··· 528 379 nested-attributes: bitset 529 380 - 530 381 name: wol 382 + attr-cnt-name: __ethtool-a-wol-cnt 531 383 attributes: 384 + - 385 + name: unspec 386 + type: unused 387 + value: 0 532 388 - 533 389 name: header 534 390 type: nest ··· 547 393 type: binary 548 394 - 549 395 name: features 396 + attr-cnt-name: __ethtool-a-features-cnt 550 397 attributes: 398 + - 399 + name: unspec 400 + type: unused 401 + value: 0 551 402 - 552 403 name: header 553 404 type: nest ··· 575 416 nested-attributes: bitset 576 417 - 577 418 name: channels 419 + attr-cnt-name: __ethtool-a-channels-cnt 578 420 attributes: 421 + - 422 + name: unspec 423 + type: unused 424 + value: 0 579 425 - 580 426 name: header 581 427 type: nest ··· 612 448 613 449 - 614 450 name: irq-moderation 451 + attr-cnt-name: __ethtool-a-irq-moderation-cnt 615 452 attributes: 453 + - 454 + name: unspec 455 + type: unused 456 + value: 0 616 457 - 617 458 name: usec 618 459 type: u32 ··· 629 460 type: u32 630 461 - 631 462 name: profile 463 + attr-cnt-name: __ethtool-a-profile-cnt 632 464 attributes: 465 + - 466 + name: unspec 467 + type: unused 468 + value: 0 633 469 - 634 470 name: irq-moderation 635 471 type: nest ··· 642 468 nested-attributes: irq-moderation 643 469 - 644 470 name: coalesce 471 + attr-cnt-name: __ethtool-a-coalesce-cnt 645 472 attributes: 473 + - 474 + name: unspec 475 + type: unused 476 + value: 0 646 477 - 647 478 name: header 648 479 type: nest ··· 744 565 745 566 - 746 567 name: pause-stat 568 + attr-cnt-name: __ethtool-a-pause-stat-cnt 747 569 attributes: 570 + - 571 + name: unspec 572 + type: unused 573 + value: 0 748 574 - 749 575 name: pad 750 576 type: pad ··· 761 577 type: u64 762 578 - 763 579 name: pause 580 + attr-cnt-name: __ethtool-a-pause-cnt 764 581 attributes: 582 + - 583 + name: unspec 584 + type: unused 585 + value: 0 765 586 - 766 587 name: header 767 588 type: nest ··· 789 600 type: u32 790 601 - 791 602 name: eee 603 + attr-cnt-name: __ethtool-a-eee-cnt 792 604 attributes: 605 + - 606 + name: unspec 607 + type: unused 608 + value: 0 793 609 - 794 610 name: header 795 611 type: nest ··· 821 627 type: u32 822 628 - 823 629 name: ts-stat 630 + attr-cnt-name: __ethtool-a-ts-stat-cnt 824 631 attributes: 632 + - 633 + name: unspec 634 + type: unused 635 + value: 0 825 636 - 826 637 name: tx-pkts 827 638 type: uint ··· 838 639 type: uint 839 640 - 840 641 name: tsinfo 642 + attr-cnt-name: __ethtool-a-tsinfo-cnt 841 643 attributes: 644 + - 645 + name: unspec 646 + type: unused 647 + value: 0 842 648 - 843 649 name: header 844 650 type: nest ··· 869 665 nested-attributes: ts-stat 870 666 - 871 667 name: cable-result 668 + attr-cnt-name: __ethtool-a-cable-result-cnt 872 669 attributes: 873 670 - 671 + name: unspec 672 + type: unused 673 + value: 0 674 + - 874 675 name: pair 676 + doc: ETHTOOL_A_CABLE_PAIR 875 677 type: u8 876 678 - 877 679 name: code 680 + doc: ETHTOOL_A_CABLE_RESULT_CODE 878 681 type: u8 879 682 - 880 683 name: src 684 + doc: ETHTOOL_A_CABLE_INF_SRC 881 685 type: u32 882 686 - 883 687 name: cable-fault-length 688 + attr-cnt-name: __ethtool-a-cable-fault-length-cnt 884 689 attributes: 690 + - 691 + name: unspec 692 + type: unused 693 + value: 0 885 694 - 886 695 name: pair 887 696 type: u8 ··· 906 689 type: u32 907 690 - 908 691 name: cable-nest 692 + attr-cnt-name: __ethtool-a-cable-nest-cnt 909 693 attributes: 694 + - 695 + name: unspec 696 + type: unused 697 + value: 0 910 698 - 911 699 name: result 912 700 type: nest ··· 922 700 nested-attributes: cable-fault-length 923 701 - 924 702 name: cable-test 703 + attr-cnt-name: __ethtool-a-cable-test-cnt 925 704 attributes: 705 + - 706 + name: unspec 707 + type: unused 708 + value: 0 926 709 - 927 710 name: header 928 711 type: nest 929 712 nested-attributes: header 930 713 - 931 714 name: cable-test-ntf 715 + attr-cnt-name: __ethtool-a-cable-test-ntf-cnt 932 716 attributes: 717 + - 718 + name: unspec 719 + type: unused 720 + value: 0 933 721 - 934 722 name: header 935 723 type: nest 936 724 nested-attributes: header 937 725 - 938 726 name: status 727 + doc: _STARTED/_COMPLETE 939 728 type: u8 940 729 - 941 730 name: nest ··· 954 721 nested-attributes: cable-nest 955 722 - 956 723 name: cable-test-tdr-cfg 724 + attr-cnt-name: __ethtool-a-cable-test-tdr-cfg-cnt 957 725 attributes: 726 + - 727 + name: unspec 728 + type: unused 729 + value: 0 958 730 - 959 731 name: first 960 732 type: u32 ··· 974 736 type: u8 975 737 - 976 738 name: cable-test-tdr-ntf 739 + attr-cnt-name: __ethtool-a-cable-test-tdr-ntf-cnt 977 740 attributes: 741 + - 742 + name: unspec 743 + type: unused 744 + value: 0 978 745 - 979 746 name: header 980 747 type: nest ··· 993 750 nested-attributes: cable-nest 994 751 - 995 752 name: cable-test-tdr 753 + attr-cnt-name: __ethtool-a-cable-test-tdr-cnt 996 754 attributes: 755 + - 756 + name: unspec 757 + type: unused 758 + value: 0 997 759 - 998 760 name: header 999 761 type: nest ··· 1009 761 nested-attributes: cable-test-tdr-cfg 1010 762 - 1011 763 name: tunnel-udp-entry 764 + attr-cnt-name: __ethtool-a-tunnel-udp-entry-cnt 1012 765 attributes: 766 + - 767 + name: unspec 768 + type: unused 769 + value: 0 1013 770 - 1014 771 name: port 1015 772 type: u16 ··· 1025 772 enum: udp-tunnel-type 1026 773 - 1027 774 name: tunnel-udp-table 775 + attr-cnt-name: __ethtool-a-tunnel-udp-table-cnt 1028 776 attributes: 777 + - 778 + name: unspec 779 + type: unused 780 + value: 0 1029 781 - 1030 782 name: size 1031 783 type: u32 ··· 1045 787 nested-attributes: tunnel-udp-entry 1046 788 - 1047 789 name: tunnel-udp 790 + attr-cnt-name: __ethtool-a-tunnel-udp-cnt 1048 791 attributes: 792 + - 793 + name: unspec 794 + type: unused 795 + value: 0 1049 796 - 1050 797 name: table 1051 798 type: nest 1052 799 nested-attributes: tunnel-udp-table 1053 800 - 1054 801 name: tunnel-info 802 + attr-cnt-name: __ethtool-a-tunnel-info-cnt 1055 803 attributes: 804 + - 805 + name: unspec 806 + type: unused 807 + value: 0 1056 808 - 1057 809 name: header 1058 810 type: nest ··· 1073 805 nested-attributes: tunnel-udp 1074 806 - 1075 807 name: fec-stat 808 + attr-cnt-name: __ethtool-a-fec-stat-cnt 1076 809 attributes: 810 + - 811 + name: unspec 812 + type: unused 813 + value: 0 1077 814 - 1078 815 name: pad 1079 816 type: pad ··· 1096 823 sub-type: u64 1097 824 - 1098 825 name: fec 826 + attr-cnt-name: __ethtool-a-fec-cnt 1099 827 attributes: 828 + - 829 + name: unspec 830 + type: unused 831 + value: 0 1100 832 - 1101 833 name: header 1102 834 type: nest ··· 1122 844 nested-attributes: fec-stat 1123 845 - 1124 846 name: module-eeprom 847 + attr-cnt-name: __ethtool-a-module-eeprom-cnt 1125 848 attributes: 849 + - 850 + name: unspec 851 + type: unused 852 + value: 0 1126 853 - 1127 854 name: header 1128 855 type: nest ··· 1152 869 type: binary 1153 870 - 1154 871 name: stats-grp 872 + attr-cnt-name: __ethtool-a-stats-grp-cnt 1155 873 attributes: 874 + - 875 + name: unspec 876 + type: unused 877 + value: 0 1156 878 - 1157 879 name: pad 1158 880 type: pad ··· 1200 912 name: hist-val 1201 913 - 1202 914 name: stats 915 + attr-cnt-name: __ethtool-a-stats-cnt 1203 916 attributes: 917 + - 918 + name: unspec 919 + type: unused 920 + value: 0 1204 921 - 1205 922 name: pad 1206 923 type: pad ··· 1226 933 type: u32 1227 934 - 1228 935 name: phc-vclocks 936 + attr-cnt-name: __ethtool-a-phc-vclocks-cnt 1229 937 attributes: 938 + - 939 + name: unspec 940 + type: unused 941 + value: 0 1230 942 - 1231 943 name: header 1232 944 type: nest ··· 1245 947 sub-type: s32 1246 948 - 1247 949 name: module 950 + attr-cnt-name: __ethtool-a-module-cnt 1248 951 attributes: 952 + - 953 + name: unspec 954 + type: unused 955 + value: 0 1249 956 - 1250 957 name: header 1251 958 type: nest ··· 1263 960 type: u8 1264 961 - 1265 962 name: c33-pse-pw-limit 963 + attr-cnt-name: __ethtool-a-c33-pse-pw-limit-cnt 964 + attr-max-name: __ethtool-a-c33-pse-pw-limit-max 1266 965 attributes: 966 + - 967 + name: unspec 968 + type: unused 969 + value: 0 1267 970 - 1268 971 name: min 1269 972 type: u32 ··· 1278 969 type: u32 1279 970 - 1280 971 name: pse 972 + attr-cnt-name: __ethtool-a-pse-cnt 1281 973 attributes: 974 + - 975 + name: unspec 976 + type: unused 977 + value: 0 1282 978 - 1283 979 name: header 1284 980 type: nest ··· 1341 1027 nested-attributes: c33-pse-pw-limit 1342 1028 - 1343 1029 name: rss 1030 + attr-cnt-name: __ethtool-a-rss-cnt 1344 1031 attributes: 1032 + - 1033 + name: unspec 1034 + type: unused 1035 + value: 0 1345 1036 - 1346 1037 name: header 1347 1038 type: nest ··· 1372 1053 type: u32 1373 1054 - 1374 1055 name: plca 1056 + attr-cnt-name: __ethtool-a-plca-cnt 1375 1057 attributes: 1058 + - 1059 + name: unspec 1060 + type: unused 1061 + value: 0 1376 1062 - 1377 1063 name: header 1378 1064 type: nest ··· 1408 1084 type: u32 1409 1085 - 1410 1086 name: module-fw-flash 1087 + attr-cnt-name: __ethtool-a-module-fw-flash-cnt 1411 1088 attributes: 1089 + - 1090 + name: unspec 1091 + type: unused 1092 + value: 0 1412 1093 - 1413 1094 name: header 1414 1095 type: nest ··· 1439 1110 type: uint 1440 1111 - 1441 1112 name: phy 1113 + attr-cnt-name: __ethtool-a-phy-cnt 1442 1114 attributes: 1115 + - 1116 + name: unspec 1117 + type: unused 1118 + value: 0 1443 1119 - 1444 1120 name: header 1445 1121 type: nest
+3 -1
Documentation/userspace-api/netlink/c-code-gen.rst
··· 56 56 portion of the entry name. 57 57 58 58 Boolean ``render-max`` controls creation of the max values 59 - (which are enabled by default for attribute enums). 59 + (which are enabled by default for attribute enums). These max 60 + values are named ``__$pfx-MAX`` and ``$pfx-MAX``. The name 61 + of the first value can be overridden via ``enum-cnt-name`` property. 60 62 61 63 Attributes 62 64 ==========
+1 -1
MAINTAINERS
··· 16280 16280 F: include/linux/netdev* 16281 16281 F: include/linux/platform_data/wiznet.h 16282 16282 F: include/uapi/linux/cn_proc.h 16283 - F: include/uapi/linux/ethtool_netlink.h 16283 + F: include/uapi/linux/ethtool_netlink* 16284 16284 F: include/uapi/linux/if_* 16285 16285 F: include/uapi/linux/net_shaper.h 16286 16286 F: include/uapi/linux/netdev*
+1 -892
include/uapi/linux/ethtool_netlink.h
··· 10 10 #define _UAPI_LINUX_ETHTOOL_NETLINK_H_ 11 11 12 12 #include <linux/ethtool.h> 13 - 14 - /* message types - userspace to kernel */ 15 - enum { 16 - ETHTOOL_MSG_USER_NONE, 17 - ETHTOOL_MSG_STRSET_GET, 18 - ETHTOOL_MSG_LINKINFO_GET, 19 - ETHTOOL_MSG_LINKINFO_SET, 20 - ETHTOOL_MSG_LINKMODES_GET, 21 - ETHTOOL_MSG_LINKMODES_SET, 22 - ETHTOOL_MSG_LINKSTATE_GET, 23 - ETHTOOL_MSG_DEBUG_GET, 24 - ETHTOOL_MSG_DEBUG_SET, 25 - ETHTOOL_MSG_WOL_GET, 26 - ETHTOOL_MSG_WOL_SET, 27 - ETHTOOL_MSG_FEATURES_GET, 28 - ETHTOOL_MSG_FEATURES_SET, 29 - ETHTOOL_MSG_PRIVFLAGS_GET, 30 - ETHTOOL_MSG_PRIVFLAGS_SET, 31 - ETHTOOL_MSG_RINGS_GET, 32 - ETHTOOL_MSG_RINGS_SET, 33 - ETHTOOL_MSG_CHANNELS_GET, 34 - ETHTOOL_MSG_CHANNELS_SET, 35 - ETHTOOL_MSG_COALESCE_GET, 36 - ETHTOOL_MSG_COALESCE_SET, 37 - ETHTOOL_MSG_PAUSE_GET, 38 - ETHTOOL_MSG_PAUSE_SET, 39 - ETHTOOL_MSG_EEE_GET, 40 - ETHTOOL_MSG_EEE_SET, 41 - ETHTOOL_MSG_TSINFO_GET, 42 - ETHTOOL_MSG_CABLE_TEST_ACT, 43 - ETHTOOL_MSG_CABLE_TEST_TDR_ACT, 44 - ETHTOOL_MSG_TUNNEL_INFO_GET, 45 - ETHTOOL_MSG_FEC_GET, 46 - ETHTOOL_MSG_FEC_SET, 47 - ETHTOOL_MSG_MODULE_EEPROM_GET, 48 - ETHTOOL_MSG_STATS_GET, 49 - ETHTOOL_MSG_PHC_VCLOCKS_GET, 50 - ETHTOOL_MSG_MODULE_GET, 51 - ETHTOOL_MSG_MODULE_SET, 52 - ETHTOOL_MSG_PSE_GET, 53 - ETHTOOL_MSG_PSE_SET, 54 - ETHTOOL_MSG_RSS_GET, 55 - ETHTOOL_MSG_PLCA_GET_CFG, 56 - ETHTOOL_MSG_PLCA_SET_CFG, 57 - ETHTOOL_MSG_PLCA_GET_STATUS, 58 - ETHTOOL_MSG_MM_GET, 59 - ETHTOOL_MSG_MM_SET, 60 - ETHTOOL_MSG_MODULE_FW_FLASH_ACT, 61 - ETHTOOL_MSG_PHY_GET, 62 - 63 - /* add new constants above here */ 64 - __ETHTOOL_MSG_USER_CNT, 65 - ETHTOOL_MSG_USER_MAX = __ETHTOOL_MSG_USER_CNT - 1 66 - }; 67 - 68 - /* message types - kernel to userspace */ 69 - enum { 70 - ETHTOOL_MSG_KERNEL_NONE, 71 - ETHTOOL_MSG_STRSET_GET_REPLY, 72 - ETHTOOL_MSG_LINKINFO_GET_REPLY, 73 - ETHTOOL_MSG_LINKINFO_NTF, 74 - ETHTOOL_MSG_LINKMODES_GET_REPLY, 75 - ETHTOOL_MSG_LINKMODES_NTF, 76 - ETHTOOL_MSG_LINKSTATE_GET_REPLY, 77 - ETHTOOL_MSG_DEBUG_GET_REPLY, 78 - ETHTOOL_MSG_DEBUG_NTF, 79 - ETHTOOL_MSG_WOL_GET_REPLY, 80 - ETHTOOL_MSG_WOL_NTF, 81 - ETHTOOL_MSG_FEATURES_GET_REPLY, 82 - ETHTOOL_MSG_FEATURES_SET_REPLY, 83 - ETHTOOL_MSG_FEATURES_NTF, 84 - ETHTOOL_MSG_PRIVFLAGS_GET_REPLY, 85 - ETHTOOL_MSG_PRIVFLAGS_NTF, 86 - ETHTOOL_MSG_RINGS_GET_REPLY, 87 - ETHTOOL_MSG_RINGS_NTF, 88 - ETHTOOL_MSG_CHANNELS_GET_REPLY, 89 - ETHTOOL_MSG_CHANNELS_NTF, 90 - ETHTOOL_MSG_COALESCE_GET_REPLY, 91 - ETHTOOL_MSG_COALESCE_NTF, 92 - ETHTOOL_MSG_PAUSE_GET_REPLY, 93 - ETHTOOL_MSG_PAUSE_NTF, 94 - ETHTOOL_MSG_EEE_GET_REPLY, 95 - ETHTOOL_MSG_EEE_NTF, 96 - ETHTOOL_MSG_TSINFO_GET_REPLY, 97 - ETHTOOL_MSG_CABLE_TEST_NTF, 98 - ETHTOOL_MSG_CABLE_TEST_TDR_NTF, 99 - ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY, 100 - ETHTOOL_MSG_FEC_GET_REPLY, 101 - ETHTOOL_MSG_FEC_NTF, 102 - ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY, 103 - ETHTOOL_MSG_STATS_GET_REPLY, 104 - ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY, 105 - ETHTOOL_MSG_MODULE_GET_REPLY, 106 - ETHTOOL_MSG_MODULE_NTF, 107 - ETHTOOL_MSG_PSE_GET_REPLY, 108 - ETHTOOL_MSG_RSS_GET_REPLY, 109 - ETHTOOL_MSG_PLCA_GET_CFG_REPLY, 110 - ETHTOOL_MSG_PLCA_GET_STATUS_REPLY, 111 - ETHTOOL_MSG_PLCA_NTF, 112 - ETHTOOL_MSG_MM_GET_REPLY, 113 - ETHTOOL_MSG_MM_NTF, 114 - ETHTOOL_MSG_MODULE_FW_FLASH_NTF, 115 - ETHTOOL_MSG_PHY_GET_REPLY, 116 - ETHTOOL_MSG_PHY_NTF, 117 - 118 - /* add new constants above here */ 119 - __ETHTOOL_MSG_KERNEL_CNT, 120 - ETHTOOL_MSG_KERNEL_MAX = __ETHTOOL_MSG_KERNEL_CNT - 1 121 - }; 122 - 123 - /* request header */ 124 - 125 - enum ethtool_header_flags { 126 - ETHTOOL_FLAG_COMPACT_BITSETS = 1 << 0, /* use compact bitsets in reply */ 127 - ETHTOOL_FLAG_OMIT_REPLY = 1 << 1, /* provide optional reply for SET or ACT requests */ 128 - ETHTOOL_FLAG_STATS = 1 << 2, /* request statistics, if supported by the driver */ 129 - }; 13 + #include <linux/ethtool_netlink_generated.h> 130 14 131 15 #define ETHTOOL_FLAG_ALL (ETHTOOL_FLAG_COMPACT_BITSETS | \ 132 16 ETHTOOL_FLAG_OMIT_REPLY | \ 133 17 ETHTOOL_FLAG_STATS) 134 - 135 - enum { 136 - ETHTOOL_A_HEADER_UNSPEC, 137 - ETHTOOL_A_HEADER_DEV_INDEX, /* u32 */ 138 - ETHTOOL_A_HEADER_DEV_NAME, /* string */ 139 - ETHTOOL_A_HEADER_FLAGS, /* u32 - ETHTOOL_FLAG_* */ 140 - ETHTOOL_A_HEADER_PHY_INDEX, /* u32 */ 141 - 142 - /* add new constants above here */ 143 - __ETHTOOL_A_HEADER_CNT, 144 - ETHTOOL_A_HEADER_MAX = __ETHTOOL_A_HEADER_CNT - 1 145 - }; 146 - 147 - /* bit sets */ 148 - 149 - enum { 150 - ETHTOOL_A_BITSET_BIT_UNSPEC, 151 - ETHTOOL_A_BITSET_BIT_INDEX, /* u32 */ 152 - ETHTOOL_A_BITSET_BIT_NAME, /* string */ 153 - ETHTOOL_A_BITSET_BIT_VALUE, /* flag */ 154 - 155 - /* add new constants above here */ 156 - __ETHTOOL_A_BITSET_BIT_CNT, 157 - ETHTOOL_A_BITSET_BIT_MAX = __ETHTOOL_A_BITSET_BIT_CNT - 1 158 - }; 159 - 160 - enum { 161 - ETHTOOL_A_BITSET_BITS_UNSPEC, 162 - ETHTOOL_A_BITSET_BITS_BIT, /* nest - _A_BITSET_BIT_* */ 163 - 164 - /* add new constants above here */ 165 - __ETHTOOL_A_BITSET_BITS_CNT, 166 - ETHTOOL_A_BITSET_BITS_MAX = __ETHTOOL_A_BITSET_BITS_CNT - 1 167 - }; 168 - 169 - enum { 170 - ETHTOOL_A_BITSET_UNSPEC, 171 - ETHTOOL_A_BITSET_NOMASK, /* flag */ 172 - ETHTOOL_A_BITSET_SIZE, /* u32 */ 173 - ETHTOOL_A_BITSET_BITS, /* nest - _A_BITSET_BITS_* */ 174 - ETHTOOL_A_BITSET_VALUE, /* binary */ 175 - ETHTOOL_A_BITSET_MASK, /* binary */ 176 - 177 - /* add new constants above here */ 178 - __ETHTOOL_A_BITSET_CNT, 179 - ETHTOOL_A_BITSET_MAX = __ETHTOOL_A_BITSET_CNT - 1 180 - }; 181 - 182 - /* string sets */ 183 - 184 - enum { 185 - ETHTOOL_A_STRING_UNSPEC, 186 - ETHTOOL_A_STRING_INDEX, /* u32 */ 187 - ETHTOOL_A_STRING_VALUE, /* string */ 188 - 189 - /* add new constants above here */ 190 - __ETHTOOL_A_STRING_CNT, 191 - ETHTOOL_A_STRING_MAX = __ETHTOOL_A_STRING_CNT - 1 192 - }; 193 - 194 - enum { 195 - ETHTOOL_A_STRINGS_UNSPEC, 196 - ETHTOOL_A_STRINGS_STRING, /* nest - _A_STRINGS_* */ 197 - 198 - /* add new constants above here */ 199 - __ETHTOOL_A_STRINGS_CNT, 200 - ETHTOOL_A_STRINGS_MAX = __ETHTOOL_A_STRINGS_CNT - 1 201 - }; 202 - 203 - enum { 204 - ETHTOOL_A_STRINGSET_UNSPEC, 205 - ETHTOOL_A_STRINGSET_ID, /* u32 */ 206 - ETHTOOL_A_STRINGSET_COUNT, /* u32 */ 207 - ETHTOOL_A_STRINGSET_STRINGS, /* nest - _A_STRINGS_* */ 208 - 209 - /* add new constants above here */ 210 - __ETHTOOL_A_STRINGSET_CNT, 211 - ETHTOOL_A_STRINGSET_MAX = __ETHTOOL_A_STRINGSET_CNT - 1 212 - }; 213 - 214 - enum { 215 - ETHTOOL_A_STRINGSETS_UNSPEC, 216 - ETHTOOL_A_STRINGSETS_STRINGSET, /* nest - _A_STRINGSET_* */ 217 - 218 - /* add new constants above here */ 219 - __ETHTOOL_A_STRINGSETS_CNT, 220 - ETHTOOL_A_STRINGSETS_MAX = __ETHTOOL_A_STRINGSETS_CNT - 1 221 - }; 222 - 223 - /* STRSET */ 224 - 225 - enum { 226 - ETHTOOL_A_STRSET_UNSPEC, 227 - ETHTOOL_A_STRSET_HEADER, /* nest - _A_HEADER_* */ 228 - ETHTOOL_A_STRSET_STRINGSETS, /* nest - _A_STRINGSETS_* */ 229 - ETHTOOL_A_STRSET_COUNTS_ONLY, /* flag */ 230 - 231 - /* add new constants above here */ 232 - __ETHTOOL_A_STRSET_CNT, 233 - ETHTOOL_A_STRSET_MAX = __ETHTOOL_A_STRSET_CNT - 1 234 - }; 235 - 236 - /* LINKINFO */ 237 - 238 - enum { 239 - ETHTOOL_A_LINKINFO_UNSPEC, 240 - ETHTOOL_A_LINKINFO_HEADER, /* nest - _A_HEADER_* */ 241 - ETHTOOL_A_LINKINFO_PORT, /* u8 */ 242 - ETHTOOL_A_LINKINFO_PHYADDR, /* u8 */ 243 - ETHTOOL_A_LINKINFO_TP_MDIX, /* u8 */ 244 - ETHTOOL_A_LINKINFO_TP_MDIX_CTRL, /* u8 */ 245 - ETHTOOL_A_LINKINFO_TRANSCEIVER, /* u8 */ 246 - 247 - /* add new constants above here */ 248 - __ETHTOOL_A_LINKINFO_CNT, 249 - ETHTOOL_A_LINKINFO_MAX = __ETHTOOL_A_LINKINFO_CNT - 1 250 - }; 251 - 252 - /* LINKMODES */ 253 - 254 - enum { 255 - ETHTOOL_A_LINKMODES_UNSPEC, 256 - ETHTOOL_A_LINKMODES_HEADER, /* nest - _A_HEADER_* */ 257 - ETHTOOL_A_LINKMODES_AUTONEG, /* u8 */ 258 - ETHTOOL_A_LINKMODES_OURS, /* bitset */ 259 - ETHTOOL_A_LINKMODES_PEER, /* bitset */ 260 - ETHTOOL_A_LINKMODES_SPEED, /* u32 */ 261 - ETHTOOL_A_LINKMODES_DUPLEX, /* u8 */ 262 - ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG, /* u8 */ 263 - ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE, /* u8 */ 264 - ETHTOOL_A_LINKMODES_LANES, /* u32 */ 265 - ETHTOOL_A_LINKMODES_RATE_MATCHING, /* u8 */ 266 - 267 - /* add new constants above here */ 268 - __ETHTOOL_A_LINKMODES_CNT, 269 - ETHTOOL_A_LINKMODES_MAX = __ETHTOOL_A_LINKMODES_CNT - 1 270 - }; 271 - 272 - /* LINKSTATE */ 273 - 274 - enum { 275 - ETHTOOL_A_LINKSTATE_UNSPEC, 276 - ETHTOOL_A_LINKSTATE_HEADER, /* nest - _A_HEADER_* */ 277 - ETHTOOL_A_LINKSTATE_LINK, /* u8 */ 278 - ETHTOOL_A_LINKSTATE_SQI, /* u32 */ 279 - ETHTOOL_A_LINKSTATE_SQI_MAX, /* u32 */ 280 - ETHTOOL_A_LINKSTATE_EXT_STATE, /* u8 */ 281 - ETHTOOL_A_LINKSTATE_EXT_SUBSTATE, /* u8 */ 282 - ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT, /* u32 */ 283 - 284 - /* add new constants above here */ 285 - __ETHTOOL_A_LINKSTATE_CNT, 286 - ETHTOOL_A_LINKSTATE_MAX = __ETHTOOL_A_LINKSTATE_CNT - 1 287 - }; 288 - 289 - /* DEBUG */ 290 - 291 - enum { 292 - ETHTOOL_A_DEBUG_UNSPEC, 293 - ETHTOOL_A_DEBUG_HEADER, /* nest - _A_HEADER_* */ 294 - ETHTOOL_A_DEBUG_MSGMASK, /* bitset */ 295 - 296 - /* add new constants above here */ 297 - __ETHTOOL_A_DEBUG_CNT, 298 - ETHTOOL_A_DEBUG_MAX = __ETHTOOL_A_DEBUG_CNT - 1 299 - }; 300 - 301 - /* WOL */ 302 - 303 - enum { 304 - ETHTOOL_A_WOL_UNSPEC, 305 - ETHTOOL_A_WOL_HEADER, /* nest - _A_HEADER_* */ 306 - ETHTOOL_A_WOL_MODES, /* bitset */ 307 - ETHTOOL_A_WOL_SOPASS, /* binary */ 308 - 309 - /* add new constants above here */ 310 - __ETHTOOL_A_WOL_CNT, 311 - ETHTOOL_A_WOL_MAX = __ETHTOOL_A_WOL_CNT - 1 312 - }; 313 - 314 - /* FEATURES */ 315 - 316 - enum { 317 - ETHTOOL_A_FEATURES_UNSPEC, 318 - ETHTOOL_A_FEATURES_HEADER, /* nest - _A_HEADER_* */ 319 - ETHTOOL_A_FEATURES_HW, /* bitset */ 320 - ETHTOOL_A_FEATURES_WANTED, /* bitset */ 321 - ETHTOOL_A_FEATURES_ACTIVE, /* bitset */ 322 - ETHTOOL_A_FEATURES_NOCHANGE, /* bitset */ 323 - 324 - /* add new constants above here */ 325 - __ETHTOOL_A_FEATURES_CNT, 326 - ETHTOOL_A_FEATURES_MAX = __ETHTOOL_A_FEATURES_CNT - 1 327 - }; 328 - 329 - /* PRIVFLAGS */ 330 - 331 - enum { 332 - ETHTOOL_A_PRIVFLAGS_UNSPEC, 333 - ETHTOOL_A_PRIVFLAGS_HEADER, /* nest - _A_HEADER_* */ 334 - ETHTOOL_A_PRIVFLAGS_FLAGS, /* bitset */ 335 - 336 - /* add new constants above here */ 337 - __ETHTOOL_A_PRIVFLAGS_CNT, 338 - ETHTOOL_A_PRIVFLAGS_MAX = __ETHTOOL_A_PRIVFLAGS_CNT - 1 339 - }; 340 - 341 - /* RINGS */ 342 - 343 - enum { 344 - ETHTOOL_TCP_DATA_SPLIT_UNKNOWN = 0, 345 - ETHTOOL_TCP_DATA_SPLIT_DISABLED, 346 - ETHTOOL_TCP_DATA_SPLIT_ENABLED, 347 - }; 348 - 349 - enum { 350 - ETHTOOL_A_RINGS_UNSPEC, 351 - ETHTOOL_A_RINGS_HEADER, /* nest - _A_HEADER_* */ 352 - ETHTOOL_A_RINGS_RX_MAX, /* u32 */ 353 - ETHTOOL_A_RINGS_RX_MINI_MAX, /* u32 */ 354 - ETHTOOL_A_RINGS_RX_JUMBO_MAX, /* u32 */ 355 - ETHTOOL_A_RINGS_TX_MAX, /* u32 */ 356 - ETHTOOL_A_RINGS_RX, /* u32 */ 357 - ETHTOOL_A_RINGS_RX_MINI, /* u32 */ 358 - ETHTOOL_A_RINGS_RX_JUMBO, /* u32 */ 359 - ETHTOOL_A_RINGS_TX, /* u32 */ 360 - ETHTOOL_A_RINGS_RX_BUF_LEN, /* u32 */ 361 - ETHTOOL_A_RINGS_TCP_DATA_SPLIT, /* u8 */ 362 - ETHTOOL_A_RINGS_CQE_SIZE, /* u32 */ 363 - ETHTOOL_A_RINGS_TX_PUSH, /* u8 */ 364 - ETHTOOL_A_RINGS_RX_PUSH, /* u8 */ 365 - ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN, /* u32 */ 366 - ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX, /* u32 */ 367 - 368 - /* add new constants above here */ 369 - __ETHTOOL_A_RINGS_CNT, 370 - ETHTOOL_A_RINGS_MAX = (__ETHTOOL_A_RINGS_CNT - 1) 371 - }; 372 - 373 - /* CHANNELS */ 374 - 375 - enum { 376 - ETHTOOL_A_CHANNELS_UNSPEC, 377 - ETHTOOL_A_CHANNELS_HEADER, /* nest - _A_HEADER_* */ 378 - ETHTOOL_A_CHANNELS_RX_MAX, /* u32 */ 379 - ETHTOOL_A_CHANNELS_TX_MAX, /* u32 */ 380 - ETHTOOL_A_CHANNELS_OTHER_MAX, /* u32 */ 381 - ETHTOOL_A_CHANNELS_COMBINED_MAX, /* u32 */ 382 - ETHTOOL_A_CHANNELS_RX_COUNT, /* u32 */ 383 - ETHTOOL_A_CHANNELS_TX_COUNT, /* u32 */ 384 - ETHTOOL_A_CHANNELS_OTHER_COUNT, /* u32 */ 385 - ETHTOOL_A_CHANNELS_COMBINED_COUNT, /* u32 */ 386 - 387 - /* add new constants above here */ 388 - __ETHTOOL_A_CHANNELS_CNT, 389 - ETHTOOL_A_CHANNELS_MAX = (__ETHTOOL_A_CHANNELS_CNT - 1) 390 - }; 391 - 392 - /* COALESCE */ 393 - 394 - enum { 395 - ETHTOOL_A_COALESCE_UNSPEC, 396 - ETHTOOL_A_COALESCE_HEADER, /* nest - _A_HEADER_* */ 397 - ETHTOOL_A_COALESCE_RX_USECS, /* u32 */ 398 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES, /* u32 */ 399 - ETHTOOL_A_COALESCE_RX_USECS_IRQ, /* u32 */ 400 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ, /* u32 */ 401 - ETHTOOL_A_COALESCE_TX_USECS, /* u32 */ 402 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES, /* u32 */ 403 - ETHTOOL_A_COALESCE_TX_USECS_IRQ, /* u32 */ 404 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ, /* u32 */ 405 - ETHTOOL_A_COALESCE_STATS_BLOCK_USECS, /* u32 */ 406 - ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX, /* u8 */ 407 - ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX, /* u8 */ 408 - ETHTOOL_A_COALESCE_PKT_RATE_LOW, /* u32 */ 409 - ETHTOOL_A_COALESCE_RX_USECS_LOW, /* u32 */ 410 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW, /* u32 */ 411 - ETHTOOL_A_COALESCE_TX_USECS_LOW, /* u32 */ 412 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW, /* u32 */ 413 - ETHTOOL_A_COALESCE_PKT_RATE_HIGH, /* u32 */ 414 - ETHTOOL_A_COALESCE_RX_USECS_HIGH, /* u32 */ 415 - ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH, /* u32 */ 416 - ETHTOOL_A_COALESCE_TX_USECS_HIGH, /* u32 */ 417 - ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH, /* u32 */ 418 - ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL, /* u32 */ 419 - ETHTOOL_A_COALESCE_USE_CQE_MODE_TX, /* u8 */ 420 - ETHTOOL_A_COALESCE_USE_CQE_MODE_RX, /* u8 */ 421 - ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES, /* u32 */ 422 - ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES, /* u32 */ 423 - ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS, /* u32 */ 424 - /* nest - _A_PROFILE_IRQ_MODERATION */ 425 - ETHTOOL_A_COALESCE_RX_PROFILE, 426 - /* nest - _A_PROFILE_IRQ_MODERATION */ 427 - ETHTOOL_A_COALESCE_TX_PROFILE, 428 - 429 - /* add new constants above here */ 430 - __ETHTOOL_A_COALESCE_CNT, 431 - ETHTOOL_A_COALESCE_MAX = (__ETHTOOL_A_COALESCE_CNT - 1) 432 - }; 433 - 434 - enum { 435 - ETHTOOL_A_PROFILE_UNSPEC, 436 - /* nest, _A_IRQ_MODERATION_* */ 437 - ETHTOOL_A_PROFILE_IRQ_MODERATION, 438 - __ETHTOOL_A_PROFILE_CNT, 439 - ETHTOOL_A_PROFILE_MAX = (__ETHTOOL_A_PROFILE_CNT - 1) 440 - }; 441 - 442 - enum { 443 - ETHTOOL_A_IRQ_MODERATION_UNSPEC, 444 - ETHTOOL_A_IRQ_MODERATION_USEC, /* u32 */ 445 - ETHTOOL_A_IRQ_MODERATION_PKTS, /* u32 */ 446 - ETHTOOL_A_IRQ_MODERATION_COMPS, /* u32 */ 447 - 448 - __ETHTOOL_A_IRQ_MODERATION_CNT, 449 - ETHTOOL_A_IRQ_MODERATION_MAX = (__ETHTOOL_A_IRQ_MODERATION_CNT - 1) 450 - }; 451 - 452 - /* PAUSE */ 453 - 454 - enum { 455 - ETHTOOL_A_PAUSE_UNSPEC, 456 - ETHTOOL_A_PAUSE_HEADER, /* nest - _A_HEADER_* */ 457 - ETHTOOL_A_PAUSE_AUTONEG, /* u8 */ 458 - ETHTOOL_A_PAUSE_RX, /* u8 */ 459 - ETHTOOL_A_PAUSE_TX, /* u8 */ 460 - ETHTOOL_A_PAUSE_STATS, /* nest - _PAUSE_STAT_* */ 461 - ETHTOOL_A_PAUSE_STATS_SRC, /* u32 */ 462 - 463 - /* add new constants above here */ 464 - __ETHTOOL_A_PAUSE_CNT, 465 - ETHTOOL_A_PAUSE_MAX = (__ETHTOOL_A_PAUSE_CNT - 1) 466 - }; 467 - 468 - enum { 469 - ETHTOOL_A_PAUSE_STAT_UNSPEC, 470 - ETHTOOL_A_PAUSE_STAT_PAD, 471 - 472 - ETHTOOL_A_PAUSE_STAT_TX_FRAMES, 473 - ETHTOOL_A_PAUSE_STAT_RX_FRAMES, 474 - 475 - /* add new constants above here 476 - * adjust ETHTOOL_PAUSE_STAT_CNT if adding non-stats! 477 - */ 478 - __ETHTOOL_A_PAUSE_STAT_CNT, 479 - ETHTOOL_A_PAUSE_STAT_MAX = (__ETHTOOL_A_PAUSE_STAT_CNT - 1) 480 - }; 481 - 482 - /* EEE */ 483 - 484 - enum { 485 - ETHTOOL_A_EEE_UNSPEC, 486 - ETHTOOL_A_EEE_HEADER, /* nest - _A_HEADER_* */ 487 - ETHTOOL_A_EEE_MODES_OURS, /* bitset */ 488 - ETHTOOL_A_EEE_MODES_PEER, /* bitset */ 489 - ETHTOOL_A_EEE_ACTIVE, /* u8 */ 490 - ETHTOOL_A_EEE_ENABLED, /* u8 */ 491 - ETHTOOL_A_EEE_TX_LPI_ENABLED, /* u8 */ 492 - ETHTOOL_A_EEE_TX_LPI_TIMER, /* u32 */ 493 - 494 - /* add new constants above here */ 495 - __ETHTOOL_A_EEE_CNT, 496 - ETHTOOL_A_EEE_MAX = (__ETHTOOL_A_EEE_CNT - 1) 497 - }; 498 - 499 - /* TSINFO */ 500 - 501 - enum { 502 - ETHTOOL_A_TSINFO_UNSPEC, 503 - ETHTOOL_A_TSINFO_HEADER, /* nest - _A_HEADER_* */ 504 - ETHTOOL_A_TSINFO_TIMESTAMPING, /* bitset */ 505 - ETHTOOL_A_TSINFO_TX_TYPES, /* bitset */ 506 - ETHTOOL_A_TSINFO_RX_FILTERS, /* bitset */ 507 - ETHTOOL_A_TSINFO_PHC_INDEX, /* u32 */ 508 - ETHTOOL_A_TSINFO_STATS, /* nest - _A_TSINFO_STAT */ 509 - 510 - /* add new constants above here */ 511 - __ETHTOOL_A_TSINFO_CNT, 512 - ETHTOOL_A_TSINFO_MAX = (__ETHTOOL_A_TSINFO_CNT - 1) 513 - }; 514 - 515 - enum { 516 - ETHTOOL_A_TS_STAT_UNSPEC, 517 - 518 - ETHTOOL_A_TS_STAT_TX_PKTS, /* uint */ 519 - ETHTOOL_A_TS_STAT_TX_LOST, /* uint */ 520 - ETHTOOL_A_TS_STAT_TX_ERR, /* uint */ 521 - 522 - /* add new constants above here */ 523 - __ETHTOOL_A_TS_STAT_CNT, 524 - ETHTOOL_A_TS_STAT_MAX = (__ETHTOOL_A_TS_STAT_CNT - 1) 525 - 526 - }; 527 - 528 - /* PHC VCLOCKS */ 529 - 530 - enum { 531 - ETHTOOL_A_PHC_VCLOCKS_UNSPEC, 532 - ETHTOOL_A_PHC_VCLOCKS_HEADER, /* nest - _A_HEADER_* */ 533 - ETHTOOL_A_PHC_VCLOCKS_NUM, /* u32 */ 534 - ETHTOOL_A_PHC_VCLOCKS_INDEX, /* array, s32 */ 535 - 536 - /* add new constants above here */ 537 - __ETHTOOL_A_PHC_VCLOCKS_CNT, 538 - ETHTOOL_A_PHC_VCLOCKS_MAX = (__ETHTOOL_A_PHC_VCLOCKS_CNT - 1) 539 - }; 540 - 541 - /* CABLE TEST */ 542 - 543 - enum { 544 - ETHTOOL_A_CABLE_TEST_UNSPEC, 545 - ETHTOOL_A_CABLE_TEST_HEADER, /* nest - _A_HEADER_* */ 546 - 547 - /* add new constants above here */ 548 - __ETHTOOL_A_CABLE_TEST_CNT, 549 - ETHTOOL_A_CABLE_TEST_MAX = __ETHTOOL_A_CABLE_TEST_CNT - 1 550 - }; 551 18 552 19 /* CABLE TEST NOTIFY */ 553 20 enum { ··· 50 583 }; 51 584 52 585 enum { 53 - ETHTOOL_A_CABLE_RESULT_UNSPEC, 54 - ETHTOOL_A_CABLE_RESULT_PAIR, /* u8 ETHTOOL_A_CABLE_PAIR_ */ 55 - ETHTOOL_A_CABLE_RESULT_CODE, /* u8 ETHTOOL_A_CABLE_RESULT_CODE_ */ 56 - ETHTOOL_A_CABLE_RESULT_SRC, /* u32 ETHTOOL_A_CABLE_INF_SRC_ */ 57 - 58 - __ETHTOOL_A_CABLE_RESULT_CNT, 59 - ETHTOOL_A_CABLE_RESULT_MAX = (__ETHTOOL_A_CABLE_RESULT_CNT - 1) 60 - }; 61 - 62 - enum { 63 - ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC, 64 - ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR, /* u8 ETHTOOL_A_CABLE_PAIR_ */ 65 - ETHTOOL_A_CABLE_FAULT_LENGTH_CM, /* u32 */ 66 - ETHTOOL_A_CABLE_FAULT_LENGTH_SRC, /* u32 ETHTOOL_A_CABLE_INF_SRC_ */ 67 - 68 - __ETHTOOL_A_CABLE_FAULT_LENGTH_CNT, 69 - ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = (__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT - 1) 70 - }; 71 - 72 - enum { 73 586 ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC, 74 587 ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED, 75 588 ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED 76 - }; 77 - 78 - enum { 79 - ETHTOOL_A_CABLE_NEST_UNSPEC, 80 - ETHTOOL_A_CABLE_NEST_RESULT, /* nest - ETHTOOL_A_CABLE_RESULT_ */ 81 - ETHTOOL_A_CABLE_NEST_FAULT_LENGTH, /* nest - ETHTOOL_A_CABLE_FAULT_LENGTH_ */ 82 - __ETHTOOL_A_CABLE_NEST_CNT, 83 - ETHTOOL_A_CABLE_NEST_MAX = (__ETHTOOL_A_CABLE_NEST_CNT - 1) 84 - }; 85 - 86 - enum { 87 - ETHTOOL_A_CABLE_TEST_NTF_UNSPEC, 88 - ETHTOOL_A_CABLE_TEST_NTF_HEADER, /* nest - ETHTOOL_A_HEADER_* */ 89 - ETHTOOL_A_CABLE_TEST_NTF_STATUS, /* u8 - _STARTED/_COMPLETE */ 90 - ETHTOOL_A_CABLE_TEST_NTF_NEST, /* nest - of results: */ 91 - 92 - __ETHTOOL_A_CABLE_TEST_NTF_CNT, 93 - ETHTOOL_A_CABLE_TEST_NTF_MAX = (__ETHTOOL_A_CABLE_TEST_NTF_CNT - 1) 94 - }; 95 - 96 - /* CABLE TEST TDR */ 97 - 98 - enum { 99 - ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC, 100 - ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST, /* u32 */ 101 - ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST, /* u32 */ 102 - ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP, /* u32 */ 103 - ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR, /* u8 */ 104 - 105 - /* add new constants above here */ 106 - __ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT, 107 - ETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = __ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT - 1 108 - }; 109 - 110 - enum { 111 - ETHTOOL_A_CABLE_TEST_TDR_UNSPEC, 112 - ETHTOOL_A_CABLE_TEST_TDR_HEADER, /* nest - _A_HEADER_* */ 113 - ETHTOOL_A_CABLE_TEST_TDR_CFG, /* nest - *_TDR_CFG_* */ 114 - 115 - /* add new constants above here */ 116 - __ETHTOOL_A_CABLE_TEST_TDR_CNT, 117 - ETHTOOL_A_CABLE_TEST_TDR_MAX = __ETHTOOL_A_CABLE_TEST_TDR_CNT - 1 118 589 }; 119 590 120 591 /* CABLE TEST TDR NOTIFY */ ··· 95 690 }; 96 691 97 692 enum { 98 - ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC, 99 - ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER, /* nest - ETHTOOL_A_HEADER_* */ 100 - ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS, /* u8 - _STARTED/_COMPLETE */ 101 - ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST, /* nest - of results: */ 102 - 103 - /* add new constants above here */ 104 - __ETHTOOL_A_CABLE_TEST_TDR_NTF_CNT, 105 - ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = __ETHTOOL_A_CABLE_TEST_TDR_NTF_CNT - 1 106 - }; 107 - 108 - /* TUNNEL INFO */ 109 - 110 - enum { 111 - ETHTOOL_UDP_TUNNEL_TYPE_VXLAN, 112 - ETHTOOL_UDP_TUNNEL_TYPE_GENEVE, 113 - ETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE, 114 - 115 - __ETHTOOL_UDP_TUNNEL_TYPE_CNT 116 - }; 117 - 118 - enum { 119 - ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC, 120 - 121 - ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT, /* be16 */ 122 - ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE, /* u32 */ 123 - 124 - /* add new constants above here */ 125 - __ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT, 126 - ETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = (__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT - 1) 127 - }; 128 - 129 - enum { 130 - ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC, 131 - 132 - ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE, /* u32 */ 133 - ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES, /* bitset */ 134 - ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY, /* nest - _UDP_ENTRY_* */ 135 - 136 - /* add new constants above here */ 137 - __ETHTOOL_A_TUNNEL_UDP_TABLE_CNT, 138 - ETHTOOL_A_TUNNEL_UDP_TABLE_MAX = (__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT - 1) 139 - }; 140 - 141 - enum { 142 - ETHTOOL_A_TUNNEL_UDP_UNSPEC, 143 - 144 - ETHTOOL_A_TUNNEL_UDP_TABLE, /* nest - _UDP_TABLE_* */ 145 - 146 - /* add new constants above here */ 147 - __ETHTOOL_A_TUNNEL_UDP_CNT, 148 - ETHTOOL_A_TUNNEL_UDP_MAX = (__ETHTOOL_A_TUNNEL_UDP_CNT - 1) 149 - }; 150 - 151 - enum { 152 - ETHTOOL_A_TUNNEL_INFO_UNSPEC, 153 - ETHTOOL_A_TUNNEL_INFO_HEADER, /* nest - _A_HEADER_* */ 154 - 155 - ETHTOOL_A_TUNNEL_INFO_UDP_PORTS, /* nest - _UDP_TABLE */ 156 - 157 - /* add new constants above here */ 158 - __ETHTOOL_A_TUNNEL_INFO_CNT, 159 - ETHTOOL_A_TUNNEL_INFO_MAX = (__ETHTOOL_A_TUNNEL_INFO_CNT - 1) 160 - }; 161 - 162 - /* FEC */ 163 - 164 - enum { 165 - ETHTOOL_A_FEC_UNSPEC, 166 - ETHTOOL_A_FEC_HEADER, /* nest - _A_HEADER_* */ 167 - ETHTOOL_A_FEC_MODES, /* bitset */ 168 - ETHTOOL_A_FEC_AUTO, /* u8 */ 169 - ETHTOOL_A_FEC_ACTIVE, /* u32 */ 170 - ETHTOOL_A_FEC_STATS, /* nest - _A_FEC_STAT */ 171 - 172 - __ETHTOOL_A_FEC_CNT, 173 - ETHTOOL_A_FEC_MAX = (__ETHTOOL_A_FEC_CNT - 1) 174 - }; 175 - 176 - enum { 177 - ETHTOOL_A_FEC_STAT_UNSPEC, 178 - ETHTOOL_A_FEC_STAT_PAD, 179 - 180 - ETHTOOL_A_FEC_STAT_CORRECTED, /* array, u64 */ 181 - ETHTOOL_A_FEC_STAT_UNCORR, /* array, u64 */ 182 - ETHTOOL_A_FEC_STAT_CORR_BITS, /* array, u64 */ 183 - 184 - /* add new constants above here */ 185 - __ETHTOOL_A_FEC_STAT_CNT, 186 - ETHTOOL_A_FEC_STAT_MAX = (__ETHTOOL_A_FEC_STAT_CNT - 1) 187 - }; 188 - 189 - /* MODULE EEPROM */ 190 - 191 - enum { 192 - ETHTOOL_A_MODULE_EEPROM_UNSPEC, 193 - ETHTOOL_A_MODULE_EEPROM_HEADER, /* nest - _A_HEADER_* */ 194 - 195 - ETHTOOL_A_MODULE_EEPROM_OFFSET, /* u32 */ 196 - ETHTOOL_A_MODULE_EEPROM_LENGTH, /* u32 */ 197 - ETHTOOL_A_MODULE_EEPROM_PAGE, /* u8 */ 198 - ETHTOOL_A_MODULE_EEPROM_BANK, /* u8 */ 199 - ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS, /* u8 */ 200 - ETHTOOL_A_MODULE_EEPROM_DATA, /* binary */ 201 - 202 - __ETHTOOL_A_MODULE_EEPROM_CNT, 203 - ETHTOOL_A_MODULE_EEPROM_MAX = (__ETHTOOL_A_MODULE_EEPROM_CNT - 1) 204 - }; 205 - 206 - /* STATS */ 207 - 208 - enum { 209 - ETHTOOL_A_STATS_UNSPEC, 210 - ETHTOOL_A_STATS_PAD, 211 - ETHTOOL_A_STATS_HEADER, /* nest - _A_HEADER_* */ 212 - ETHTOOL_A_STATS_GROUPS, /* bitset */ 213 - 214 - ETHTOOL_A_STATS_GRP, /* nest - _A_STATS_GRP_* */ 215 - 216 - ETHTOOL_A_STATS_SRC, /* u32 */ 217 - 218 - /* add new constants above here */ 219 - __ETHTOOL_A_STATS_CNT, 220 - ETHTOOL_A_STATS_MAX = (__ETHTOOL_A_STATS_CNT - 1) 221 - }; 222 - 223 - enum { 224 693 ETHTOOL_STATS_ETH_PHY, 225 694 ETHTOOL_STATS_ETH_MAC, 226 695 ETHTOOL_STATS_ETH_CTRL, ··· 102 823 103 824 /* add new constants above here */ 104 825 __ETHTOOL_STATS_CNT 105 - }; 106 - 107 - enum { 108 - ETHTOOL_A_STATS_GRP_UNSPEC, 109 - ETHTOOL_A_STATS_GRP_PAD, 110 - 111 - ETHTOOL_A_STATS_GRP_ID, /* u32 */ 112 - ETHTOOL_A_STATS_GRP_SS_ID, /* u32 */ 113 - 114 - ETHTOOL_A_STATS_GRP_STAT, /* nest */ 115 - 116 - ETHTOOL_A_STATS_GRP_HIST_RX, /* nest */ 117 - ETHTOOL_A_STATS_GRP_HIST_TX, /* nest */ 118 - 119 - ETHTOOL_A_STATS_GRP_HIST_BKT_LOW, /* u32 */ 120 - ETHTOOL_A_STATS_GRP_HIST_BKT_HI, /* u32 */ 121 - ETHTOOL_A_STATS_GRP_HIST_VAL, /* u64 */ 122 - 123 - /* add new constants above here */ 124 - __ETHTOOL_A_STATS_GRP_CNT, 125 - ETHTOOL_A_STATS_GRP_MAX = (__ETHTOOL_A_STATS_GRP_CNT - 1) 126 826 }; 127 827 128 828 enum { ··· 193 935 ETHTOOL_A_STATS_RMON_MAX = (__ETHTOOL_A_STATS_RMON_CNT - 1) 194 936 }; 195 937 196 - /* MODULE */ 197 - 198 - enum { 199 - ETHTOOL_A_MODULE_UNSPEC, 200 - ETHTOOL_A_MODULE_HEADER, /* nest - _A_HEADER_* */ 201 - ETHTOOL_A_MODULE_POWER_MODE_POLICY, /* u8 */ 202 - ETHTOOL_A_MODULE_POWER_MODE, /* u8 */ 203 - 204 - /* add new constants above here */ 205 - __ETHTOOL_A_MODULE_CNT, 206 - ETHTOOL_A_MODULE_MAX = (__ETHTOOL_A_MODULE_CNT - 1) 207 - }; 208 - 209 - /* Power Sourcing Equipment */ 210 - enum { 211 - ETHTOOL_A_C33_PSE_PW_LIMIT_UNSPEC, 212 - ETHTOOL_A_C33_PSE_PW_LIMIT_MIN, /* u32 */ 213 - ETHTOOL_A_C33_PSE_PW_LIMIT_MAX, /* u32 */ 214 - }; 215 - 216 - enum { 217 - ETHTOOL_A_PSE_UNSPEC, 218 - ETHTOOL_A_PSE_HEADER, /* nest - _A_HEADER_* */ 219 - ETHTOOL_A_PODL_PSE_ADMIN_STATE, /* u32 */ 220 - ETHTOOL_A_PODL_PSE_ADMIN_CONTROL, /* u32 */ 221 - ETHTOOL_A_PODL_PSE_PW_D_STATUS, /* u32 */ 222 - ETHTOOL_A_C33_PSE_ADMIN_STATE, /* u32 */ 223 - ETHTOOL_A_C33_PSE_ADMIN_CONTROL, /* u32 */ 224 - ETHTOOL_A_C33_PSE_PW_D_STATUS, /* u32 */ 225 - ETHTOOL_A_C33_PSE_PW_CLASS, /* u32 */ 226 - ETHTOOL_A_C33_PSE_ACTUAL_PW, /* u32 */ 227 - ETHTOOL_A_C33_PSE_EXT_STATE, /* u32 */ 228 - ETHTOOL_A_C33_PSE_EXT_SUBSTATE, /* u32 */ 229 - ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT, /* u32 */ 230 - ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES, /* nest - _C33_PSE_PW_LIMIT_* */ 231 - 232 - /* add new constants above here */ 233 - __ETHTOOL_A_PSE_CNT, 234 - ETHTOOL_A_PSE_MAX = (__ETHTOOL_A_PSE_CNT - 1) 235 - }; 236 - 237 - enum { 238 - ETHTOOL_A_RSS_UNSPEC, 239 - ETHTOOL_A_RSS_HEADER, 240 - ETHTOOL_A_RSS_CONTEXT, /* u32 */ 241 - ETHTOOL_A_RSS_HFUNC, /* u32 */ 242 - ETHTOOL_A_RSS_INDIR, /* binary */ 243 - ETHTOOL_A_RSS_HKEY, /* binary */ 244 - ETHTOOL_A_RSS_INPUT_XFRM, /* u32 */ 245 - ETHTOOL_A_RSS_START_CONTEXT, /* u32 */ 246 - 247 - __ETHTOOL_A_RSS_CNT, 248 - ETHTOOL_A_RSS_MAX = (__ETHTOOL_A_RSS_CNT - 1), 249 - }; 250 - 251 - /* PLCA */ 252 - 253 - enum { 254 - ETHTOOL_A_PLCA_UNSPEC, 255 - ETHTOOL_A_PLCA_HEADER, /* nest - _A_HEADER_* */ 256 - ETHTOOL_A_PLCA_VERSION, /* u16 */ 257 - ETHTOOL_A_PLCA_ENABLED, /* u8 */ 258 - ETHTOOL_A_PLCA_STATUS, /* u8 */ 259 - ETHTOOL_A_PLCA_NODE_CNT, /* u32 */ 260 - ETHTOOL_A_PLCA_NODE_ID, /* u32 */ 261 - ETHTOOL_A_PLCA_TO_TMR, /* u32 */ 262 - ETHTOOL_A_PLCA_BURST_CNT, /* u32 */ 263 - ETHTOOL_A_PLCA_BURST_TMR, /* u32 */ 264 - 265 - /* add new constants above here */ 266 - __ETHTOOL_A_PLCA_CNT, 267 - ETHTOOL_A_PLCA_MAX = (__ETHTOOL_A_PLCA_CNT - 1) 268 - }; 269 - 270 - /* MAC Merge (802.3) */ 271 - 272 - enum { 273 - ETHTOOL_A_MM_STAT_UNSPEC, 274 - ETHTOOL_A_MM_STAT_PAD, 275 - 276 - /* aMACMergeFrameAssErrorCount */ 277 - ETHTOOL_A_MM_STAT_REASSEMBLY_ERRORS, /* u64 */ 278 - /* aMACMergeFrameSmdErrorCount */ 279 - ETHTOOL_A_MM_STAT_SMD_ERRORS, /* u64 */ 280 - /* aMACMergeFrameAssOkCount */ 281 - ETHTOOL_A_MM_STAT_REASSEMBLY_OK, /* u64 */ 282 - /* aMACMergeFragCountRx */ 283 - ETHTOOL_A_MM_STAT_RX_FRAG_COUNT, /* u64 */ 284 - /* aMACMergeFragCountTx */ 285 - ETHTOOL_A_MM_STAT_TX_FRAG_COUNT, /* u64 */ 286 - /* aMACMergeHoldCount */ 287 - ETHTOOL_A_MM_STAT_HOLD_COUNT, /* u64 */ 288 - 289 - /* add new constants above here */ 290 - __ETHTOOL_A_MM_STAT_CNT, 291 - ETHTOOL_A_MM_STAT_MAX = (__ETHTOOL_A_MM_STAT_CNT - 1) 292 - }; 293 - 294 - enum { 295 - ETHTOOL_A_MM_UNSPEC, 296 - ETHTOOL_A_MM_HEADER, /* nest - _A_HEADER_* */ 297 - ETHTOOL_A_MM_PMAC_ENABLED, /* u8 */ 298 - ETHTOOL_A_MM_TX_ENABLED, /* u8 */ 299 - ETHTOOL_A_MM_TX_ACTIVE, /* u8 */ 300 - ETHTOOL_A_MM_TX_MIN_FRAG_SIZE, /* u32 */ 301 - ETHTOOL_A_MM_RX_MIN_FRAG_SIZE, /* u32 */ 302 - ETHTOOL_A_MM_VERIFY_ENABLED, /* u8 */ 303 - ETHTOOL_A_MM_VERIFY_STATUS, /* u8 */ 304 - ETHTOOL_A_MM_VERIFY_TIME, /* u32 */ 305 - ETHTOOL_A_MM_MAX_VERIFY_TIME, /* u32 */ 306 - ETHTOOL_A_MM_STATS, /* nest - _A_MM_STAT_* */ 307 - 308 - /* add new constants above here */ 309 - __ETHTOOL_A_MM_CNT, 310 - ETHTOOL_A_MM_MAX = (__ETHTOOL_A_MM_CNT - 1) 311 - }; 312 - 313 - /* MODULE_FW_FLASH */ 314 - 315 - enum { 316 - ETHTOOL_A_MODULE_FW_FLASH_UNSPEC, 317 - ETHTOOL_A_MODULE_FW_FLASH_HEADER, /* nest - _A_HEADER_* */ 318 - ETHTOOL_A_MODULE_FW_FLASH_FILE_NAME, /* string */ 319 - ETHTOOL_A_MODULE_FW_FLASH_PASSWORD, /* u32 */ 320 - ETHTOOL_A_MODULE_FW_FLASH_STATUS, /* u32 */ 321 - ETHTOOL_A_MODULE_FW_FLASH_STATUS_MSG, /* string */ 322 - ETHTOOL_A_MODULE_FW_FLASH_DONE, /* uint */ 323 - ETHTOOL_A_MODULE_FW_FLASH_TOTAL, /* uint */ 324 - 325 - /* add new constants above here */ 326 - __ETHTOOL_A_MODULE_FW_FLASH_CNT, 327 - ETHTOOL_A_MODULE_FW_FLASH_MAX = (__ETHTOOL_A_MODULE_FW_FLASH_CNT - 1) 328 - }; 329 - 330 - enum { 331 - ETHTOOL_A_PHY_UNSPEC, 332 - ETHTOOL_A_PHY_HEADER, /* nest - _A_HEADER_* */ 333 - ETHTOOL_A_PHY_INDEX, /* u32 */ 334 - ETHTOOL_A_PHY_DRVNAME, /* string */ 335 - ETHTOOL_A_PHY_NAME, /* string */ 336 - ETHTOOL_A_PHY_UPSTREAM_TYPE, /* u32 */ 337 - ETHTOOL_A_PHY_UPSTREAM_INDEX, /* u32 */ 338 - ETHTOOL_A_PHY_UPSTREAM_SFP_NAME, /* string */ 339 - ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME, /* string */ 340 - 341 - /* add new constants above here */ 342 - __ETHTOOL_A_PHY_CNT, 343 - ETHTOOL_A_PHY_MAX = (__ETHTOOL_A_PHY_CNT - 1) 344 - }; 345 938 346 939 /* generic netlink info */ 347 940 #define ETHTOOL_GENL_NAME "ethtool"
+104 -35
tools/net/ynl/ynl-gen-c.py
··· 801 801 self.user_type = 'int' 802 802 803 803 self.value_pfx = yaml.get('name-prefix', f"{family.ident_name}-{yaml['name']}-") 804 + self.header = yaml.get('header', None) 805 + self.enum_cnt_name = yaml.get('enum-cnt-name', None) 804 806 805 807 super().__init__(family, yaml) 806 808 ··· 2419 2417 cw.block_start(line=start_line) 2420 2418 2421 2419 2420 + def render_uapi_unified(family, cw, max_by_define, separate_ntf): 2421 + max_name = c_upper(family.get('cmd-max-name', f"{family.op_prefix}MAX")) 2422 + cnt_name = c_upper(family.get('cmd-cnt-name', f"__{family.op_prefix}MAX")) 2423 + max_value = f"({cnt_name} - 1)" 2424 + 2425 + uapi_enum_start(family, cw, family['operations'], 'enum-name') 2426 + val = 0 2427 + for op in family.msgs.values(): 2428 + if separate_ntf and ('notify' in op or 'event' in op): 2429 + continue 2430 + 2431 + suffix = ',' 2432 + if op.value != val: 2433 + suffix = f" = {op.value}," 2434 + val = op.value 2435 + cw.p(op.enum_name + suffix) 2436 + val += 1 2437 + cw.nl() 2438 + cw.p(cnt_name + ('' if max_by_define else ',')) 2439 + if not max_by_define: 2440 + cw.p(f"{max_name} = {max_value}") 2441 + cw.block_end(line=';') 2442 + if max_by_define: 2443 + cw.p(f"#define {max_name} {max_value}") 2444 + cw.nl() 2445 + 2446 + 2447 + def render_uapi_directional(family, cw, max_by_define): 2448 + max_name = f"{family.op_prefix}USER_MAX" 2449 + cnt_name = f"__{family.op_prefix}USER_CNT" 2450 + max_value = f"({cnt_name} - 1)" 2451 + 2452 + cw.block_start(line='enum') 2453 + cw.p(c_upper(f'{family.name}_MSG_USER_NONE = 0,')) 2454 + val = 0 2455 + for op in family.msgs.values(): 2456 + if 'do' in op and 'event' not in op: 2457 + suffix = ',' 2458 + if op.value and op.value != val: 2459 + suffix = f" = {op.value}," 2460 + val = op.value 2461 + cw.p(op.enum_name + suffix) 2462 + val += 1 2463 + cw.nl() 2464 + cw.p(cnt_name + ('' if max_by_define else ',')) 2465 + if not max_by_define: 2466 + cw.p(f"{max_name} = {max_value}") 2467 + cw.block_end(line=';') 2468 + if max_by_define: 2469 + cw.p(f"#define {max_name} {max_value}") 2470 + cw.nl() 2471 + 2472 + max_name = f"{family.op_prefix}KERNEL_MAX" 2473 + cnt_name = f"__{family.op_prefix}KERNEL_CNT" 2474 + max_value = f"({cnt_name} - 1)" 2475 + 2476 + cw.block_start(line='enum') 2477 + cw.p(c_upper(f'{family.name}_MSG_KERNEL_NONE = 0,')) 2478 + val = 0 2479 + for op in family.msgs.values(): 2480 + if ('do' in op and 'reply' in op['do']) or 'notify' in op or 'event' in op: 2481 + enum_name = op.enum_name 2482 + if 'event' not in op and 'notify' not in op: 2483 + enum_name = f'{enum_name}_REPLY' 2484 + 2485 + suffix = ',' 2486 + if op.value and op.value != val: 2487 + suffix = f" = {op.value}," 2488 + val = op.value 2489 + cw.p(enum_name + suffix) 2490 + val += 1 2491 + cw.nl() 2492 + cw.p(cnt_name + ('' if max_by_define else ',')) 2493 + if not max_by_define: 2494 + cw.p(f"{max_name} = {max_value}") 2495 + cw.block_end(line=';') 2496 + if max_by_define: 2497 + cw.p(f"#define {max_name} {max_value}") 2498 + cw.nl() 2499 + 2500 + 2422 2501 def render_uapi(family, cw): 2423 2502 hdr_prot = f"_UAPI_LINUX_{c_upper(family.uapi_header_name)}_H" 2424 2503 hdr_prot = hdr_prot.replace('/', '_') ··· 2522 2439 # Write kdoc for enum and flags (one day maybe also structs) 2523 2440 if const['type'] == 'enum' or const['type'] == 'flags': 2524 2441 enum = family.consts[const['name']] 2442 + 2443 + if enum.header: 2444 + continue 2525 2445 2526 2446 if enum.has_doc(): 2527 2447 if enum.has_entry_doc(): ··· 2558 2472 max_val = f' = {enum.get_mask()},' 2559 2473 cw.p(max_name + max_val) 2560 2474 else: 2475 + cnt_name = enum.enum_cnt_name 2561 2476 max_name = c_upper(name_pfx + 'max') 2562 - cw.p('__' + max_name + ',') 2563 - cw.p(max_name + ' = (__' + max_name + ' - 1)') 2477 + if not cnt_name: 2478 + cnt_name = '__' + name_pfx + 'max' 2479 + cw.p(c_upper(cnt_name) + ',') 2480 + cw.p(max_name + ' = (' + c_upper(cnt_name) + ' - 1)') 2564 2481 cw.block_end(line=';') 2565 2482 cw.nl() 2566 2483 elif const['type'] == 'const': ··· 2604 2515 # Commands 2605 2516 separate_ntf = 'async-prefix' in family['operations'] 2606 2517 2607 - max_name = c_upper(family.get('cmd-max-name', f"{family.op_prefix}MAX")) 2608 - cnt_name = c_upper(family.get('cmd-cnt-name', f"__{family.op_prefix}MAX")) 2609 - max_value = f"({cnt_name} - 1)" 2610 - 2611 - uapi_enum_start(family, cw, family['operations'], 'enum-name') 2612 - val = 0 2613 - for op in family.msgs.values(): 2614 - if separate_ntf and ('notify' in op or 'event' in op): 2615 - continue 2616 - 2617 - suffix = ',' 2618 - if op.value != val: 2619 - suffix = f" = {op.value}," 2620 - val = op.value 2621 - cw.p(op.enum_name + suffix) 2622 - val += 1 2623 - cw.nl() 2624 - cw.p(cnt_name + ('' if max_by_define else ',')) 2625 - if not max_by_define: 2626 - cw.p(f"{max_name} = {max_value}") 2627 - cw.block_end(line=';') 2628 - if max_by_define: 2629 - cw.p(f"#define {max_name} {max_value}") 2630 - cw.nl() 2518 + if family.msg_id_model == 'unified': 2519 + render_uapi_unified(family, cw, max_by_define, separate_ntf) 2520 + elif family.msg_id_model == 'directional': 2521 + render_uapi_directional(family, cw, max_by_define) 2522 + else: 2523 + raise Exception(f'Unsupported message enum-model {family.msg_id_model}') 2631 2524 2632 2525 if separate_ntf: 2633 2526 uapi_enum_start(family, cw, family['operations'], enum_name='async-enum') ··· 2733 2662 os.sys.exit(1) 2734 2663 return 2735 2664 2736 - supported_models = ['unified'] 2737 - if args.mode in ['user', 'kernel']: 2738 - supported_models += ['directional'] 2739 - if parsed.msg_id_model not in supported_models: 2740 - print(f'Message enum-model {parsed.msg_id_model} not supported for {args.mode} generation') 2741 - os.sys.exit(1) 2742 - 2743 2665 cw = CodeWriter(BaseNlLib(), args.out_file, overwrite=(not args.cmp_out)) 2744 2666 2745 2667 _, spec_kernel = find_kernel_root(args.spec) ··· 2782 2718 else: 2783 2719 cw.p(f'#include "{hdr_file}"') 2784 2720 cw.p('#include "ynl.h"') 2785 - headers = [parsed.uapi_header] 2721 + headers = [] 2786 2722 for definition in parsed['definitions']: 2787 2723 if 'header' in definition: 2788 2724 headers.append(definition['header']) 2725 + if args.mode == 'user': 2726 + headers.append(parsed.uapi_header) 2727 + seen_header = [] 2789 2728 for one in headers: 2790 - cw.p(f"#include <{one}>") 2729 + if one not in seen_header: 2730 + cw.p(f"#include <{one}>") 2731 + seen_header.append(one) 2791 2732 cw.nl() 2792 2733 2793 2734 if args.mode == "user":