Názor k článku Novinky pro Linux 5.19: půl miliónu řádků nového kódu pro GPU od Křišťan Surname - Ano je to C, ne nesouvisí to s...

  • Článek je starý, nové názory již nelze přidávat.
  • 30. 5. 2022 8:07

    Křišťan Surname

    Ano je to C, ne nesouvisí to s C11, jsou to v podstatě hlavičkové soubory s vyššími statisíci řádků jako tyto (příklad z drivers/gpu/drm/am­d/include/asic_reg/nbi­o/nbio_7_2_0_sh_m­ask.h):

    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__FIRST_ERR_PTR__SHIFT                                         0x0
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__ECRC_CHECK_CAP__SHIFT                                        0x7
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__ECRC_CHECK_EN__SHIFT                                         0x8
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__MULTI_HDR_RECD_CAP__SHIFT                                    0x9
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__MULTI_HDR_RECD_EN__SHIFT                                     0xa
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__TLP_PREFIX_LOG_PRESENT__SHIFT                                0xb
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__COMPLETION_TIMEOUT_LOG_CAPABLE__SHIFT                        0xc
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__FIRST_ERR_PTR_MASK                                           0x0000001FL
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__ECRC_CHECK_CAP_MASK                                          0x00000080L
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__ECRC_CHECK_EN_MASK                                           0x00000100L
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__MULTI_HDR_RECD_CAP_MASK                                      0x00000200L
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__MULTI_HDR_RECD_EN_MASK                                       0x00000400L
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__TLP_PREFIX_LOG_PRESENT_MASK                                  0x00000800L
    #define BIF_CFG_DEV0_EPF1_PCIE_ADV_ERR_CAP_CNTL__COMPLETION_TIMEOUT_LOG_CAPABLE_MASK                          0x00001000L

    Jsou to definice registrů a bitmasky různých polí v těch registrech. Jestli jste někdy dělal něco s nějakým mikrokontrolerem, tak jste nejspíš dělal totéž, jen zatímco třeba ATmega má tady těch registrů pár stovek, moderní GPU jich mají "trochu" víc :-) a proto tady ty soubory s definicemi mají vyšší stovky tisíc řádků. Generuje se to z nějaké strojově čitelné reprezentace API toho hardwaru, u čipů se kterými pracuji já to bývá obří XML.