driver.conf(5) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

driver.conf(5)

driver.conf(5)                   File Formats                   driver.conf(5)

NAME
       driver.conf - driver configuration files

SYNOPSIS
       driver.conf

DESCRIPTION
       Driver  configuration  files  provide values for device properties. The
       values override values provided by the devices themselves. Most  modern
       devices  provide  enough property values to make a driver configuration
       file unnecessary.


       The system associates a driver with its configuration file by name. For
       example, a driver in /usr/kernel/drv called wombat has the driver  con‐
       figuration file wombat.conf, also stored in /usr/kernel/drv, associated
       with  it.  The driver configuration file should be placed in the direc‐
       tory in which the 32-bit driver would be located, even  though  only  a
       64-bit  driver  can be used on Oracle Solaris 11. For example, a 64-bit
       driver stored in /usr/kernel/drv/sparcv9 stores its  driver  configura‐
       tion file in /usr/kernel/drv.


       The value of the name property is the node name. In a driver.conf file,
       where  the  generic node name and compatible property associated with a
       self-identifying devices are typically not used, the node name must  be
       a  binding  name.  The binding name is the name chosen by the system to
       bind a driver to the device. The binding name is either an alias  asso‐
       ciated with the driver established by add_drv(8) or the driver name it‐
       self.


       The  syntax  of a single entry in a driver configuration file takes one
       of three forms:

         name="node name" parent="parent name" [property-name=value ...];



       In this form, the parent name can be either the  binding  name  of  the
       parent nexus driver or a specific full pathname, beginning with a slash
       (/)  character,  identifying  a specific instance of a parent bus. If a
       binding name is used then all parent nodes bound to that driver  match.
       A  generic  name  (for  example,  pci) is not a valid binding name even
       though it can appear in the full pathname of all intended parents.


       Alternatively, the parent can be specified by the type of interface  it
       presents to its children.

         name="node name" class="class name" [property-name=value ...];



       For  example,  the  driver for the SCSI host adapter can have different
       names on different platforms, but the target drivers can use class scsi
       to insulate themselves from these differences.


       Entries of either form above correspond to a device  information  (dev‐
       info)  node  in  the  kernel device tree. Each node has a name which is
       usually the name of the driver, and a parent name which is the name  of
       the  parent  devinfo  node to which it will be connected. Any number of
       name-value pairs can be specified to create properties on the prototype
       devinfo node. These properties can be retrieved using the DDI  property
       interfaces (for example, ddi_prop_get_int(9F) and ddi_prop_lookup(9F)).
       The  prototype  devinfo  node  specification  must be terminated with a
       semicolon (;).


       The third form of an entry is simply a list of properties.

         [property-name=value ...];



       A property created in this way is treated as global to the  driver.  It
       can be overridden by a property with the same name on a particular dev‐
       info  node,  either by creating one explicitly on the prototype node in
       the driver.conf file or by the driver.


       Items are separated by any number of newlines, SPACE or TAB characters.


       The configuration file can contain several entries to specify different
       device configurations and parent nodes. The system can call the  driver
       for  each  possible prototype devinfo node, and it is generally the re‐
       sponsibility of the drivers probe(9E) routine to determine if the hard‐
       ware described by the prototype devinfo node is really present.


       Property names must not violate the naming conventions  for  Open  Boot
       PROM  properties  or for IEEE 1275 names. In particular, property names
       should contain only printable characters, and should  not  contain  at-
       sign (@), slash (/), backslash (\), colon (:), or square brackets ([]).
       Property  values can be decimal integers or strings delimited by double
       quotes ("). Hexadecimal integers can be constructed  by  prefixing  the
       digits with 0x.


       A  comma separated list of integers can be used to construct properties
       whose value is an integer array. The value of such  properties  can  be
       retrieved inside the driver using ddi_prop_lookup_int_array(9F).


       Comments are specified by placing a # character at the beginning of the
       comment string, the comment string extends for the rest of the line.


       In  addition to the vendor driver.conf files provided by the system and
       driver providers  in  /kernel  and  /platform,  user-administered  dri‐
       ver.conf  files  may  be  added  in /etc/driver/drv. Files in /etc/dri‐
       ver/drv are available for local customizations to supplement the vendor
       driver configuration.


       The format of an /etc/driver/drv  driver.conf file is identical to that
       of a vendor driver.conf file.


       For each driver, the vendor and admin driver.conf files are merged  to‐
       gether  and made available to the driver and system, as a merged set of
       device specifications with per-device properties and a  global  set  of
       properties visible to every device instance bound to this driver.


       These  merged  per-device  and  global properties are visible to an in‐
       stance of the driver via the ddi_prop_lookup(9F) and related interfaces
       automatically, with no intervention by the driver required.


       A driver that does provide configurable options by way  of  driver.conf
       should keep this property merge behavior in mind. Inverting the meaning
       of  an  option  from  one  release to the next could cause problems for
       users that may have configured a system with the  previous  interpreta‐
       tion of that option.


       A driver which has converted its configurable options from one revision
       to another may find it useful to convert older option configurations to
       the new supported set. The system maintains two separate property lists
       providing the default vendor properties and the admin customizations.


       Each  property  originally derived from the vendor driver.conf file and
       then merged with an updated value will be entered both the  vendor  and
       admin property lists. Each list may be searched via ddi_prop_lookup(9F)
       as  either  the  DDI_PROP_VENDOR  or  DDI_PROP_ADMIN, respectively. The
       property on the vendor list  records  the  property's  original  value,
       while the property on the admin list provides the customization.


       There  is  no  property entry on the vendor list for a property derived
       solely from the admin driver.conf. Such properties have entries on  the
       admin list only, providing the admin-specified value.

   Supplementing the Vendor Driver Configuration
       First, it is important to understand the format of a driver.conf entry.
       Each entry can be one of two types, specifying either a device informa‐
       tion  (devinfo)  node  as a parent specification or a set of properties
       globally available to all device instances bound to this driver.


       An entry defining a device info node must specify the node's parent  as
       either  the  binding  name of the parent nexus driver, a pathname or by
       the class of interface presented to its children. Other  properties  on
       the  parent specification define qualifiers required to correctly iden‐
       tify the specific device, and depend upon the parent driver or class of
       interface. An example of such a device qualifier property is  'target',
       used  by  SCSI hba adapters to identifier a specific device on its bus.
       Such qualifiers must be retained unchanged so that the system will con‐
       tinue to properly enumerate that device instance.


       To modify one or more property values on such a  parent  specification,
       the targeted parent specification in the vendor driver.conf must be du‐
       plicated  in  the  admin driver.conf, preserving each device qualifying
       property. Then the admin entry can be customized, supplementing it with
       additional or modified configurable options.


       Parent specifications in the admin driver.conf that do  not  correspond
       to  a match in the vendor driver.conf file are added to the list of de‐
       vice information nodes available to be potentially  enumerated  by  the
       system for that driver.


       The second type of driver.conf entry defines global properties for that
       driver.  The admin driver.conf file can both update existing properties
       in the vendor driver.conf file with new values, and provide new  global
       property  name-value  pairs  available to all device instances bound to
       that driver.

   Considerations for Driver Writers
       The process of upgrading a Solaris system from one release  to  another
       involving  delivering  new  versions of drivers including that driver's
       vendor driver.conf. It is desired that a system's earlier configuration
       should continue to work as before, with the new drivers and vendor dri‐
       ver.conf files together with the admin customized driver.conf files.


       For a driver to work well under this model, each  driver  needs  to  be
       properly designed to present a disciplined set of configurable options.
       It  would  be  best to carefully define a driver's options with this in
       mind and to fully describe the model presented in the driver's documen‐
       tation or man page.


       If a driver makes a change in its configuration options that would  in‐
       validate  or  supersede  the admin settings, the driver should make the
       effort to discover the admin settings via the prior options  and  honor
       them.


       For  example,  let's  say  a driver supports a timeout configuration in
       units of seconds. A new version of the  driver  now  supports  a  finer
       timeout  granularity  in units of milliseconds. The new property should
       be named so it can be distinguished from the first. The driver can then
       look up the earlier property on the admin list and if  found,  continue
       to honor it.

         /*
          * Has the timeout been locally configured using the
          * prior option of timeout in units of seconds?
          */
         if (ddi_prop_lookup_int(DDI_DEV_T_ANY, dip,
             DDI_PROP_ADMIN, "timeout") == DDI_PROP_SUCCESS) {
                 if (n != 1) {
                          ddi_prop_free(ivalues);
                          return (EINVAL);
                  }
                  /* yes - convert our working timeout accordingly */
                  dip->ms_timeout = 1000 * ivalues[0];
                  /* record the new parameter setting for confirmation */
                  (void) ddi_prop_update_int(DDI_DEV_T_NONE,
                      dip, "ms-timeout", dip->ms_timeout);
                  ddi_prop_free(ivalues);
         }




EXAMPLES
       Example 1 Using a Configuration File for a PCI Bus Frame Buffer



       The  following  is  an example of a configuration file called ACME,sim‐
       ple.conf for a PCI bus frame buffer called ACME,simple.


         #
         # Copyright (c) 1993, by ACME Fictitious Devices, Inc.
         #
         #ident  "@(#)ACME,simple.conf   1.3     1999/09/09"

         name="ACME,simple" class="pci" unit-address="3,1"
                 debug-mode=12;




       This example creates a prototype devinfo node called ACME,simple  under
       all parent nodes of class pci. The node has device and function numbers
       of  3  and 1, respectively; the property debug-mode is provided for all
       instances of the driver.

       Example 2 Using a Configuration File for a Pseudo Device Driver



       The following is an example of a configuration file  called  ACME,exam‐
       ple.conf for a pseudo device driver called ACME,example.


         #
         # Copyright (c) 1993, ACME Fictitious Devices, Inc.
         #
         #ident  "@(#)ACME,example.conf  1.2   93/09/09"
         name="ACME,example" parent="pseudo" instance=0
             debug-level=1;

         name="ACME,example" parent="pseudo" instance=1;

         whizzy-mode="on";
         debug-level=3;




       This creates two devinfo nodes called ACME,example which attaches below
       the  pseudo  node  in  the kernel device tree. The instance property is
       only interpreted by the pseudo node, see pseudo(5) for further details.
       A property called debug-level is created  on  the  first  devinfo  node
       which has the value 1. The example driver is able to fetch the value of
       this property using ddi_prop_get_int(9F).



       Two  global  driver  properties are created, whizzy-mode (which has the
       string value "on") and debug-level (which has the value 3). If the dri‐
       ver looks up the property whizzy-mode on either node, it retrieves  the
       value of the global whizzy-mode property ("on"). If the driver looks up
       the  debug-level  property on the first node, it retrieves the value of
       the debug-level property on that node. Looking up the same property  on
       the second node retrieves the value of the global debug-level property.

       Example 3 Modifying a Driver Global Property



       The bge.conf provides default values for the receive and xmit rings.


         #
         # The properties below represents the number of receive and send ring used.
         # For BCM5705, BCM5782, etc, there are only 1 receive ring and 1 send ring.
         # Otherwise, there can be up to 16 receive rings and 4 send rings.
         #
         bge-rx-rings            = 16;
         bge-tx-rings            = 1;






       To customize the bge-tx-rings value, place a bge.conf file in /etc/dri‐
       ver/drv with the following line:


         bge-tx-rings            = 2;




       When  the  bge driver is next loaded, the updated value can be observed
       with prtconf:


         pci108e,534d (pci14e4,16a7), instance #0
             System software properties:
               name='bge-known-subsystems' type=int items=16
               name='bge-rx-rings' type=int items=1
                     value=00000010
               name='bge-tx-rings' type=int items=1
                     value=00000002




       Additionally, prtconf -u can be used to display both the  original  de‐
       fault and the updated bge-tx-rings property values:


         Admin global properties:
             name='bge-tx-rings' type=int items=1
                  value=00000002
         Vendor global properties:
             name='bge-tx-rings' type=int items=1
                  value=00000001


       Example 4 Modifying configurable values on a specific device



       To  modify the configurable parameter 'retries' on an sd device at tar‐
       get 0, lun 0 and 'queue-max' on the device target 1, lun  0,  place  an
       sd.conf file in /etc/driver/drv with the following lines:


         name="sd" class="scsi" target=0 lun=0 retries=4;
         name="sd" class="scsi" target=1 lun=0 queue-max=16;




       The updated values can be observed with prtconf:



         sd, instance #1
             System properties:
                name='lun' type=int items=1
                   value=00000000
                name='target' type=int items=1
                   value=00000000
                name='class' type=string items=1
                   value='scsi'
                name='retries' type=int items=1
                   value=00000004
                name='ddi-devid-registrant' type=int items=1
                   value=00000001

         sd, instance #2
             System properties:
                name='lun' type=int items=1
                   value=00000000
                name='target' type=int items=1
                   value=00000001
                name='class' type=string items=1
                   value='scsi'
                name='queue-max' type=int items=1
                   value=00000010
                name='ddi-devid-registrant' type=int items=1
                   value=00000001




       With  prtconf  -u,  the admin property values are displayed. The vendor
       property list in this case contains no properties as  the  vendor  dri‐
       ver.conf contained no specification for such properties.


         sd, instance #1
             Admin properties:
                 name='retries' type=int items=1
                     value=00000004

         sd, instance #2
             Admin properties:
                 name='queue-max' type=int items=1
                     value=00000010


       Example 5 Adding a New Device Instance



       For  purposes of illustration, suppose that the vendor sd.conf contains
       only the following parent specification:


         name="sd" class="scsi" target=0 lun=0 max-retries=4;




       and that it is desired to also support a target=1 device instance. Fur‐
       ther suppose that target=0 should be configured  with  the  max-retries
       parameter set to 10 and queueing set to 32, and that target=1 with max-
       retries  set to 10 and queueing to 64. Place the following lines in the
       sd.conf file in /etc/driver/drv:


         name="sd" class="scsi" target=0 lun=0 max-retries=8 queue=32;
         name="sd" class="scsi" target=1 lun=0 max-retries=10 queue=64;




       These changes can be observed with prtconf. For target  0,  the  vendor
       list  contains the vendor setting for the number of retries and the up‐
       dated value in the admin list. There was no specification for this tar‐
       get as delivered, so the vendor list for target  1  is  empty  and  all
       specified parameters from the admin list are displayed.


         sd, instance #1
             System properties:
                name='max-retries' type=int items=1
                   value=00000008
                name='lun' type=int items=1
                   value=00000000
                name='target' type=int items=1
                   value=00000000
                name='class' type=string items=1
                   value='scsi'
                name='queue' type=int items=1
                   value=00000020
                name='ddi-devid-registrant' type=int items=1
                   value=00000001
              Admin properties:
                 name='queue' type=int items=1
                   value=00000020
                 name='max-retries' type=int items=1
                   value=00000008
              Vendor properties:
                 name='max-retries' type=int items=1
                   value=00000004

         sd, instance #2 (driver not attached)
              System properties:
                  name='queue' type=int items=1
                    value=00000040
                  name='max-retries' type=int items=1
                    value=0000000a
                  name='lun' type=int items=1
                    value=00000000
                  name='target' type=int items=1
                    value=00000001
                  name='class' type=string items=1
                    value='scsi'
                  name='ddi-devid-registrant' type=int items=1
                    value=00000001
               Admin properties:
                  name='queue' type=int items=1
                    value=00000040
                  name='max-retries' type=int items=1
                    value=0000000a
                  name='lun' type=int items=1
                    value=00000000
                  name='target' type=int items=1
                    value=00000001
                  name='class' type=string items=1
                     value='scsi'



SEE ALSO
       driver(5),  pci(5), pseudo(5), scsi(5), add_drv(8), probe(9E), ddi_get‐
       longprop(9F),           ddi_getprop(9F),            ddi_getproplen(9F),
       ddi_prop_get_int(9F), ddi_prop_lookup(9F), ddi_prop_op(9F)

WARNINGS
       To  avoid  namespace  collisions between multiple driver vendors, it is
       strongly recommended that the name property of the driver should  begin
       with  a vendor-unique string. A reasonably compact and unique choice is
       the vendor over-the-counter stock symbol.

NOTES
       The update_drv(8) command should be used to prompt the kernel to reread
       driver.conf files.


       It is not currently possible to either remove or undefine  a  property,
       or  to  remove  a parent specification, defined in a vendor driver.conf
       file with an addition to an /etc/driver/drv driver.conf file.

Oracle Solaris 11.4               14 Dec 2023                   driver.conf(5)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3