addrs.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:15k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 1992 - 1997, 1999, 2000 Silicon Graphics, Inc.
  7.  * Copyright (C) 1999, 2000 by Ralf Baechle
  8.  */
  9. #ifndef _ASM_SN_ADDRS_H
  10. #define _ASM_SN_ADDRS_H
  11. #include <linux/config.h>
  12. #if _LANGUAGE_C
  13. #include <linux/types.h>
  14. #endif /* _LANGUAGE_C */
  15. #include <asm/addrspace.h>
  16. #include <asm/reg.h>
  17. #include <asm/sn/kldir.h>
  18. #if defined(CONFIG_SGI_IP27)
  19. #include <asm/sn/sn0/addrs.h>
  20. #elif defined(CONFIG_SGI_IP35)
  21. #include <asm/sn/sn1/addrs.h>
  22. #endif
  23. #if _LANGUAGE_C
  24. #if defined(CONFIG_SGI_IO) /* FIXME */
  25. #define PS_UINT_CAST (__psunsigned_t)
  26. #define UINT64_CAST (__uint64_t)
  27. #else /* CONFIG_SGI_IO */
  28. #define PS_UINT_CAST (unsigned long)
  29. #define UINT64_CAST (unsigned long)
  30. #endif /* CONFIG_SGI_IO */
  31. #define HUBREG_CAST (volatile hubreg_t *)
  32. #elif _LANGUAGE_ASSEMBLY
  33. #define PS_UINT_CAST
  34. #define UINT64_CAST
  35. #define HUBREG_CAST
  36. #endif
  37. #define NASID_GET_META(_n) ((_n) >> NASID_LOCAL_BITS)
  38. #ifdef CONFIG_SGI_IP27
  39. #define NASID_GET_LOCAL(_n) ((_n) & 0xf)
  40. #endif
  41. #define NASID_MAKE(_m, _l) (((_m) << NASID_LOCAL_BITS) | (_l))
  42. #define NODE_ADDRSPACE_MASK (NODE_ADDRSPACE_SIZE - 1)
  43. #define TO_NODE_ADDRSPACE(_pa) (UINT64_CAST (_pa) & NODE_ADDRSPACE_MASK)
  44. #define CHANGE_ADDR_NASID(_pa, _nasid)
  45. ((UINT64_CAST (_pa) & ~NASID_MASK) | 
  46.  (UINT64_CAST(_nasid) <<  NASID_SHFT))
  47. /*
  48.  * The following macros are used to index to the beginning of a specific
  49.  * node's address space.
  50.  */
  51. #define NODE_OFFSET(_n) (UINT64_CAST (_n) << NODE_SIZE_BITS)
  52. #define NODE_CAC_BASE(_n) (CAC_BASE   + NODE_OFFSET(_n))
  53. #define NODE_HSPEC_BASE(_n) (HSPEC_BASE + NODE_OFFSET(_n))
  54. #define NODE_IO_BASE(_n) (IO_BASE    + NODE_OFFSET(_n))
  55. #define NODE_MSPEC_BASE(_n) (MSPEC_BASE + NODE_OFFSET(_n))
  56. #define NODE_UNCAC_BASE(_n) (UNCAC_BASE + NODE_OFFSET(_n))
  57. #define TO_NODE(_n, _x) (NODE_OFFSET(_n)     | ((_x)    ))
  58. #define TO_NODE_CAC(_n, _x) (NODE_CAC_BASE(_n)   | ((_x) & TO_PHYS_MASK))
  59. #define TO_NODE_UNCAC(_n, _x) (NODE_UNCAC_BASE(_n) | ((_x) & TO_PHYS_MASK))
  60. #define TO_NODE_MSPEC(_n, _x) (NODE_MSPEC_BASE(_n) | ((_x) & TO_PHYS_MASK))
  61. #define TO_NODE_HSPEC(_n, _x) (NODE_HSPEC_BASE(_n) | ((_x) & TO_PHYS_MASK))
  62. #define RAW_NODE_SWIN_BASE(nasid, widget)
  63. (NODE_IO_BASE(nasid) + (UINT64_CAST (widget) << SWIN_SIZE_BITS))
  64. #define WIDGETID_GET(addr) ((unsigned char)((addr >> SWIN_SIZE_BITS) & 0xff))
  65. /*
  66.  * The following definitions pertain to the IO special address
  67.  * space.  They define the location of the big and little windows
  68.  * of any given node.
  69.  */
  70. #define SWIN_SIZE_BITS 24
  71. #define SWIN_SIZE (UINT64_CAST 1 << 24)
  72. #define SWIN_SIZEMASK (SWIN_SIZE - 1)
  73. #define SWIN_WIDGET_MASK 0xF
  74. /*
  75.  * Convert smallwindow address to xtalk address.
  76.  *
  77.  * 'addr' can be physical or virtual address, but will be converted
  78.  * to Xtalk address in the range 0 -> SWINZ_SIZEMASK
  79.  */
  80. #define SWIN_WIDGETADDR(addr) ((addr) & SWIN_SIZEMASK)
  81. #define SWIN_WIDGETNUM(addr) (((addr)  >> SWIN_SIZE_BITS) & SWIN_WIDGET_MASK)
  82. /*
  83.  * Verify if addr belongs to small window address on node with "nasid"
  84.  *
  85.  *
  86.  * NOTE: "addr" is expected to be XKPHYS address, and NOT physical
  87.  * address
  88.  *
  89.  *
  90.  */
  91. #define NODE_SWIN_ADDR(nasid, addr)
  92. (((addr) >= NODE_SWIN_BASE(nasid, 0))  && 
  93.  ((addr) <  (NODE_SWIN_BASE(nasid, HUB_NUM_WIDGET) + SWIN_SIZE)
  94.  ))
  95. /*
  96.  * The following define the major position-independent aliases used
  97.  * in SN.
  98.  * UALIAS -- 256MB in size, reads in the UALIAS result in
  99.  * uncached references to the memory of the reader's node.
  100.  * CPU_UALIAS -- 128kb in size, the bottom part of UALIAS is flipped
  101.  * depending on which CPU does the access to provide
  102.  * all CPUs with unique uncached memory at low addresses.
  103.  * LBOOT  -- 256MB in size, reads in the LBOOT area result in
  104.  * uncached references to the local hub's boot prom and
  105.  * other directory-bus connected devices.
  106.  * IALIAS -- 8MB in size, reads in the IALIAS result in uncached
  107.  * references to the local hub's registers.
  108.  */
  109. #define UALIAS_BASE HSPEC_BASE
  110. #define UALIAS_SIZE 0x10000000 /* 256 Megabytes */
  111. #define UALIAS_LIMIT (UALIAS_BASE + UALIAS_SIZE)
  112. /*
  113.  * The bottom of ualias space is flipped depending on whether you're
  114.  * processor 0 or 1 within a node.
  115.  */
  116. #ifdef CONFIG_SGI_IP27
  117. #define UALIAS_FLIP_BASE UALIAS_BASE
  118. #define UALIAS_FLIP_SIZE 0x20000
  119. #define UALIAS_FLIP_BIT 0x10000
  120. #define UALIAS_FLIP_ADDR(_x) (cputoslice(smp_processor_id()) ? 
  121.  (_x) ^ UALIAS_FLIP_BIT : (_x))
  122. #define LBOOT_BASE (HSPEC_BASE + 0x10000000)
  123. #define LBOOT_SIZE 0x10000000
  124. #define LBOOT_LIMIT (LBOOT_BASE + LBOOT_SIZE)
  125. #define LBOOT_STRIDE 0 /* IP27 has only one CPU PROM */
  126. #endif
  127. #define HUB_REGISTER_WIDGET 1
  128. #define IALIAS_BASE NODE_SWIN_BASE(0, HUB_REGISTER_WIDGET)
  129. #define IALIAS_SIZE 0x800000 /* 8 Megabytes */
  130. #define IS_IALIAS(_a) (((_a) >= IALIAS_BASE) &&
  131.  ((_a) < (IALIAS_BASE + IALIAS_SIZE)))
  132. /*
  133.  * Macro for referring to Hub's RBOOT space
  134.  */
  135. #ifdef CONFIG_SGI_IP27
  136. #define RBOOT_SIZE 0x10000000 /* 256 Megabytes */
  137. #define NODE_RBOOT_BASE(_n) (NODE_HSPEC_BASE(_n) + 0x30000000)
  138. #define NODE_RBOOT_LIMIT(_n) (NODE_RBOOT_BASE(_n) + RBOOT_SIZE)
  139. #endif
  140. /*
  141.  * Macros for referring the Hub's back door space
  142.  *
  143.  *   These macros correctly process addresses in any node's space.
  144.  *   WARNING: They won't work in assembler.
  145.  *
  146.  *   BDDIR_ENTRY_LO returns the address of the low double-word of the dir
  147.  *                  entry corresponding to a physical (Cac or Uncac) address.
  148.  *   BDDIR_ENTRY_HI returns the address of the high double-word of the entry.
  149.  *   BDPRT_ENTRY    returns the address of the double-word protection entry
  150.  *                  corresponding to the page containing the physical address.
  151.  *   BDPRT_ENTRY_S  Stores the value into the protection entry.
  152.  *   BDPRT_ENTRY_L  Load the value from the protection entry.
  153.  *   BDECC_ENTRY    returns the address of the ECC byte corresponding to a
  154.  *                  double-word at a specified physical address.
  155.  *   BDECC_ENTRY_H  returns the address of the two ECC bytes corresponding to a
  156.  *                  quad-word at a specified physical address.
  157.  */
  158. #define NODE_BDOOR_BASE(_n) (NODE_HSPEC_BASE(_n) + (NODE_ADDRSPACE_SIZE/2))
  159. #define NODE_BDECC_BASE(_n) (NODE_BDOOR_BASE(_n))
  160. #define NODE_BDDIR_BASE(_n) (NODE_BDOOR_BASE(_n) + (NODE_ADDRSPACE_SIZE/4))
  161. #ifdef CONFIG_SGI_IP27
  162. #define BDDIR_ENTRY_LO(_pa) ((HSPEC_BASE +       
  163.   NODE_ADDRSPACE_SIZE * 3 / 4 +       
  164.   0x200)     | 
  165.  UINT64_CAST (_pa)  & NASID_MASK     | 
  166.  UINT64_CAST (_pa) >> 2 & BDDIR_UPPER_MASK  | 
  167.  UINT64_CAST (_pa) >> 3 & 0x1f << 4)
  168. #define BDDIR_ENTRY_HI(_pa) ((HSPEC_BASE +       
  169.   NODE_ADDRSPACE_SIZE * 3 / 4 +       
  170.   0x208)     | 
  171.  UINT64_CAST (_pa)  & NASID_MASK     | 
  172.  UINT64_CAST (_pa) >> 2 & BDDIR_UPPER_MASK  | 
  173.  UINT64_CAST (_pa) >> 3 & 0x1f << 4)
  174. #define BDPRT_ENTRY(_pa, _rgn) ((HSPEC_BASE +       
  175.   NODE_ADDRSPACE_SIZE * 3 / 4)     | 
  176.  UINT64_CAST (_pa)  & NASID_MASK     | 
  177.  UINT64_CAST (_pa) >> 2 & BDDIR_UPPER_MASK  | 
  178.  (_rgn) << 3)
  179. #define BDPRT_ENTRY_ADDR(_pa,_rgn) (BDPRT_ENTRY((_pa),(_rgn)))
  180. #define BDPRT_ENTRY_S(_pa,_rgn,_val) (*(__psunsigned_t *)BDPRT_ENTRY((_pa),(_rgn))=(_val))
  181. #define BDPRT_ENTRY_L(_pa,_rgn) (*(__psunsigned_t *)BDPRT_ENTRY((_pa),(_rgn)))
  182. #define BDECC_ENTRY(_pa) ((HSPEC_BASE +       
  183.   NODE_ADDRSPACE_SIZE / 2)     | 
  184.  UINT64_CAST (_pa)  & NASID_MASK     | 
  185.  UINT64_CAST (_pa) >> 2 & BDECC_UPPER_MASK  | 
  186.  UINT64_CAST (_pa) >> 3 & 3)
  187. /*
  188.  * Macro to convert a back door directory or protection address into the
  189.  *   raw physical address of the associated cache line or protection page.
  190.  */
  191. #define BDADDR_IS_DIR(_ba) ((UINT64_CAST  (_ba) & 0x200) != 0)
  192. #define BDADDR_IS_PRT(_ba) ((UINT64_CAST  (_ba) & 0x200) == 0)
  193. #define BDDIR_TO_MEM(_ba) (UINT64_CAST  (_ba) & NASID_MASK            | 
  194.  (UINT64_CAST (_ba) & BDDIR_UPPER_MASK)<<2  | 
  195.  (UINT64_CAST (_ba) & 0x1f << 4) << 3)
  196. #define BDPRT_TO_MEM(_ba)  (UINT64_CAST  (_ba) & NASID_MASK     | 
  197.  (UINT64_CAST (_ba) & BDDIR_UPPER_MASK)<<2)
  198. #define BDECC_TO_MEM(_ba) (UINT64_CAST  (_ba) & NASID_MASK     | 
  199.  (UINT64_CAST (_ba) & BDECC_UPPER_MASK)<<2  | 
  200.  (UINT64_CAST (_ba) & 3) << 3)
  201. #endif /* CONFIG_SGI_IP27 */
  202. /*
  203.  * The following macros produce the correct base virtual address for
  204.  * the hub registers.  The LOCAL_HUB_* macros produce the appropriate
  205.  * address for the local registers.  The REMOTE_HUB_* macro produce
  206.  * the address for the specified hub's registers.  The intent is
  207.  * that the appropriate PI, MD, NI, or II register would be substituted
  208.  * for _x.
  209.  */
  210. #ifdef _STANDALONE
  211. /* DO NOT USE THESE DIRECTLY IN THE KERNEL. SEE BELOW. */
  212. #define LOCAL_HUB(_x) (HUBREG_CAST (IALIAS_BASE + (_x)))
  213. #define REMOTE_HUB(_n, _x) (HUBREG_CAST (NODE_SWIN_BASE(_n, 1) +
  214.       0x800000 + (_x)))
  215. #endif /* _STANDALONE */
  216. /*
  217.  * WARNING:
  218.  * When certain Hub chip workaround are defined, it's not sufficient
  219.  * to dereference the *_HUB_ADDR() macros.  You should instead use
  220.  * HUB_L() and HUB_S() if you must deal with pointers to hub registers.
  221.  * Otherwise, the recommended approach is to use *_HUB_L() and *_HUB_S().
  222.  * They're always safe.
  223.  */
  224. #define LOCAL_HUB_ADDR(_x) (HUBREG_CAST (IALIAS_BASE + (_x)))
  225. #define REMOTE_HUB_ADDR(_n, _x) (HUBREG_CAST (NODE_SWIN_BASE(_n, 1) +
  226.       0x800000 + (_x)))
  227. #ifdef CONFIG_SGI_IP27
  228. #define REMOTE_HUB_PI_ADDR(_n, _sn, _x) (HUBREG_CAST (NODE_SWIN_BASE(_n, 1) +
  229.       0x800000 + (_x)))
  230. #endif /* CONFIG_SGI_IP27 */
  231. #if _LANGUAGE_C
  232. #define HUB_L(_a) *(_a)
  233. #define HUB_S(_a, _d) *(_a) = (_d)
  234. #define LOCAL_HUB_L(_r) HUB_L(LOCAL_HUB_ADDR(_r))
  235. #define LOCAL_HUB_S(_r, _d) HUB_S(LOCAL_HUB_ADDR(_r), (_d))
  236. #define REMOTE_HUB_L(_n, _r) HUB_L(REMOTE_HUB_ADDR((_n), (_r)))
  237. #define REMOTE_HUB_S(_n, _r, _d) HUB_S(REMOTE_HUB_ADDR((_n), (_r)), (_d))
  238. #define REMOTE_HUB_PI_L(_n, _sn, _r) HUB_L(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)))
  239. #define REMOTE_HUB_PI_S(_n, _sn, _r, _d) HUB_S(REMOTE_HUB_PI_ADDR((_n), (_sn), (_r)), (_d))
  240. #endif /* _LANGUAGE_C */
  241. /*
  242.  * The following macros are used to get to a hub/bridge register, given
  243.  * the base of the register space.
  244.  */
  245. #define HUB_REG_PTR(_base, _off)
  246. (HUBREG_CAST ((__psunsigned_t)(_base) + (__psunsigned_t)(_off)))
  247. #define HUB_REG_PTR_L(_base, _off)
  248. HUB_L(HUB_REG_PTR((_base), (_off)))
  249. #define HUB_REG_PTR_S(_base, _off, _data)
  250. HUB_S(HUB_REG_PTR((_base), (_off)), (_data))
  251. /*
  252.  * Software structure locations -- permanently fixed
  253.  *    See diagram in kldir.h
  254.  */
  255. #define PHYS_RAMBASE 0x0
  256. #define K0_RAMBASE PHYS_TO_K0(PHYS_RAMBASE)
  257. #define EX_HANDLER_OFFSET(slice) ((slice) << 16)
  258. #define EX_HANDLER_ADDR(nasid, slice)
  259. PHYS_TO_K0(NODE_OFFSET(nasid) | EX_HANDLER_OFFSET(slice))
  260. #define EX_HANDLER_SIZE 0x0400
  261. #define EX_FRAME_OFFSET(slice) ((slice) << 16 | 0x400)
  262. #define EX_FRAME_ADDR(nasid, slice)
  263. PHYS_TO_K0(NODE_OFFSET(nasid) | EX_FRAME_OFFSET(slice))
  264. #define EX_FRAME_SIZE 0x0c00
  265. #define ARCS_SPB_OFFSET 0x1000
  266. #define ARCS_SPB_ADDR(nasid)
  267. PHYS_TO_K0(NODE_OFFSET(nasid) | ARCS_SPB_OFFSET)
  268. #define ARCS_SPB_SIZE 0x0400
  269. #ifdef _STANDALONE
  270. #define ARCS_TVECTOR_OFFSET 0x2800
  271. #define ARCS_PVECTOR_OFFSET 0x2c00
  272. /*
  273.  * These addresses are used by the master CPU to install the transfer
  274.  * and private vectors.  All others use the SPB to find them.
  275.  */
  276. #define TVADDR (NODE_CAC_BASE(get_nasid()) + ARCS_TVECTOR_OFFSET)
  277. #define PVADDR (NODE_CAC_BASE(get_nasid()) + ARCS_PVECTOR_OFFSET)
  278. #endif /* _STANDALONE */
  279. #define KLDIR_OFFSET 0x2000
  280. #define KLDIR_ADDR(nasid)
  281. TO_NODE_UNCAC((nasid), KLDIR_OFFSET)
  282. #define KLDIR_SIZE 0x0400
  283. /*
  284.  * Software structure locations -- indirected through KLDIR
  285.  *    See diagram in kldir.h
  286.  *
  287.  * Important: All low memory structures must only be accessed
  288.  * uncached, except for the symmon stacks.
  289.  */
  290. #define KLI_LAUNCH 0 /* Dir. entries */
  291. #define KLI_KLCONFIG 1
  292. #define KLI_NMI 2
  293. #define KLI_GDA 3
  294. #define KLI_FREEMEM 4
  295. #define KLI_SYMMON_STK 5
  296. #define KLI_PI_ERROR 6
  297. #define KLI_KERN_VARS 7
  298. #define KLI_KERN_XP 8
  299. #define KLI_KERN_PARTID 9
  300. #if _LANGUAGE_C
  301. #define KLD_BASE(nasid) ((kldir_ent_t *) KLDIR_ADDR(nasid))
  302. #define KLD_LAUNCH(nasid) (KLD_BASE(nasid) + KLI_LAUNCH)
  303. #define KLD_NMI(nasid) (KLD_BASE(nasid) + KLI_NMI)
  304. #define KLD_KLCONFIG(nasid) (KLD_BASE(nasid) + KLI_KLCONFIG)
  305. #define KLD_PI_ERROR(nasid) (KLD_BASE(nasid) + KLI_PI_ERROR)
  306. #define KLD_GDA(nasid) (KLD_BASE(nasid) + KLI_GDA)
  307. #define KLD_SYMMON_STK(nasid) (KLD_BASE(nasid) + KLI_SYMMON_STK)
  308. #define KLD_FREEMEM(nasid) (KLD_BASE(nasid) + KLI_FREEMEM)
  309. #define KLD_KERN_VARS(nasid) (KLD_BASE(nasid) + KLI_KERN_VARS)
  310. #define KLD_KERN_XP(nasid) (KLD_BASE(nasid) + KLI_KERN_XP)
  311. #define KLD_KERN_PARTID(nasid) (KLD_BASE(nasid) + KLI_KERN_PARTID)
  312. #define LAUNCH_OFFSET(nasid, slice)
  313. (KLD_LAUNCH(nasid)->offset +
  314.  KLD_LAUNCH(nasid)->stride * (slice))
  315. #define LAUNCH_ADDR(nasid, slice)
  316. TO_NODE_UNCAC((nasid), LAUNCH_OFFSET(nasid, slice))
  317. #define LAUNCH_SIZE(nasid) KLD_LAUNCH(nasid)->size
  318. #define NMI_OFFSET(nasid, slice)
  319. (KLD_NMI(nasid)->offset +
  320.  KLD_NMI(nasid)->stride * (slice))
  321. #define NMI_ADDR(nasid, slice)
  322. TO_NODE_UNCAC((nasid), NMI_OFFSET(nasid, slice))
  323. #define NMI_SIZE(nasid) KLD_NMI(nasid)->size
  324. #define KLCONFIG_OFFSET(nasid) KLD_KLCONFIG(nasid)->offset
  325. #define KLCONFIG_ADDR(nasid)
  326. TO_NODE_UNCAC((nasid), KLCONFIG_OFFSET(nasid))
  327. #define KLCONFIG_SIZE(nasid) KLD_KLCONFIG(nasid)->size
  328. #define GDA_ADDR(nasid) KLD_GDA(nasid)->pointer
  329. #define GDA_SIZE(nasid) KLD_GDA(nasid)->size
  330. #define SYMMON_STK_OFFSET(nasid, slice)
  331. (KLD_SYMMON_STK(nasid)->offset +
  332.  KLD_SYMMON_STK(nasid)->stride * (slice))
  333. #define SYMMON_STK_STRIDE(nasid) KLD_SYMMON_STK(nasid)->stride
  334. #define SYMMON_STK_ADDR(nasid, slice)
  335. TO_NODE_CAC((nasid), SYMMON_STK_OFFSET(nasid, slice))
  336. #define SYMMON_STK_SIZE(nasid) KLD_SYMMON_STK(nasid)->stride
  337. #define SYMMON_STK_END(nasid) (SYMMON_STK_ADDR(nasid, 0) + KLD_SYMMON_STK(nasid)->size)
  338. /* loading symmon 4k below UNIX. the arcs loader needs the topaddr for a
  339.  * relocatable program
  340.  */
  341. #define UNIX_DEBUG_LOADADDR 0x300000
  342. #define SYMMON_LOADADDR(nasid)
  343. TO_NODE(nasid, PHYS_TO_K0(UNIX_DEBUG_LOADADDR - 0x1000))
  344. #define FREEMEM_OFFSET(nasid) KLD_FREEMEM(nasid)->offset
  345. #define FREEMEM_ADDR(nasid) SYMMON_STK_END(nasid)
  346. /*
  347.  * XXX
  348.  * Fix this. FREEMEM_ADDR should be aware of if symmon is loaded.
  349.  * Also, it should take into account what prom thinks to be a safe
  350.  * address
  351. PHYS_TO_K0(NODE_OFFSET(nasid) + FREEMEM_OFFSET(nasid))
  352.  */
  353. #define FREEMEM_SIZE(nasid) KLD_FREEMEM(nasid)->size
  354. #define PI_ERROR_OFFSET(nasid) KLD_PI_ERROR(nasid)->offset
  355. #define PI_ERROR_ADDR(nasid)
  356. TO_NODE_UNCAC((nasid), PI_ERROR_OFFSET(nasid))
  357. #define PI_ERROR_SIZE(nasid) KLD_PI_ERROR(nasid)->size
  358. #define NODE_OFFSET_TO_K0(_nasid, _off)
  359. PHYS_TO_K0((NODE_OFFSET(_nasid) + (_off)) | K0BASE)
  360. #define NODE_OFFSET_TO_K1(_nasid, _off)
  361. TO_UNCAC((NODE_OFFSET(_nasid) + (_off)) | K1BASE)
  362. #define K0_TO_NODE_OFFSET(_k0addr)
  363. ((__psunsigned_t)(_k0addr) & NODE_ADDRSPACE_MASK)
  364. #define KERN_VARS_ADDR(nasid) KLD_KERN_VARS(nasid)->pointer
  365. #define KERN_VARS_SIZE(nasid) KLD_KERN_VARS(nasid)->size
  366. #define KERN_XP_ADDR(nasid) KLD_KERN_XP(nasid)->pointer
  367. #define KERN_XP_SIZE(nasid) KLD_KERN_XP(nasid)->size
  368. #define GPDA_ADDR(nasid) TO_NODE_CAC(nasid, GPDA_OFFSET)
  369. #endif /* _LANGUAGE_C */
  370. #endif /* _ASM_SN_ADDRS_H */