pcb.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*-
  2. * SPDX-License-Identifier: BSD-4-Clause
  3. *
  4. * Copyright (C) 1995, 1996 Wolfgang Solfrank.
  5. * Copyright (C) 1995, 1996 TooLs GmbH.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * 3. All advertising materials mentioning features or use of this software
  17. * must display the following acknowledgement:
  18. * This product includes software developed by TooLs GmbH.
  19. * 4. The name of TooLs GmbH may not be used to endorse or promote products
  20. * derived from this software without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
  23. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  24. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  25. * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  26. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  27. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  28. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  29. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  30. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  31. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. *
  33. * $NetBSD: pcb.h,v 1.4 2000/06/04 11:57:17 tsubai Exp $
  34. * $FreeBSD$
  35. */
  36. #ifndef _MACHINE_PCB_H_
  37. #define _MACHINE_PCB_H_
  38. #include <sys/endian.h>
  39. #include <machine/setjmp.h>
  40. #ifndef _STANDALONE
  41. struct pcb {
  42. register_t pcb_context[20]; /* non-volatile r12-r31 */
  43. register_t pcb_cr; /* Condition register */
  44. register_t pcb_sp; /* stack pointer */
  45. register_t pcb_toc; /* toc pointer */
  46. register_t pcb_lr; /* link register */
  47. register_t pcb_dscr; /* dscr value */
  48. register_t pcb_fscr;
  49. register_t pcb_tar;
  50. struct pmap *pcb_pm; /* pmap of our vmspace */
  51. jmp_buf *pcb_onfault; /* For use during
  52. copyin/copyout */
  53. int pcb_flags;
  54. #define PCB_FPU 0x1 /* Process uses FPU */
  55. #define PCB_FPREGS 0x2 /* Process had FPU registers initialized */
  56. #define PCB_VEC 0x4 /* Process had Altivec initialized */
  57. #define PCB_VSX 0x8 /* Process had VSX initialized */
  58. #define PCB_CDSCR 0x10 /* Process had Custom DSCR initialized */
  59. #define PCB_HTM 0x20 /* Process had HTM initialized */
  60. #define PCB_CFSCR 0x40 /* Process had FSCR updated */
  61. struct fpu {
  62. union {
  63. #if _BYTE_ORDER == _BIG_ENDIAN
  64. double fpr;
  65. uint32_t vsr[4];
  66. #else
  67. uint32_t vsr[4];
  68. struct {
  69. double padding;
  70. double fpr;
  71. };
  72. #endif
  73. } fpr[32];
  74. double fpscr; /* FPSCR stored as double for easier access */
  75. } pcb_fpu; /* Floating point processor */
  76. unsigned int pcb_fpcpu; /* which CPU had our FPU
  77. stuff. */
  78. struct vec {
  79. uint32_t vr[32][4];
  80. uint32_t spare[2];
  81. uint32_t vrsave;
  82. uint32_t vscr; /* aligned at vector element 3 */
  83. } pcb_vec __aligned(16); /* Vector processor */
  84. unsigned int pcb_veccpu; /* which CPU had our vector
  85. stuff. */
  86. struct htm {
  87. uint64_t tfhar;
  88. uint64_t texasr;
  89. uint64_t tfiar;
  90. } pcb_htm;
  91. struct ebb {
  92. uint64_t ebbhr;
  93. uint64_t ebbrr;
  94. uint64_t bescr;
  95. } pcb_ebb;
  96. struct lmon {
  97. uint64_t lmrr;
  98. uint64_t lmser;
  99. } pcb_lm;
  100. union {
  101. struct {
  102. vm_offset_t usr_segm; /* Base address */
  103. register_t usr_vsid; /* USER_SR segment */
  104. } aim;
  105. struct {
  106. register_t dbcr0;
  107. } booke;
  108. } pcb_cpu;
  109. vm_offset_t pcb_lastill; /* Last illegal instruction */
  110. };
  111. #endif
  112. #ifdef _KERNEL
  113. struct trapframe;
  114. #ifndef curpcb
  115. extern struct pcb *curpcb;
  116. #endif
  117. extern struct pmap *curpm;
  118. extern struct proc *fpuproc;
  119. void makectx(struct trapframe *, struct pcb *);
  120. void savectx(struct pcb *) __returns_twice;
  121. #endif
  122. #endif /* _MACHINE_PCB_H_ */