2012-06-04 18:46:37 +00:00
|
|
|
@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
|
2018-01-29 18:25:23 +00:00
|
|
|
* RISC-V:: Facilities Specific to the RISC-V Architecture
|
2012-06-04 18:46:37 +00:00
|
|
|
@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)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2012-06-04 18:46:37 +00:00
|
|
|
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
|
2012-09-25 19:48:28 +00:00
|
|
|
|
|
|
|
@deftypefun {uint64_t} __ppc_get_timebase_freq (void)
|
2014-02-01 01:40:29 +00:00
|
|
|
@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
|
2012-09-25 19:48:28 +00:00
|
|
|
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
|
2013-05-23 15:06:24 +00:00
|
|
|
|
|
|
|
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)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-23 15:06:24 +00:00
|
|
|
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)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-23 15:06:24 +00:00
|
|
|
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)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-23 15:06:24 +00:00
|
|
|
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.
|
2013-05-26 16:06:30 +00:00
|
|
|
@end deftypefun
|
2013-05-24 18:29:30 +00:00
|
|
|
|
|
|
|
@deftypefun {void} __ppc_set_ppr_med (void)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-24 18:29:30 +00:00
|
|
|
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)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-24 18:29:30 +00:00
|
|
|
Set the Program Priority Register to low value.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@deftypefun {void} __ppc_set_ppr_med_low (void)
|
2014-02-01 01:40:29 +00:00
|
|
|
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
2013-05-24 18:29:30 +00:00
|
|
|
Set the Program Priority Register to medium low value.
|
2013-05-23 15:06:24 +00:00
|
|
|
@end deftypefun
|
2015-08-10 13:58:12 +00:00
|
|
|
|
|
|
|
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
|
2018-01-29 18:25:23 +00:00
|
|
|
|
|
|
|
@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
|