sgi-xp: support getting the address of a partition's reserved page
authorDean Nelson <dcn@sgi.com>
Wed, 5 Nov 2008 23:29:48 +0000 (17:29 -0600)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 6 Nov 2008 04:32:21 +0000 (20:32 -0800)
Add support for getting the address of a partition's reserved page.

Signed-off-by: Dean Nelson <dcn@sgi.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
drivers/misc/sgi-xp/xpc_uv.c

index ec526c7..684b2dd 100644 (file)
@@ -642,7 +642,7 @@ xpc_send_local_activate_IRQ_uv(struct xpc_partition *part, int act_state_req)
        struct xpc_partition_uv *part_uv = &part->sn.uv;
 
        /*
-        * !!! Make our side think that the remote parition sent an activate
+        * !!! Make our side think that the remote partition sent an activate
         * !!! message our way by doing what the activate IRQ handler would
         * !!! do had one really been sent.
         */
@@ -660,8 +660,33 @@ static enum xp_retval
 xpc_get_partition_rsvd_page_pa_uv(void *buf, u64 *cookie, unsigned long *rp_pa,
                                  size_t *len)
 {
-       /* !!! call the UV version of sn_partition_reserved_page_pa() */
-       return xpUnsupported;
+       s64 status;
+       enum xp_retval ret;
+
+#if defined CONFIG_X86_64
+       status = uv_bios_reserved_page_pa((u64)buf, cookie, (u64 *)rp_pa,
+                                         (u64 *)len);
+       if (status == BIOS_STATUS_SUCCESS)
+               ret = xpSuccess;
+       else if (status == BIOS_STATUS_MORE_PASSES)
+               ret = xpNeedMoreInfo;
+       else
+               ret = xpBiosError;
+
+#elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV
+       status = sn_partition_reserved_page_pa((u64)buf, cookie, rp_pa, len);
+       if (status == SALRET_OK)
+               ret = xpSuccess;
+       else if (status == SALRET_MORE_PASSES)
+               ret = xpNeedMoreInfo;
+       else
+               ret = xpSalError;
+
+#else
+       #error not a supported configuration
+#endif
+
+       return ret;
 }
 
 static int