Loading include/asm-ia64/sn/sn_sal.h +46 −19 Original line number Diff line number Diff line Loading @@ -557,7 +557,8 @@ static inline u64 ia64_sn_partition_serial_get(void) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_PARTITION_SERIAL_GET, 0, 0, 0, 0, 0, 0, 0); ia64_sal_oemcall_reentrant(&ret_stuff, SN_SAL_PARTITION_SERIAL_GET, 0, 0, 0, 0, 0, 0, 0); if (ret_stuff.status != 0) return 0; return ret_stuff.v0; Loading @@ -565,11 +566,10 @@ ia64_sn_partition_serial_get(void) static inline u64 sn_partition_serial_number_val(void) { if (sn_partition_serial_number) { return(sn_partition_serial_number); } else { return(sn_partition_serial_number = ia64_sn_partition_serial_get()); if (unlikely(sn_partition_serial_number == 0)) { sn_partition_serial_number = ia64_sn_partition_serial_get(); } return sn_partition_serial_number; } /* Loading @@ -580,7 +580,7 @@ static inline partid_t ia64_sn_sysctl_partition_get(nasid_t nasid) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_SYSCTL_PARTITION_GET, nasid, ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_SYSCTL_PARTITION_GET, nasid, 0, 0, 0, 0, 0, 0); if (ret_stuff.status != 0) return INVALID_PARTID; Loading @@ -595,11 +595,38 @@ extern partid_t sn_partid; static inline partid_t sn_local_partid(void) { if (sn_partid < 0) { return (sn_partid = ia64_sn_sysctl_partition_get(cpuid_to_nasid(smp_processor_id()))); } else { if (unlikely(sn_partid < 0)) { sn_partid = ia64_sn_sysctl_partition_get(cpuid_to_nasid(smp_processor_id())); } return sn_partid; } /* * Returns the physical address of the partition's reserved page through * an iterative number of calls. * * On first call, 'cookie' and 'len' should be set to 0, and 'addr' * set to the nasid of the partition whose reserved page's address is * being sought. * On subsequent calls, pass the values, that were passed back on the * previous call. * * While the return status equals SALRET_MORE_PASSES, keep calling * this function after first copying 'len' bytes starting at 'addr' * into 'buf'. Once the return status equals SALRET_OK, 'addr' will * be the physical address of the partition's reserved page. If the * return status equals neither of these, an error as occurred. */ static inline s64 sn_partition_reserved_page_pa(u64 buf, u64 *cookie, u64 *addr, u64 *len) { struct ia64_sal_retval rv; ia64_sal_oemcall_reentrant(&rv, SN_SAL_GET_PARTITION_ADDR, *cookie, *addr, buf, *len, 0, 0, 0); *cookie = rv.v0; *addr = rv.v1; *len = rv.v2; return rv.status; } /* Loading @@ -621,8 +648,8 @@ static inline int sn_register_xp_addr_region(u64 paddr, u64 len, int operation) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_XP_ADDR_REGION, paddr, len, (u64)operation, 0, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, SN_SAL_XP_ADDR_REGION, paddr, len, (u64)operation, 0, 0, 0, 0); return ret_stuff.status; } Loading @@ -646,8 +673,8 @@ sn_register_nofault_code(u64 start_addr, u64 end_addr, u64 return_addr, } else { call = SN_SAL_NO_FAULT_ZONE_PHYSICAL; } SAL_CALL(ret_stuff, call, start_addr, end_addr, return_addr, (u64)1, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, call, start_addr, end_addr, return_addr, (u64)1, 0, 0, 0); return ret_stuff.status; } Loading @@ -668,8 +695,8 @@ static inline int sn_change_coherence(u64 *new_domain, u64 *old_domain) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_COHERENCE, new_domain, old_domain, 0, 0, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, SN_SAL_COHERENCE, (u64)new_domain, (u64)old_domain, 0, 0, 0, 0, 0); return ret_stuff.status; } Loading @@ -688,8 +715,8 @@ sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) cnodeid = nasid_to_cnodeid(get_node_number(paddr)); // spin_lock(&NODEPDA(cnodeid)->bist_lock); local_irq_save(irq_flags); SAL_CALL_NOLOCK(ret_stuff, SN_SAL_MEMPROTECT, paddr, len, nasid_array, perms, 0, 0, 0); ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, (u64)nasid_array, perms, 0, 0, 0); local_irq_restore(irq_flags); // spin_unlock(&NODEPDA(cnodeid)->bist_lock); return ret_stuff.status; Loading Loading
include/asm-ia64/sn/sn_sal.h +46 −19 Original line number Diff line number Diff line Loading @@ -557,7 +557,8 @@ static inline u64 ia64_sn_partition_serial_get(void) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_PARTITION_SERIAL_GET, 0, 0, 0, 0, 0, 0, 0); ia64_sal_oemcall_reentrant(&ret_stuff, SN_SAL_PARTITION_SERIAL_GET, 0, 0, 0, 0, 0, 0, 0); if (ret_stuff.status != 0) return 0; return ret_stuff.v0; Loading @@ -565,11 +566,10 @@ ia64_sn_partition_serial_get(void) static inline u64 sn_partition_serial_number_val(void) { if (sn_partition_serial_number) { return(sn_partition_serial_number); } else { return(sn_partition_serial_number = ia64_sn_partition_serial_get()); if (unlikely(sn_partition_serial_number == 0)) { sn_partition_serial_number = ia64_sn_partition_serial_get(); } return sn_partition_serial_number; } /* Loading @@ -580,7 +580,7 @@ static inline partid_t ia64_sn_sysctl_partition_get(nasid_t nasid) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_SYSCTL_PARTITION_GET, nasid, ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_SYSCTL_PARTITION_GET, nasid, 0, 0, 0, 0, 0, 0); if (ret_stuff.status != 0) return INVALID_PARTID; Loading @@ -595,11 +595,38 @@ extern partid_t sn_partid; static inline partid_t sn_local_partid(void) { if (sn_partid < 0) { return (sn_partid = ia64_sn_sysctl_partition_get(cpuid_to_nasid(smp_processor_id()))); } else { if (unlikely(sn_partid < 0)) { sn_partid = ia64_sn_sysctl_partition_get(cpuid_to_nasid(smp_processor_id())); } return sn_partid; } /* * Returns the physical address of the partition's reserved page through * an iterative number of calls. * * On first call, 'cookie' and 'len' should be set to 0, and 'addr' * set to the nasid of the partition whose reserved page's address is * being sought. * On subsequent calls, pass the values, that were passed back on the * previous call. * * While the return status equals SALRET_MORE_PASSES, keep calling * this function after first copying 'len' bytes starting at 'addr' * into 'buf'. Once the return status equals SALRET_OK, 'addr' will * be the physical address of the partition's reserved page. If the * return status equals neither of these, an error as occurred. */ static inline s64 sn_partition_reserved_page_pa(u64 buf, u64 *cookie, u64 *addr, u64 *len) { struct ia64_sal_retval rv; ia64_sal_oemcall_reentrant(&rv, SN_SAL_GET_PARTITION_ADDR, *cookie, *addr, buf, *len, 0, 0, 0); *cookie = rv.v0; *addr = rv.v1; *len = rv.v2; return rv.status; } /* Loading @@ -621,8 +648,8 @@ static inline int sn_register_xp_addr_region(u64 paddr, u64 len, int operation) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_XP_ADDR_REGION, paddr, len, (u64)operation, 0, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, SN_SAL_XP_ADDR_REGION, paddr, len, (u64)operation, 0, 0, 0, 0); return ret_stuff.status; } Loading @@ -646,8 +673,8 @@ sn_register_nofault_code(u64 start_addr, u64 end_addr, u64 return_addr, } else { call = SN_SAL_NO_FAULT_ZONE_PHYSICAL; } SAL_CALL(ret_stuff, call, start_addr, end_addr, return_addr, (u64)1, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, call, start_addr, end_addr, return_addr, (u64)1, 0, 0, 0); return ret_stuff.status; } Loading @@ -668,8 +695,8 @@ static inline int sn_change_coherence(u64 *new_domain, u64 *old_domain) { struct ia64_sal_retval ret_stuff; SAL_CALL(ret_stuff, SN_SAL_COHERENCE, new_domain, old_domain, 0, 0, 0, 0, 0); ia64_sal_oemcall(&ret_stuff, SN_SAL_COHERENCE, (u64)new_domain, (u64)old_domain, 0, 0, 0, 0, 0); return ret_stuff.status; } Loading @@ -688,8 +715,8 @@ sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) cnodeid = nasid_to_cnodeid(get_node_number(paddr)); // spin_lock(&NODEPDA(cnodeid)->bist_lock); local_irq_save(irq_flags); SAL_CALL_NOLOCK(ret_stuff, SN_SAL_MEMPROTECT, paddr, len, nasid_array, perms, 0, 0, 0); ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, (u64)nasid_array, perms, 0, 0, 0); local_irq_restore(irq_flags); // spin_unlock(&NODEPDA(cnodeid)->bist_lock); return ret_stuff.status; Loading