MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Devices                                                 cpuid(7D)



NAME
     cpuid - CPU identification driver

SYNOPSIS
     /dev/cpu/self/cpuid


DESCRIPTION
  SPARC and x86 system
     This device provides implementation-private information  via
     ioctls  about  various  aspects  of  the  implementation  to
     Solaris libraries and utilities.

  x86 systems only
     This device also provides a file-like view of the  namespace
     and  return  values  of the x86 cpuid instruction. The cpuid
     instruction takes a single 32-bit integer function code, and
     returns  four  32-bit  integer  values  corresponding to the
     input value that describe various aspects of  the  capabili-
     ties and configuration of the processor.


     The API for the character device consists of using the  seek
     offset  to  set the function code value, and using a read(2)
     or pread(2) of 16 bytes to  fetch  the  four  32-bit  return
     values  of the instruction in the order %eax, %ebx, %ecx and
     %edx.


     No data can  be  written  to  the  device.  Like  the  cpuid
     instruction,  no  special privileges are required to use the
     device.


     The device  is  useful  to  enable  low-level  configuration
     information  to  be extracted from the CPU without having to
     write any assembler code to  invoke  the  cpuid  instruction
     directly.  It  also  allows the kernel to attempt to correct
     any erroneous data returned by the instruction (prompted  by
     occassional  errors  in  the information exported by various
     processor implementations over the years).


     See the processor manufacturers  documentation  for  further
     information  about  the  syntax  and  semantics  of the wide
     variety of information available from this instruction.

EXAMPLE
     This example allows you to determine if the current x86 pro-
     cessor  supports  "long mode," which is a necessary (but not
     sufficient) condition for running the 64-bit Solaris  kernel
     on the processor.



SunOS 5.11          Last change: 16 Sep 2004                    1






Devices                                                 cpuid(7D)



       /*

       #include 
       #include 
       #include 
       #include 
       #include 
       #include 
       #include 

       static const char devname[] = "/dev/cpu/self/cpuid";

       /*ARGSUSED*/
       int
       main(int argc, char *argv[])
       {
               struct {
                       uint32t reax, rebx, recx, redx;
               } r, *rp = &r;
               int d;
               char *s;

               if ((d = open(devname, ORDONLY)) == -1) {
                       perror(devname);
                       return (1);
               }

               if (pread(d, rp, sizeof (*rp), 0) != sizeof (*rp)) {
                       perror(devname);
                       goto fail;
               }

               s = (char *)&rp->rebx;
               if (strncmp(s, "Auth" "cAMD" "enti", 12) != 0 &&
                   strncmp(s, "Genu" "ntel" "ineI", 12) != 0)
                       goto fail;

               if (pread(d, rp, sizeof (*rp), 0x80000001) == sizeof (*rp)) {
                       /*
                        * Read extended feature word; check bit 29
                        */
                       (void) close(d);
                       if ((rp->redx >> 29) & 1) {
                               (void) printf("processor supports long mode\n");
                               return (0);
                       }
               }
       fail:
               (void) close(d);
               return (1);
       }




SunOS 5.11          Last change: 16 Sep 2004                    2






Devices                                                 cpuid(7D)



ERORS
     ENXIO     Results from attempting to read data from the dev-
               ice  on  a  system  that  does not support the CPU
               identification interfaces


     EINVAL    Results from reading from an  offset  larger  than
               UINTMAX,  or  attempting to read with a size that
               is not multiple of 16 bytes.


FILES
     /dev/cpu/self/cpuid    Provides access to CPU identification
                            data.


ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Availability                 SUNWckr                     
    
     Interface Stability          Evolving                    
    


SEE ALSO
     psrinfo(1M), prtconf(1M), pread(2), read(2), attributes(5)






















SunOS 5.11          Last change: 16 Sep 2004                    3



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™