sgi-xp: setup the activate GRU message queue
[linux-2.6-block.git] / drivers / misc / sgi-xp / xp_uv.c
CommitLineData
bc63d387
DN
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) 2008 Silicon Graphics, Inc. All Rights Reserved.
7 */
8
9/*
10 * Cross Partition (XP) uv-based functions.
11 *
12 * Architecture specific implementation of common functions.
13 *
14 */
15
a812dcc3
DN
16#include <linux/device.h>
17#include <asm/uv/uv_hub.h>
18#include "../sgi-gru/grukservices.h"
bc63d387
DN
19#include "xp.h"
20
a812dcc3
DN
21/*
22 * Convert a virtual memory address to a physical memory address.
23 */
24static unsigned long
25xp_pa_uv(void *addr)
26{
27 return uv_gpa(addr);
28}
29
908787db 30static enum xp_retval
a812dcc3
DN
31xp_remote_memcpy_uv(unsigned long dst_gpa, const unsigned long src_gpa,
32 size_t len)
908787db 33{
a812dcc3
DN
34 int ret;
35
36 ret = gru_copy_gpa(dst_gpa, src_gpa, len);
37 if (ret == 0)
38 return xpSuccess;
39
40 dev_err(xp, "gru_copy_gpa() failed, dst_gpa=0x%016lx src_gpa=0x%016lx "
41 "len=%ld\n", dst_gpa, src_gpa, len);
42 return xpGruCopyError;
908787db
DN
43}
44
5b8669df
DN
45static int
46xp_cpu_to_nasid_uv(int cpuid)
47{
48 /* ??? Is this same as sn2 nasid in mach/part bitmaps set up by SAL? */
49 return UV_PNODE_TO_NASID(uv_cpu_to_pnode(cpuid));
50}
51
bc63d387
DN
52enum xp_retval
53xp_init_uv(void)
54{
55 BUG_ON(!is_uv());
56
57 xp_max_npartitions = XP_MAX_NPARTITIONS_UV;
5b8669df
DN
58 xp_partition_id = 0; /* !!! not correct value */
59 xp_region_size = 0; /* !!! not correct value */
908787db 60
a812dcc3 61 xp_pa = xp_pa_uv;
908787db 62 xp_remote_memcpy = xp_remote_memcpy_uv;
5b8669df 63 xp_cpu_to_nasid = xp_cpu_to_nasid_uv;
908787db
DN
64
65 return xpSuccess;
bc63d387
DN
66}
67
68void
69xp_exit_uv(void)
70{
71 BUG_ON(!is_uv());
72}