123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- @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
- * RISC-V:: Facilities Specific to the RISC-V 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
- Power ISA 2.07 extends the priorities that can be set to the Program Priority
- Register (PPR). The following functions implement the new priority levels:
- very low and medium high.
- @deftypefun {void} __ppc_set_ppr_very_low (void)
- @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
- Set the Program Priority Register to very low value.
- @end deftypefun
- @deftypefun {void} __ppc_set_ppr_med_high (void)
- @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
- Set the Program Priority Register to medium high value. The medium high
- priority is privileged and may only be set during certain time intervals by
- problem-state programs. If the program priority is medium high when the time
- interval expires or if an attempt is made to set the priority to medium high
- when it is not allowed, the priority is set to medium.
- @end deftypefun
- @node RISC-V
- @appendixsec RISC-V-specific Facilities
- Cache management facilities specific to RISC-V systems that implement the Linux
- ABI are declared in @file{sys/cachectl.h}.
- @deftypefun {void} __riscv_flush_icache (void *@var{start}, void *@var{end}, unsigned long int @var{flags})
- @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
- Enforce ordering between stores and instruction cache fetches. The range of
- addresses over which ordering is enforced is specified by @var{start} and
- @var{end}. The @var{flags} argument controls the extent of this ordering, with
- the default behavior (a @var{flags} value of 0) being to enforce the fence on
- all threads in the current process. Setting the
- @code{SYS_RISCV_FLUSH_ICACHE_LOCAL} bit allows users to indicate that enforcing
- ordering on only the current thread is necessary. All other flag bits are
- reserved.
- @end deftypefun
|