Writing Device Drivers

Examples: Use of Device Macros

The examples in this section show how some of the device-related macros can be used to debug a driver.

The following ls -l command shows how the /devices path fits into the devinfo structure:

# ls -l /dev/ttya
lrwxrwxrwx   1 root   root   6 Aug 17 17:50 /dev/ttya -> term/a
# ls -l /dev/term/a
lrwxrwxrwx   1 root   root   32 Aug 17 17:42 /dev/term/a -> 
    ../../devices/obio/zs@0,100000:a

Example 18–1 shows how to obtain information about the /dev/ttya device from the devinfo structure and other kernel structures, beginning with devinfo_major.


Example 18–1 The devinfo_major Macro

# ls -lL /dev/ttya
crw-rw-rw-   1 root     sys    29,  0 Aug 17 17:42 /dev/ttya
# ~stopped      at:
edd000d8:       ta      %icc,%g0 + 125
kadb[0]: 0t29$<devinfo_major
                ============== devinfo  f5f0dcd0
                                binding_name
0xf5bb38f8:                       zs
                                node_name
0xf5bb38f8:                       zs
                                addr
0xf5f8d6a0:                       0,100000
                                node_state
                                  6                 DS_READY
                                major (hex)
                                  1d
                                instance
                                  0

0xf5f0dcd0:     parent          child           sibling
                f5f0f380        0               f5f0dba8

                ============== devinfo  f5f0dba8
                                binding_name
0xf5bb3a18:                       zs
                                node_name
0xf5bb3a18:                       zs
                                addr
0xf5f90560:                       0,0
                                node_state
                                  6                 DS_READY
                                major (hex)
                                  1d
                                instance
                                  1

0xf5f0dba8:     parent          child           sibling
                f5f0f380        0               f5f0da80


Example 18–2 shows the use of the devinfo_brief macro. It also shows the use of top_devinfo. top_devinfo is a pointer to the root of the devinfo tree (rootnexus)—all other devinfo nodes are descendants of this node. If you want to look at the device tree top-down in the debugger, this is where you start.


Example 18–2 The devinfo_brief Macro

kadb[0]: *top_devinfo$<devinfo_brief

                ============== devinfo  f5f0fde8
                                binding_name
0xf5bc6a30:                       SUNW,SPARCstation-10
                                node_name
0xf5bc6af8:                       SUNW,SPARCstation-10
                                addr
0xf5f90950:
                                node_state
                                  6                 DS_READY
                                major (hex)
                                  1

0xf5f0fde8:     parent          child           sibling
                0               f5f0fcc0        0