The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/device-tree/src/arm/vexpress-v2m-rs1.dtsi

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 // SPDX-License-Identifier: GPL-2.0
    2 /*
    3  * ARM Ltd. Versatile Express
    4  *
    5  * Motherboard Express uATX
    6  * V2M-P1
    7  *
    8  * HBI-0190D
    9  *
   10  * RS1 memory map ("ARM Cortex-A Series memory map" in the board's
   11  * Technical Reference Manual)
   12  *
   13  * WARNING! The hardware described in this file is independent from the
   14  * original variant (vexpress-v2m.dtsi), but there is a strong
   15  * correspondence between the two configurations.
   16  *
   17  * TAKE CARE WHEN MAINTAINING THIS FILE TO PROPAGATE ANY RELEVANT
   18  * CHANGES TO vexpress-v2m.dtsi!
   19  */
   20 #include <dt-bindings/interrupt-controller/arm-gic.h>
   21 
   22 / {
   23         v2m_fixed_3v3: fixed-regulator-0 {
   24                 compatible = "regulator-fixed";
   25                 regulator-name = "3V3";
   26                 regulator-min-microvolt = <3300000>;
   27                 regulator-max-microvolt = <3300000>;
   28                 regulator-always-on;
   29         };
   30 
   31         v2m_clk24mhz: clk24mhz {
   32                 compatible = "fixed-clock";
   33                 #clock-cells = <0>;
   34                 clock-frequency = <24000000>;
   35                 clock-output-names = "v2m:clk24mhz";
   36         };
   37 
   38         v2m_refclk1mhz: refclk1mhz {
   39                 compatible = "fixed-clock";
   40                 #clock-cells = <0>;
   41                 clock-frequency = <1000000>;
   42                 clock-output-names = "v2m:refclk1mhz";
   43         };
   44 
   45         v2m_refclk32khz: refclk32khz {
   46                 compatible = "fixed-clock";
   47                 #clock-cells = <0>;
   48                 clock-frequency = <32768>;
   49                 clock-output-names = "v2m:refclk32khz";
   50         };
   51 
   52         leds {
   53                 compatible = "gpio-leds";
   54 
   55                 led-1 {
   56                         label = "v2m:green:user1";
   57                         gpios = <&v2m_led_gpios 0 0>;
   58                         linux,default-trigger = "heartbeat";
   59                 };
   60 
   61                 led-2 {
   62                         label = "v2m:green:user2";
   63                         gpios = <&v2m_led_gpios 1 0>;
   64                         linux,default-trigger = "disk-activity";
   65                 };
   66 
   67                 led-3 {
   68                         label = "v2m:green:user3";
   69                         gpios = <&v2m_led_gpios 2 0>;
   70                         linux,default-trigger = "cpu0";
   71                 };
   72 
   73                 led-4 {
   74                         label = "v2m:green:user4";
   75                         gpios = <&v2m_led_gpios 3 0>;
   76                         linux,default-trigger = "cpu1";
   77                 };
   78 
   79                 led-5 {
   80                         label = "v2m:green:user5";
   81                         gpios = <&v2m_led_gpios 4 0>;
   82                         linux,default-trigger = "cpu2";
   83                 };
   84 
   85                 led-6 {
   86                         label = "v2m:green:user6";
   87                         gpios = <&v2m_led_gpios 5 0>;
   88                         linux,default-trigger = "cpu3";
   89                 };
   90 
   91                 led-7 {
   92                         label = "v2m:green:user7";
   93                         gpios = <&v2m_led_gpios 6 0>;
   94                         linux,default-trigger = "cpu4";
   95                 };
   96 
   97                 led-8 {
   98                         label = "v2m:green:user8";
   99                         gpios = <&v2m_led_gpios 7 0>;
  100                         linux,default-trigger = "cpu5";
  101                 };
  102         };
  103 
  104         bus@8000000 {
  105                 compatible = "simple-bus";
  106                 #address-cells = <1>;
  107                 #size-cells = <1>;
  108 
  109                 #interrupt-cells = <1>;
  110                 interrupt-map-mask = <0 63>;
  111                 interrupt-map = <0  0 &gic GIC_SPI  0 IRQ_TYPE_LEVEL_HIGH>,
  112                                 <0  1 &gic GIC_SPI  1 IRQ_TYPE_LEVEL_HIGH>,
  113                                 <0  2 &gic GIC_SPI  2 IRQ_TYPE_LEVEL_HIGH>,
  114                                 <0  3 &gic GIC_SPI  3 IRQ_TYPE_LEVEL_HIGH>,
  115                                 <0  4 &gic GIC_SPI  4 IRQ_TYPE_LEVEL_HIGH>,
  116                                 <0  5 &gic GIC_SPI  5 IRQ_TYPE_LEVEL_HIGH>,
  117                                 <0  6 &gic GIC_SPI  6 IRQ_TYPE_LEVEL_HIGH>,
  118                                 <0  7 &gic GIC_SPI  7 IRQ_TYPE_LEVEL_HIGH>,
  119                                 <0  8 &gic GIC_SPI  8 IRQ_TYPE_LEVEL_HIGH>,
  120                                 <0  9 &gic GIC_SPI  9 IRQ_TYPE_LEVEL_HIGH>,
  121                                 <0 10 &gic GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
  122                                 <0 11 &gic GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
  123                                 <0 12 &gic GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
  124                                 <0 13 &gic GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
  125                                 <0 14 &gic GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
  126                                 <0 15 &gic GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
  127                                 <0 16 &gic GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
  128                                 <0 17 &gic GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
  129                                 <0 18 &gic GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
  130                                 <0 19 &gic GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
  131                                 <0 20 &gic GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
  132                                 <0 21 &gic GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
  133                                 <0 22 &gic GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
  134                                 <0 23 &gic GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
  135                                 <0 24 &gic GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
  136                                 <0 25 &gic GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>,
  137                                 <0 26 &gic GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
  138                                 <0 27 &gic GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
  139                                 <0 28 &gic GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>,
  140                                 <0 29 &gic GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
  141                                 <0 30 &gic GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
  142                                 <0 31 &gic GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
  143                                 <0 32 &gic GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
  144                                 <0 33 &gic GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
  145                                 <0 34 &gic GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
  146                                 <0 35 &gic GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
  147                                 <0 36 &gic GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
  148                                 <0 37 &gic GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
  149                                 <0 38 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
  150                                 <0 39 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
  151                                 <0 40 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
  152                                 <0 41 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
  153                                 <0 42 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
  154 
  155                 motherboard-bus@8000000 {
  156                         arm,hbi = <0x190>;
  157                         arm,vexpress,site = <0>;
  158                         compatible = "arm,vexpress,v2m-p1", "simple-bus";
  159                         #address-cells = <2>; /* SMB chipselect number and offset */
  160                         #size-cells = <1>;
  161                         ranges = <0 0 0x08000000 0x04000000>,
  162                                  <1 0 0x14000000 0x04000000>,
  163                                  <2 0 0x18000000 0x04000000>,
  164                                  <3 0 0x1c000000 0x04000000>,
  165                                  <4 0 0x0c000000 0x04000000>,
  166                                  <5 0 0x10000000 0x04000000>;
  167 
  168                         nor_flash: flash@0 {
  169                                 compatible = "arm,vexpress-flash", "cfi-flash";
  170                                 reg = <0 0x00000000 0x04000000>,
  171                                       <4 0x00000000 0x04000000>;
  172                                 bank-width = <4>;
  173                                 partitions {
  174                                         compatible = "arm,arm-firmware-suite";
  175                                 };
  176                         };
  177 
  178                         psram@100000000 {
  179                                 compatible = "arm,vexpress-psram", "mtd-ram";
  180                                 reg = <1 0x00000000 0x02000000>;
  181                                 bank-width = <4>;
  182                         };
  183 
  184                         ethernet@202000000 {
  185                                 compatible = "smsc,lan9118", "smsc,lan9115";
  186                                 reg = <2 0x02000000 0x10000>;
  187                                 interrupts = <15>;
  188                                 phy-mode = "mii";
  189                                 reg-io-width = <4>;
  190                                 smsc,irq-active-high;
  191                                 smsc,irq-push-pull;
  192                                 vdd33a-supply = <&v2m_fixed_3v3>;
  193                                 vddvario-supply = <&v2m_fixed_3v3>;
  194                         };
  195 
  196                         usb@203000000 {
  197                                 compatible = "nxp,usb-isp1761";
  198                                 reg = <2 0x03000000 0x20000>;
  199                                 interrupts = <16>;
  200                                 dr_mode = "peripheral";
  201                         };
  202 
  203                         iofpga-bus@300000000 {
  204                                 compatible = "simple-bus";
  205                                 #address-cells = <1>;
  206                                 #size-cells = <1>;
  207                                 ranges = <0 3 0 0x200000>;
  208 
  209                                 v2m_sysreg: sysreg@10000 {
  210                                         compatible = "arm,vexpress-sysreg";
  211                                         reg = <0x010000 0x1000>;
  212                                         #address-cells = <1>;
  213                                         #size-cells = <1>;
  214                                         ranges = <0 0x10000 0x1000>;
  215 
  216                                         v2m_led_gpios: gpio@8 {
  217                                                 compatible = "arm,vexpress-sysreg,sys_led";
  218                                                 reg = <0x008 4>;
  219                                                 gpio-controller;
  220                                                 #gpio-cells = <2>;
  221                                         };
  222 
  223                                         v2m_mmc_gpios: gpio@48 {
  224                                                 compatible = "arm,vexpress-sysreg,sys_mci";
  225                                                 reg = <0x048 4>;
  226                                                 gpio-controller;
  227                                                 #gpio-cells = <2>;
  228                                         };
  229 
  230                                         v2m_flash_gpios: gpio@4c {
  231                                                 compatible = "arm,vexpress-sysreg,sys_flash";
  232                                                 reg = <0x04c 4>;
  233                                                 gpio-controller;
  234                                                 #gpio-cells = <2>;
  235                                         };
  236                                 };
  237 
  238                                 v2m_sysctl: sysctl@20000 {
  239                                         compatible = "arm,sp810", "arm,primecell";
  240                                         reg = <0x020000 0x1000>;
  241                                         clocks = <&v2m_refclk32khz>, <&v2m_refclk1mhz>, <&smbclk>;
  242                                         clock-names = "refclk", "timclk", "apb_pclk";
  243                                         #clock-cells = <1>;
  244                                         clock-output-names = "timerclken0", "timerclken1", "timerclken2", "timerclken3";
  245                                         assigned-clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&v2m_sysctl 3>, <&v2m_sysctl 3>;
  246                                         assigned-clock-parents = <&v2m_refclk1mhz>, <&v2m_refclk1mhz>, <&v2m_refclk1mhz>, <&v2m_refclk1mhz>;
  247                                 };
  248 
  249                                 /* PCI-E I2C bus */
  250                                 v2m_i2c_pcie: i2c@30000 {
  251                                         compatible = "arm,versatile-i2c";
  252                                         reg = <0x030000 0x1000>;
  253 
  254                                         #address-cells = <1>;
  255                                         #size-cells = <0>;
  256 
  257                                         pcie-switch@60 {
  258                                                 compatible = "idt,89hpes32h8";
  259                                                 reg = <0x60>;
  260                                         };
  261                                 };
  262 
  263                                 aaci@40000 {
  264                                         compatible = "arm,pl041", "arm,primecell";
  265                                         reg = <0x040000 0x1000>;
  266                                         interrupts = <11>;
  267                                         clocks = <&smbclk>;
  268                                         clock-names = "apb_pclk";
  269                                 };
  270 
  271                                 mmc@50000 {
  272                                         compatible = "arm,pl180", "arm,primecell";
  273                                         reg = <0x050000 0x1000>;
  274                                         interrupts = <9>, <10>;
  275                                         cd-gpios = <&v2m_mmc_gpios 0 0>;
  276                                         wp-gpios = <&v2m_mmc_gpios 1 0>;
  277                                         max-frequency = <12000000>;
  278                                         vmmc-supply = <&v2m_fixed_3v3>;
  279                                         clocks = <&v2m_clk24mhz>, <&smbclk>;
  280                                         clock-names = "mclk", "apb_pclk";
  281                                 };
  282 
  283                                 kmi@60000 {
  284                                         compatible = "arm,pl050", "arm,primecell";
  285                                         reg = <0x060000 0x1000>;
  286                                         interrupts = <12>;
  287                                         clocks = <&v2m_clk24mhz>, <&smbclk>;
  288                                         clock-names = "KMIREFCLK", "apb_pclk";
  289                                 };
  290 
  291                                 kmi@70000 {
  292                                         compatible = "arm,pl050", "arm,primecell";
  293                                         reg = <0x070000 0x1000>;
  294                                         interrupts = <13>;
  295                                         clocks = <&v2m_clk24mhz>, <&smbclk>;
  296                                         clock-names = "KMIREFCLK", "apb_pclk";
  297                                 };
  298 
  299                                 v2m_serial0: serial@90000 {
  300                                         compatible = "arm,pl011", "arm,primecell";
  301                                         reg = <0x090000 0x1000>;
  302                                         interrupts = <5>;
  303                                         clocks = <&v2m_oscclk2>, <&smbclk>;
  304                                         clock-names = "uartclk", "apb_pclk";
  305                                 };
  306 
  307                                 v2m_serial1: serial@a0000 {
  308                                         compatible = "arm,pl011", "arm,primecell";
  309                                         reg = <0x0a0000 0x1000>;
  310                                         interrupts = <6>;
  311                                         clocks = <&v2m_oscclk2>, <&smbclk>;
  312                                         clock-names = "uartclk", "apb_pclk";
  313                                 };
  314 
  315                                 v2m_serial2: serial@b0000 {
  316                                         compatible = "arm,pl011", "arm,primecell";
  317                                         reg = <0x0b0000 0x1000>;
  318                                         interrupts = <7>;
  319                                         clocks = <&v2m_oscclk2>, <&smbclk>;
  320                                         clock-names = "uartclk", "apb_pclk";
  321                                 };
  322 
  323                                 v2m_serial3: serial@c0000 {
  324                                         compatible = "arm,pl011", "arm,primecell";
  325                                         reg = <0x0c0000 0x1000>;
  326                                         interrupts = <8>;
  327                                         clocks = <&v2m_oscclk2>, <&smbclk>;
  328                                         clock-names = "uartclk", "apb_pclk";
  329                                 };
  330 
  331                                 watchdog@f0000 {
  332                                         compatible = "arm,sp805", "arm,primecell";
  333                                         reg = <0x0f0000 0x1000>;
  334                                         interrupts = <0>;
  335                                         clocks = <&v2m_refclk32khz>, <&smbclk>;
  336                                         clock-names = "wdog_clk", "apb_pclk";
  337                                 };
  338 
  339                                 v2m_timer01: timer@110000 {
  340                                         compatible = "arm,sp804", "arm,primecell";
  341                                         reg = <0x110000 0x1000>;
  342                                         interrupts = <2>;
  343                                         clocks = <&v2m_sysctl 0>, <&v2m_sysctl 1>, <&smbclk>;
  344                                         clock-names = "timclken1", "timclken2", "apb_pclk";
  345                                 };
  346 
  347                                 v2m_timer23: timer@120000 {
  348                                         compatible = "arm,sp804", "arm,primecell";
  349                                         reg = <0x120000 0x1000>;
  350                                         interrupts = <3>;
  351                                         clocks = <&v2m_sysctl 2>, <&v2m_sysctl 3>, <&smbclk>;
  352                                         clock-names = "timclken1", "timclken2", "apb_pclk";
  353                                 };
  354 
  355                                 /* DVI I2C bus */
  356                                 v2m_i2c_dvi: i2c@160000 {
  357                                         compatible = "arm,versatile-i2c";
  358                                         reg = <0x160000 0x1000>;
  359                                         #address-cells = <1>;
  360                                         #size-cells = <0>;
  361 
  362                                         dvi-transmitter@39 {
  363                                                 compatible = "sil,sii9022-tpi", "sil,sii9022";
  364                                                 reg = <0x39>;
  365 
  366                                                 ports {
  367                                                         #address-cells = <1>;
  368                                                         #size-cells = <0>;
  369 
  370                                                         port@0 {
  371                                                                 reg = <0>;
  372                                                                 dvi_bridge_in: endpoint {
  373                                                                         remote-endpoint = <&clcd_pads>;
  374                                                                 };
  375                                                         };
  376                                                 };
  377                                         };
  378 
  379                                         dvi-transmitter@60 {
  380                                                 compatible = "sil,sii9022-cpi", "sil,sii9022";
  381                                                 reg = <0x60>;
  382                                         };
  383                                 };
  384 
  385                                 rtc@170000 {
  386                                         compatible = "arm,pl031", "arm,primecell";
  387                                         reg = <0x170000 0x1000>;
  388                                         interrupts = <4>;
  389                                         clocks = <&smbclk>;
  390                                         clock-names = "apb_pclk";
  391                                 };
  392 
  393                                 compact-flash@1a0000 {
  394                                         compatible = "arm,vexpress-cf", "ata-generic";
  395                                         reg = <0x1a0000 0x100
  396                                                0x1a0100 0xf00>;
  397                                         reg-shift = <2>;
  398                                 };
  399 
  400                                 clcd@1f0000 {
  401                                         compatible = "arm,pl111", "arm,primecell";
  402                                         reg = <0x1f0000 0x1000>;
  403                                         interrupt-names = "combined";
  404                                         interrupts = <14>;
  405                                         clocks = <&v2m_oscclk1>, <&smbclk>;
  406                                         clock-names = "clcdclk", "apb_pclk";
  407                                         /* 800x600 16bpp @36MHz works fine */
  408                                         max-memory-bandwidth = <54000000>;
  409                                         memory-region = <&vram>;
  410 
  411                                         port {
  412                                                 clcd_pads: endpoint {
  413                                                         remote-endpoint = <&dvi_bridge_in>;
  414                                                         arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
  415                                                 };
  416                                         };
  417                                 };
  418 
  419                                 mcc {
  420                                         compatible = "arm,vexpress,config-bus";
  421                                         arm,vexpress,config-bridge = <&v2m_sysreg>;
  422 
  423                                         oscclk0 {
  424                                                 /* MCC static memory clock */
  425                                                 compatible = "arm,vexpress-osc";
  426                                                 arm,vexpress-sysreg,func = <1 0>;
  427                                                 freq-range = <25000000 60000000>;
  428                                                 #clock-cells = <0>;
  429                                                 clock-output-names = "v2m:oscclk0";
  430                                         };
  431 
  432                                         v2m_oscclk1: oscclk1 {
  433                                                 /* CLCD clock */
  434                                                 compatible = "arm,vexpress-osc";
  435                                                 arm,vexpress-sysreg,func = <1 1>;
  436                                                 freq-range = <23750000 65000000>;
  437                                                 #clock-cells = <0>;
  438                                                 clock-output-names = "v2m:oscclk1";
  439                                         };
  440 
  441                                         v2m_oscclk2: oscclk2 {
  442                                                 /* IO FPGA peripheral clock */
  443                                                 compatible = "arm,vexpress-osc";
  444                                                 arm,vexpress-sysreg,func = <1 2>;
  445                                                 freq-range = <24000000 24000000>;
  446                                                 #clock-cells = <0>;
  447                                                 clock-output-names = "v2m:oscclk2";
  448                                         };
  449 
  450                                         volt-vio {
  451                                                 /* Logic level voltage */
  452                                                 compatible = "arm,vexpress-volt";
  453                                                 arm,vexpress-sysreg,func = <2 0>;
  454                                                 regulator-name = "VIO";
  455                                                 regulator-always-on;
  456                                                 label = "VIO";
  457                                         };
  458 
  459                                         temp-mcc {
  460                                                 /* MCC internal operating temperature */
  461                                                 compatible = "arm,vexpress-temp";
  462                                                 arm,vexpress-sysreg,func = <4 0>;
  463                                                 label = "MCC";
  464                                         };
  465 
  466                                         reset {
  467                                                 compatible = "arm,vexpress-reset";
  468                                                 arm,vexpress-sysreg,func = <5 0>;
  469                                         };
  470 
  471                                         muxfpga {
  472                                                 compatible = "arm,vexpress-muxfpga";
  473                                                 arm,vexpress-sysreg,func = <7 0>;
  474                                         };
  475 
  476                                         shutdown {
  477                                                 compatible = "arm,vexpress-shutdown";
  478                                                 arm,vexpress-sysreg,func = <8 0>;
  479                                         };
  480 
  481                                         reboot {
  482                                                 compatible = "arm,vexpress-reboot";
  483                                                 arm,vexpress-sysreg,func = <9 0>;
  484                                         };
  485 
  486                                         dvimode {
  487                                                 compatible = "arm,vexpress-dvimode";
  488                                                 arm,vexpress-sysreg,func = <11 0>;
  489                                         };
  490                                 };
  491                         };
  492                 };
  493         };
  494 };

Cache object: 628805e4a82ede383e83fc5a8153a687


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.