| @node Platform, Contributors, Maintenance, Top |
| @c %MENU% Describe all platform-specific facilities provided |
| @appendix Platform-specific facilities |
| |
| @Theglibc{} can provide machine-specific functionality. |
| |
| @menu |
| * PowerPC:: Facilities Specific to the PowerPC Architecture |
| @end menu |
| |
| @node PowerPC |
| @appendixsec PowerPC-specific Facilities |
| |
| Facilities specific to PowerPC that are not specific to a particular |
| operating system are declared in @file{sys/platform/ppc.h}. |
| |
| @deftypefun {uint64_t} __ppc_get_timebase (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Read the current value of the Time Base Register. |
| |
| The @dfn{Time Base Register} is a 64-bit register that stores a monotonically |
| incremented value updated at a system-dependent frequency that may be |
| different from the processor frequency. More information is available in |
| @cite{Power ISA 2.06b - Book II - Section 5.2}. |
| |
| @code{__ppc_get_timebase} uses the processor's time base facility directly |
| without requiring assistance from the operating system, so it is very |
| efficient. |
| @end deftypefun |
| |
| @deftypefun {uint64_t} __ppc_get_timebase_freq (void) |
| @safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}} |
| @c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd |
| @c __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd |
| @c the initialization of the static timebase_freq is not exactly |
| @c safe, because hp_timing_t cannot be atomically set up. |
| @c syscall:get_tbfreq ok |
| @c open dup @acsfd |
| @c read dup ok |
| @c memcpy dup ok |
| @c memmem dup ok |
| @c close dup @acsfd |
| Read the current frequency at which the Time Base Register is updated. |
| |
| This frequency is not related to the processor clock or the bus clock. |
| It is also possible that this frequency is not constant. More information is |
| available in @cite{Power ISA 2.06b - Book II - Section 5.2}. |
| @end deftypefun |
| |
| The following functions provide hints about the usage of resources that are |
| shared with other processors. They can be used, for example, if a program |
| waiting on a lock intends to divert the shared resources to be used by other |
| processors. More information is available in @cite{Power ISA 2.06b - Book II - |
| Section 3.2}. |
| |
| @deftypefun {void} __ppc_yield (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Provide a hint that performance will probably be improved if shared resources |
| dedicated to the executing processor are released for use by other processors. |
| @end deftypefun |
| |
| @deftypefun {void} __ppc_mdoio (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Provide a hint that performance will probably be improved if shared resources |
| dedicated to the executing processor are released until all outstanding storage |
| accesses to caching-inhibited storage have been completed. |
| @end deftypefun |
| |
| @deftypefun {void} __ppc_mdoom (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Provide a hint that performance will probably be improved if shared resources |
| dedicated to the executing processor are released until all outstanding storage |
| accesses to cacheable storage for which the data is not in the cache have been |
| completed. |
| @end deftypefun |
| |
| @deftypefun {void} __ppc_set_ppr_med (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Set the Program Priority Register to medium value (default). |
| |
| The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls |
| the program's priority. By adjusting the PPR value the programmer may |
| improve system throughput by causing the system resources to be used |
| more efficiently, especially in contention situations. |
| The three unprivileged states available are covered by the functions |
| @code{__ppc_set_ppr_med} (medium -- default), @code{__ppc_set_ppc_low} (low) |
| and @code{__ppc_set_ppc_med_low} (medium low). More information |
| available in @cite{Power ISA 2.06b - Book II - Section 3.1}. |
| @end deftypefun |
| |
| @deftypefun {void} __ppc_set_ppr_low (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Set the Program Priority Register to low value. |
| @end deftypefun |
| |
| @deftypefun {void} __ppc_set_ppr_med_low (void) |
| @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| Set the Program Priority Register to medium low value. |
| @end deftypefun |