cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

README (12365B)


      1Framework for Maintaining Common National Instruments Terminal/Signal names
      2
      3The contents of this directory are primarily for maintaining and formatting all
      4known valid signal routes for various National Instruments devices.
      5
      6Some background:
      7  There have been significant confusions over the past many years for users
      8  when trying to understand how to connect to/from signals and terminals on
      9  NI hardware using comedi.  The major reason for this is that the actual
     10  register values were exposed and required to be used by users.  Several
     11  major reasons exist why this caused major confusion for users:
     12
     13  1) The register values are _NOT_ in user documentation, but rather in
     14    arcane locations, such as a few register programming manuals that are
     15    increasingly hard to find and the NI-MHDDK (comments in in example code).
     16    There is no one place to find the various valid values of the registers.
     17
     18  2) The register values are _NOT_ completely consistent.  There is no way to
     19    gain any sense of intuition of which values, or even enums one should use
     20    for various registers.  There was some attempt in prior use of comedi to
     21    name enums such that a user might know which enums should be used for
     22    varying purposes, but the end-user had to gain a knowledge of register
     23    values to correctly wield this approach.
     24
     25  3) The names for signals and registers found in the various register level
     26    programming manuals and vendor-provided documentation are _not_ even
     27    close to the same names that are in the end-user documentation.
     28
     29  4) The sets of routes that are valid are not consistent from device to device.
     30    One additional major challenge is that this information does not seem to be
     31    obtainable in any programmatic fashion, neither through the proprietary
     32    NIDAQmx(-base) c-libraries, nor with register level programming, _nor_
     33    through any documentation.  In fact, the only consistent source of this
     34    information is through the proprietary NI-MAX software, which currently only
     35    runs on Windows platforms.  A further challenge is that this information
     36    cannot be exported from NI-MAX, except by screenshot.
     37
     38
     39
     40The content of this directory is part of an effort to greatly simplify the use
     41of signal routing capabilities of National Instruments data-acquisition and
     42control hardware.  In order to facilitate the transfer of register-level
     43information _and_ the knowledge of valid routes per device, a few specific
     44choices were made:
     45
     46
     471) The names of the National Instruments signals/terminals that are used in this
     48  directory are chosen to be consistent with (a) the NI's user level
     49  documentation, (b) NI's user-level code, (c) the information as provided by
     50  the proprietary NI-MAX software, and (d) the user interface code provided by
     51  the user-land comedilib library.
     52
     53  The impact of this choice implies that one allows the use of CamelScript names
     54  in the kernel.  In short, the choice to use CamelScript and the exact names
     55  below is for maintainability, clarity, similarity to manufacturer's
     56  documentation, _and_ a mitigation for confusion that has plagued the use of
     57  these drivers for years!
     58
     592) The bulk of the real content for this directory is stored in two separate
     60  collections (i.e. sub-directories) of tables stored in c source files:
     61
     62  (a) ni_route_values/ni_[series-label]series.c
     63
     64        This data represents all the various register values to use for the
     65        multiple different signal MUXes for the specific device families.
     66
     67        The values are all wrapped in one of three macros to help document and
     68        track which values have been implemented and tested.
     69        These macros are:
     70          V(<value>) : register value is valid, tested, and implemented
     71          I(<value>) : register value is implemented but needs testing
     72          U(<value>) : register value is not implemented
     73
     74        The actual function of these macros will depend on whether the code is
     75        compiled in the kernel or whether it is compiled into the conversion
     76        tools.  For the conversion tools, it can be used to indicate the status
     77        of the register value.  For the kernel, V() and I() both perform the
     78        same function and prepare data to be used; U() zeroes out the value to
     79        ensure that it cannot be used.
     80
     81        *** It would be a great help for users to test these values such that
     82        these files can be correctly marked/documented ***
     83
     84  (b) ni_device_routes/[board-name].c
     85
     86        This data represents the known set of valid signal routes that are
     87        possible for each specific board.  Although the family defines the
     88        register values to use for a particular signal MUX, not all possible
     89        signals are actually available on each board.
     90
     91        In order for a particular board to take advantage of the effort to
     92        simplify/clarify signal routing on NI devices, a corresponding
     93        [board-name].c file must be created.  This file should reflect the known
     94        valid _direct_ routing capabilities of the board.
     95
     96        As noted above, the only known consistent source of information for
     97        valid device routes comes from the proprietary National Instruments
     98        Windows software, NI-MAX.  Also, as noted above, this information can
     99        only be visually conveyed from NI-MAX to other media.  To make this
    100        easier, the naming conventions used in the [board-name].c file are
    101        similar to the naming conventions as presented by NI-MAX.
    102
    103
    1043) Two other files aggregate the above data to integrate it into comedi:
    105    ni_route_values.c
    106    ni_device_routes.c
    107
    108  When adding a new [board-name].c file, be sure to also add in the line in
    109  ni_device_routes.c to include this information into comedi.
    110
    111
    1124) Several tools have been included to convert from/to the c file formats.
    113  These tools are best used/demonstrated via the included Makefile targets:
    114  (a) `make csv-files`
    115     Creates new csv-files using content of c-files of existing
    116     ni_routing/* content.  New csv files are placed in csv
    117     sub-directory.
    118
    119     As noted above, the only consistent source of information of valid
    120     device routes comes from the proprietary National Instruments Windows
    121     software, NI-MAX.  Also, as noted above, this information can only be
    122     visually conveyed from NI-MAX to other media.  This make target creates
    123     spreadsheet representations of the routing data.  The choice of using a
    124     spreadsheet (ala CSV) to copy this information allows for easy direct
    125     visual comparison to the NI-MAX "Valid Routes" tables.
    126
    127     Furthermore, the register-level information is much easier to identify and
    128     correct when entire families of NI devices are shown side by side in table
    129     format.  This is made easy by using a file-storage format that can be
    130     loaded into a spreadsheet application.
    131
    132     Finally, .csv content is very easy to edit and read using a variety of
    133     tools, including spreadsheets or various other scripting languages.  In
    134     fact, the tools provided here enable quick conversion of the
    135     spreadsheet-like .csv format to c-files that follow the kernel coding
    136     conventions.
    137
    138
    139  (b) `make c-files`
    140     Creates new c-files using content of csv sub-directory.  These
    141     new c-files can be compared to the active content in the
    142     ni_routing directory.
    143  (c) `make csv-blank`
    144     Create a new blank csv file.  This is useful for establishing a
    145     new data table for either a device family (less likely) or a
    146     specific board of an existing device family (more likely).
    147  (d) `make clean`
    148     Remove all generated files/directories.
    149  (e) `make everything`
    150     Build all csv-files, then all new c-files.
    151
    152
    153
    154
    155In summary, similar confusion about signal routing configuration, albeit less,
    156plagued NI's previous version of their own proprietary drivers.  Earlier than
    1572003, NI greatly simplified the situation for users by releasing a new API that
    158abstracted the names of signals/terminals to a common and intuitive set of
    159names.  In addition, this new API provided a much more common interface to use
    160for most of NI hardware.
    161
    162Comedi already provides such a common interface for data-acquisition and control
    163hardware.  This effort complements comedi's abstraction layers by further
    164abstracting much more of the use cases for NI hardware, but allowing users _and_
    165developers to directly refer to NI documentation (user-level, register-level,
    166and the register-level examples of the NI-MHDDK).
    167
    168
    169
    170--------------------------------------------------------------------------------
    171Various naming conventions and relations:
    172--------------------------------------------------------------------------------
    173These are various notes that help to relate the naming conventions used in the
    174NI-STC with those naming conventions used here.
    175--------------------------------------------------------------------------------
    176
    177  Signal sources for most signals-destinations are given a specific naming
    178  convention, although the register values are not consistent.  This next table
    179  shows the mapping between the names used in comedi for NI and those names
    180  typically used within the NI-STC documentation.
    181
    182  (comedi)                      (NI-STC input or output)    (NOTE)
    183  ------------------------------------------------------------------------------
    184  TRIGGER_LINE(i)               RTSI_Trig_i_Output_Select   i in range [0..7]
    185  NI_AI_STOP                    AI_STOP
    186  NI_AI_SampleClock             AI_START_Select
    187  NI_AI_SampleClockTimebase     AI_SI                       If internal sample
    188                                                            clock signal is used
    189  NI_AI_StartTrigger            AI_START1_Select
    190  NI_AI_ReferenceTrigger        AI_START2_Select            for pre-triggered
    191                                                            acquisition---not
    192                                                            currently supported
    193                                                            in comedi
    194  NI_AI_ConvertClock            AI_CONVERT_Source_Select
    195  NI_AI_ConvertClockTimebase    AI_SI2                      If internal convert
    196                                                            signal is used
    197  NI_AI_HoldCompleteEvent
    198  NI_AI_PauseTrigger            AI_External_Gate
    199  NI_AO_SampleClock             AO_UPDATE
    200  NI_AO_SampleClockTimebase     AO_UI
    201  NI_AO_StartTrigger            AO_START1
    202  NI_AO_PauseTrigger            AO_External_Gate
    203  NI_DI_SampleClock
    204  NI_DO_SampleClock
    205  NI_MasterTimebase
    206  NI_20MHzTimebase              TIMEBASE 1 && TIMEBASE 3 if no higher clock exists
    207  NI_80MHzTimebase              TIMEBASE 3
    208  NI_100kHzTimebase             TIMEBASE 2
    209  NI_10MHzRefClock
    210  PXI_Clk10
    211  NI_CtrOut(0)                  GPFO_0                      external ctr0out pin
    212  NI_CtrOut(1)                  GPFO_1                      external ctr1out pin
    213  NI_CtrSource(0)
    214  NI_CtrSource(1)
    215  NI_CtrGate(0)
    216  NI_CtrGate(1)
    217  NI_CtrInternalOutput(0)       G_OUT0, G0_TC               for Ctr1Source, Ctr1Gate
    218  NI_CtrInternalOutput(1)       G_OUT1, G1_TC               for Ctr0Source, Ctr0Gate
    219  NI_RGOUT0                     RGOUT0                      internal signal
    220  NI_FrequencyOutput
    221  #NI_FrequencyOutputTimebase
    222  NI_ChangeDetectionEvent
    223  NI_RTSI_BRD(0)
    224  NI_RTSI_BRD(1)
    225  NI_RTSI_BRD(2)
    226  NI_RTSI_BRD(3)
    227  #NI_SoftwareStrobe
    228  NI_LogicLow
    229  NI_CtrA(0)                    G0_A_Select                 see M-Series user
    230                                                            manual (371022K-01)
    231  NI_CtrA(1)                    G1_A_Select                 see M-Series user
    232                                                            manual (371022K-01)
    233  NI_CtrB(0)                    G0_B_Select, up/down        see M-Series user
    234                                                            manual (371022K-01)
    235  NI_CtrB(1)                    G1_B_Select, up/down        see M-Series user
    236                                                            manual (371022K-01)
    237  NI_CtrZ(0)                                                see M-Series user
    238                                                            manual (371022K-01)
    239  NI_CtrZ(1)                                                see M-Series user
    240                                                            manual (371022K-01)