VxWorks API Reference : OS Libraries

vxLib

NAME

vxLib - miscellaneous support routines

ROUTINES

vxTas( ) - C-callable atomic test-and-set primitive
vxMemArchProbe( ) - architecture specific part of vxMemProbe
vxMemProbe( ) - probe an address for a bus error
vxSSEnable( ) - enable the superscalar dispatch (MC68060)
vxSSDisable( ) - disable the superscalar dispatch (MC68060)
vxPowerModeSet( ) - set the power management mode (PowerPC, SH, x86)
vxPowerModeGet( ) - get the power management mode (PowerPC, SH, x86)
vxPowerDown( ) - place the processor in reduced-power mode (PowerPC, SH)
vxCr0Get( ) - get a content of the Control Register 0 (x86)
vxCr0Set( ) - set a value to the Control Register 0 (x86)
vxCr2Get( ) - get a content of the Control Register 2 (x86)
vxCr2Set( ) - set a value to the Control Register 2 (x86)
vxCr3Get( ) - get a content of the Control Register 3 (x86)
vxCr3Set( ) - set a value to the Control Register 3 (x86)
vxCr4Get( ) - get a content of the Control Register 4 (x86)
vxCr4Set( ) - set a value to the Control Register 4 (x86)
vxEflagsGet( ) - get a content of the EFLAGS register (x86)
vxEflagsSet( ) - set a value to the EFLAGS register (x86)
vxDrGet( ) - get a content of the Debug Register 0 to 7 (x86)
vxDrSet( ) - set a value to the Debug Register 0 to 7 (x86)
vxTssGet( ) - get a content of the TASK register (x86)
vxTssSet( ) - set a value to the TASK register (x86)
vxGdtrGet( ) - get a content of the Global Descriptor Table Register (x86)
vxIdtrGet( ) - get a content of the Interrupt Descriptor Table Register (x86)
vxLdtrGet( ) - get a content of the Local Descriptor Table Register (x86)

DESCRIPTION

This module contains miscellaneous VxWorks support routines.

INCLUDE FILES

vxLib.h


OS Libraries : Routines

vxTas( )

NAME

vxTas( ) - C-callable atomic test-and-set primitive

SYNOPSIS

BOOL vxTas
    (
    void * address            /* address to test and set */
    )

DESCRIPTION

This routine provides a C-callable interface to a test-and-set instruction. The test-and-set instruction is executed on the specified address. The architecture test-and-set instruction is:

      68K:    tas
      x86:    lock bts
      SH:     tas.b
      ARM:    swpb

This routine is equivalent to sysBusTas( ) in sysLib.

MIPS

Because VxWorks does not support the MIPS MMU, only kseg0 and kseg1 addresses are accepted; other addresses return FALSE.

NOTE X86

BTS "Bit Test and Set" instruction is executed with LOCK instruction prefix to lock the Bus during the execution. The bit position 0 is toggled.

NOTE SH

The SH version of vxTas( ) simply executes the tas.b instruction, and the test-and-set (atomic read-modify-write) operation may require an external bus locking mechanism on some hardware. In this case, wrap the vxTas( ) with a bus locking and unlocking code in the sysBusTas( ).

RETURNS

TRUE if the value had not been set (but is now), or FALSE if the value was set already.

SEE ALSO

vxLib, sysBusTas( )


OS Libraries : Routines

vxMemArchProbe( )

NAME

vxMemArchProbe( ) - architecture specific part of vxMemProbe

SYNOPSIS

STATUS vxMemArchProbe
    (
    char * adrs,              /* address to be probed */
    int    mode,              /* VX_READ or VX_WRITE */
    int    length,            /* 1, 2, 4, or 8 */
    char * pVal               /* where to return value, or ptr to value */
                              /* to be written */ 
    )

DESCRIPTION

This is the routine implementing the architecture specific part of the vxMemProbe routine. It traps the relevant exceptions while accessing the specified address. If an exception occurs, then the result will be ERROR. If no exception occurs then the result will be OK.

RETURNS

OK or ERROR if an exception occurred during access.

SEE ALSO

vxLib


OS Libraries : Routines

vxMemProbe( )

NAME

vxMemProbe( ) - probe an address for a bus error

SYNOPSIS

STATUS vxMemProbe
    (
    char * adrs,              /* address to be probed */
    int    mode,              /* VX_READ or VX_WRITE */
    int    length,            /* 1, 2, 4, or 8 */
    char * pVal               /* where to return value, or ptr to value */
                              /* to be written */ 
    )

DESCRIPTION

This routine probes a specified address to see if it is readable or writable, as specified by mode. The address is read or written as 1, 2, or 4 bytes, as specified by length (values other than 1, 2, or 4 yield unpredictable results). If the probe is a VX_READ (0), the value read is copied to the location pointed to by pVal. If the probe is a VX_WRITE (1), the value written is taken from the location pointed to by pVal. In either case, pVal should point to a value of 1, 2, or 4 bytes, as specified by length.

Note that only bus errors are trapped during the probe, and that the access must otherwise be valid (i.e., it must not generate an address error).

EXAMPLE

    testMem (adrs)
        char *adrs;
        {
        char testW = 1;
        char testR;

        if (vxMemProbe (adrs, VX_WRITE, 1, &testW) == OK)
            printf ("value %d written to adrs %x\n", testW, adrs);

        if (vxMemProbe (adrs, VX_READ, 1, &testR) == OK)
            printf ("value %d read from adrs %x\n", testR, adrs);
        }

MODIFICATION

The BSP can modify the behaviour of vxMemProbe( ) by supplying an alternate routine and placing the address in the global variable _func_vxMemProbeHook. The BSP routine will be called instead of the architecture specific routine vxMemArchProbe( ).

RETURNS

OK, or ERROR if the probe caused a bus error or was misaligned.

SEE ALSO

vxLib, vxMemArchProbe( )


OS Libraries : Routines

vxSSEnable( )

NAME

vxSSEnable( ) - enable the superscalar dispatch (MC68060)

SYNOPSIS

void vxSSEnable (void)

DESCRIPTION

This function sets the ESS bit of the Processor Configuration Register (PCR) to enable the superscalar dispatch.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxSSDisable( )

NAME

vxSSDisable( ) - disable the superscalar dispatch (MC68060)

SYNOPSIS

void vxSSDisable (void)

DESCRIPTION

This function resets the ESS bit of the Processor Configuration Register (PCR) to disable the superscalar dispatch.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxPowerModeSet( )

NAME

vxPowerModeSet( ) - set the power management mode (PowerPC, SH, x86)

SYNOPSIS

STATUS vxPowerModeSet
    (
    UINT32 mode               /* power management mode to select */
    )

DESCRIPTION

This routine selects the power management mode to be activated when vxPowerDown( ) is called. vxPowerModeSet( ) is normally called in the BSP initialization routine sysHwInit( ).

USAGE PPC

Power management modes include the following:

VX_POWER_MODE_DISABLE (0x1)
Power management is disabled; this prevents the MSR(POW) bit from being set (all PPC).
VX_POWER_MODE_FULL (0x2)
All CPU units are active while the kernel is idle (PPC603, PPCEC603 and PPC860 only).
VX_POWER_MODE_DOZE (0x4)
Only the decrementer, data cache, and bus snooping are active while the kernel is idle (PPC603, PPCEC603 and PPC860).
VX_POWER_MODE_NAP (0x8)
Only the decrementer is active while the kernel is idle (PPC603, PPCEC603 and PPC604 ).
VX_POWER_MODE_SLEEP (0x10)
All CPU units are inactive while the kernel is idle (PPC603, PPCEC603 and PPC860 - not recommended for the PPC603 and PPCEC603 architecture).
VX_POWER_MODE_DEEP_SLEEP (0x20)
All CPU units are inactive while the kernel is idle (PPC860 only - not recommended).
VX_POWER_MODE_DPM (0x40)
Dynamic Power Management Mode (PPC603 and PPCEC603 only).
VX_POWER_MODE_DOWN (0x80)
Only a hard reset causes an exit from power-down low power mode (PPC860 only - not recommended).

USAGE SH

Power management modes include the following:

VX_POWER_MODE_DISABLE (0x0)
Power management is disabled.
VX_POWER_MODE_SLEEP (0x1)
The core CPU is halted, on-chip peripherals operating, external memory refreshing.
VX_POWER_MODE_DEEP_SLEEP (0x2)
The core CPU is halted, on-chip peripherals operating, external memory self-refreshing (SH-4 only).
VX_POWER_MODE_USER (0xff)
Set up to three 8-bit standby registers with user-specified values:
    vxPowerModeSet (VX_POWER_MODE_USER | sbr1<<8 | sbr2<<16 | sbr3<<24);
The sbr1 value is written to the STBCR or SBYCR1, sbr2 is written to the STBCR2 or SBYCR2, and sbr3 is written to the STBCR3 register (when available), depending on the SH processor type.

USAGE X86

vxPowerModeSet( ) is called in the BSP initialization routine sysHwInit( ). Power management modes include the following:

VX_POWER_MODE_DISABLE (0x1)
Power management is disable: this prevents halting the CPU.
VX_POWER_MODE_AUTOHALT (0x4)
Power management is enable: this allows halting the CPU.

RETURNS

OK, or ERROR if mode is incorrect or not supported by the processor.

SEE ALSO

vxLib, vxPowerModeGet( ), vxPowerDown( )


OS Libraries : Routines

vxPowerModeGet( )

NAME

vxPowerModeGet( ) - get the power management mode (PowerPC, SH, x86)

SYNOPSIS

UINT32 vxPowerModeGet (void)

DESCRIPTION

This routine returns the power management mode set by vxPowerModeSet( ).

RETURNS

The power management mode, or ERROR if no mode has been selected or if power management is not supported.

SEE ALSO

vxLib, vxPowerModeSet( ), vxPowerDown( )


OS Libraries : Routines

vxPowerDown( )

NAME

vxPowerDown( ) - place the processor in reduced-power mode (PowerPC, SH)

SYNOPSIS

UINT32 vxPowerDown (void)

DESCRIPTION

This routine activates the reduced-power mode if power management is enabled. It is called by the scheduler when the kernel enters the idle loop. The power management mode is selected by vxPowerModeSet( ).

RETURNS

OK, or ERROR if power management is not supported or if external interrupts are disabled.

SEE ALSO

vxLib, vxPowerModeSet( ), vxPowerModeGet( )


OS Libraries : Routines

vxCr0Get( )

NAME

vxCr0Get( ) - get a content of the Control Register 0 (x86)

SYNOPSIS

int vxCr0Get (void)

DESCRIPTION

This routine gets a content of the Control Register 0.

RETURNS

a value of the Control Register 0

SEE ALSO

vxLib


OS Libraries : Routines

vxCr0Set( )

NAME

vxCr0Set( ) - set a value to the Control Register 0 (x86)

SYNOPSIS

void vxCr0Set
    (
    int value                 /* CR0 value */
    )

DESCRIPTION

This routine sets a value to the Control Register 0.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxCr2Get( )

NAME

vxCr2Get( ) - get a content of the Control Register 2 (x86)

SYNOPSIS

int vxCr2Get (void)

DESCRIPTION

This routine gets a content of the Control Register 2.

RETURNS

a value of the Control Register 2

SEE ALSO

vxLib


OS Libraries : Routines

vxCr2Set( )

NAME

vxCr2Set( ) - set a value to the Control Register 2 (x86)

SYNOPSIS

void vxCr2Set
    (
    int value                 /* CR2 value */
    )

DESCRIPTION

This routine sets a value to the Control Register 2.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxCr3Get( )

NAME

vxCr3Get( ) - get a content of the Control Register 3 (x86)

SYNOPSIS

int vxCr3Get (void)

DESCRIPTION

This routine gets a content of the Control Register 3.

RETURNS

a value of the Control Register 3

SEE ALSO

vxLib


OS Libraries : Routines

vxCr3Set( )

NAME

vxCr3Set( ) - set a value to the Control Register 3 (x86)

SYNOPSIS

void vxCr3Set
    (
    int value                 /* CR3 value */
    )

DESCRIPTION

This routine sets a value to the Control Register 3.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxCr4Get( )

NAME

vxCr4Get( ) - get a content of the Control Register 4 (x86)

SYNOPSIS

int vxCr4Get (void)

DESCRIPTION

This routine gets a content of the Control Register 4.

RETURNS

a value of the Control Register 4

SEE ALSO

vxLib


OS Libraries : Routines

vxCr4Set( )

NAME

vxCr4Set( ) - set a value to the Control Register 4 (x86)

SYNOPSIS

void vxCr4Set
    (
    int value                 /* CR4 value */
    )

DESCRIPTION

This routine sets a value to the Control Register 4.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxEflagsGet( )

NAME

vxEflagsGet( ) - get a content of the EFLAGS register (x86)

SYNOPSIS

int vxEflagsGet (void)

DESCRIPTION

This routine gets a content of the EFLAGS register

RETURNS

a value of the EFLAGS register

SEE ALSO

vxLib


OS Libraries : Routines

vxEflagsSet( )

NAME

vxEflagsSet( ) - set a value to the EFLAGS register (x86)

SYNOPSIS

void vxEflagsSet
    (
    int value                 /* EFLAGS value */
    )

DESCRIPTION

This routine sets a value to the EFLAGS register

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxDrGet( )

NAME

vxDrGet( ) - get a content of the Debug Register 0 to 7 (x86)

SYNOPSIS

void vxDrGet
    (
    int * pDr0,               /* DR0 */
    int * pDr1,               /* DR1 */
    int * pDr2,               /* DR2 */
    int * pDr3,               /* DR3 */
    int * pDr4,               /* DR4 */
    int * pDr5,               /* DR5 */
    int * pDr6,               /* DR6 */
    int * pDr7                /* DR7 */
    )

DESCRIPTION

This routine gets a content of the Debug Register 0 to 7.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxDrSet( )

NAME

vxDrSet( ) - set a value to the Debug Register 0 to 7 (x86)

SYNOPSIS

void vxDrSet
    (
    int dr0,                  /* DR0 */
    int dr1,                  /* DR1 */
    int dr2,                  /* DR2 */
    int dr3,                  /* DR3 */
    int dr4,                  /* DR4 */
    int dr5,                  /* DR5 */
    int dr6,                  /* DR6 */
    int dr7                   /* DR7 */
    )

DESCRIPTION

This routine sets a value to the Debug Register 0 to 7.

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxTssGet( )

NAME

vxTssGet( ) - get a content of the TASK register (x86)

SYNOPSIS

int vxTssGet (void)

DESCRIPTION

This routine gets a content of the TASK register

RETURNS

a value of the TASK register

SEE ALSO

vxLib


OS Libraries : Routines

vxTssSet( )

NAME

vxTssSet( ) - set a value to the TASK register (x86)

SYNOPSIS

void vxTssSet
    (
    int value                 /* TASK register value */
    )

DESCRIPTION

This routine sets a value to the TASK register

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxGdtrGet( )

NAME

vxGdtrGet( ) - get a content of the Global Descriptor Table Register (x86)

SYNOPSIS

void vxGdtrGet
    (
    long long int * pGdtr     /* memory to store GDTR */
    )

DESCRIPTION

This routine gets a content of the Global Descriptor Table Register

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxIdtrGet( )

NAME

vxIdtrGet( ) - get a content of the Interrupt Descriptor Table Register (x86)

SYNOPSIS

void vxIdtrGet
    (
    long long int * pIdtr     /* memory to store IDTR */
    )

DESCRIPTION

This routine gets a content of the Interrupt Descriptor Table Register

RETURNS

N/A

SEE ALSO

vxLib


OS Libraries : Routines

vxLdtrGet( )

NAME

vxLdtrGet( ) - get a content of the Local Descriptor Table Register (x86)

SYNOPSIS

void vxLdtrGet
    (
    long long int * pLdtr     /* memory to store LDTR */
    )

DESCRIPTION

This routine gets a content of the Local Descriptor Table Register

RETURNS

N/A

SEE ALSO

vxLib