]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-ia64/pal.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[linux-2.6-omap-h63xx.git] / include / asm-ia64 / pal.h
index bc768153f3c95a9cb55020888463f245baaea9d0..67b02901ead499ee5697155f57498e8cee960642 100644 (file)
@@ -13,6 +13,7 @@
  * Copyright (C) 1999 VA Linux Systems
  * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
  * Copyright (C) 1999 Srinivasa Prasad Thirumalachar <sprasad@sprasad.engr.sgi.com>
+ * Copyright (C) 2008 Silicon Graphics, Inc. (SGI)
  *
  * 99/10/01    davidm  Make sure we pass zero for reserved parameters.
  * 00/03/07    davidm  Updated pal_cache_flush() to be in sync with PAL v2.6.
@@ -32,7 +33,7 @@
 #define PAL_CACHE_FLUSH                1       /* flush i/d cache */
 #define PAL_CACHE_INFO         2       /* get detailed i/d cache info */
 #define PAL_CACHE_INIT         3       /* initialize i/d cache */
-#define PAL_CACHE_SUMMARY      4       /* get summary of cache heirarchy */
+#define PAL_CACHE_SUMMARY      4       /* get summary of cache hierarchy */
 #define PAL_MEM_ATTRIB         5       /* list supported memory attributes */
 #define PAL_PTCE_INFO          6       /* purge TLB info */
 #define PAL_VM_INFO            7       /* return supported virtual memory features */
@@ -73,6 +74,8 @@
 #define PAL_CACHE_SHARED_INFO  43      /* returns information on caches shared by logical processor */
 #define PAL_GET_HW_POLICY      48      /* Get current hardware resource sharing policy */
 #define PAL_SET_HW_POLICY      49      /* Set current hardware resource sharing policy */
+#define PAL_VP_INFO            50      /* Information about virtual processor features */
+#define PAL_MC_HW_TRACKING     51      /* Hardware tracking status */
 
 #define PAL_COPY_PAL           256     /* relocate PAL procedures and PAL PMI */
 #define PAL_HALT_INFO          257     /* return the low power capabilities of processor */
@@ -89,6 +92,8 @@
 #define PAL_GET_PSTATE_TYPE_AVGNORESET 2
 #define PAL_GET_PSTATE_TYPE_INSTANT    3
 
+#define PAL_MC_ERROR_INJECT    276     /* Injects processor error or returns injection capabilities */
+
 #ifndef __ASSEMBLY__
 
 #include <linux/types.h>
@@ -113,14 +118,14 @@ typedef s64                               pal_status_t;
                                                 */
 #define PAL_STATUS_REQUIRES_MEMORY     (-9)    /* Call requires PAL memory buffer */
 
-/* Processor cache level in the heirarchy */
+/* Processor cache level in the hierarchy */
 typedef u64                            pal_cache_level_t;
 #define PAL_CACHE_LEVEL_L0             0       /* L0 */
 #define PAL_CACHE_LEVEL_L1             1       /* L1 */
 #define PAL_CACHE_LEVEL_L2             2       /* L2 */
 
 
-/* Processor cache type at a particular level in the heirarchy */
+/* Processor cache type at a particular level in the hierarchy */
 
 typedef u64                            pal_cache_type_t;
 #define PAL_CACHE_TYPE_INSTRUCTION     1       /* Instruction cache */
@@ -272,14 +277,14 @@ typedef struct pal_cache_protection_info_s {
 #define PAL_CACHE_PROT_METHOD_ECC              3       /* ECC protection */
 
 
-/* Processor cache line identification in the heirarchy */
+/* Processor cache line identification in the hierarchy */
 typedef union pal_cache_line_id_u {
        u64                     pclid_data;
        struct {
                u64             cache_type      : 8,    /* 7-0 cache type */
                                level           : 8,    /* 15-8 level of the
                                                         * cache in the
-                                                        * heirarchy.
+                                                        * hierarchy.
                                                         */
                                way             : 8,    /* 23-16 way in the set
                                                         */
@@ -292,7 +297,7 @@ typedef union pal_cache_line_id_u {
                u64             cache_type      : 8,    /* 7-0 cache type */
                                level           : 8,    /* 15-8 level of the
                                                         * cache in the
-                                                        * heirarchy.
+                                                        * hierarchy.
                                                         */
                                way             : 8,    /* 23-16 way in the set
                                                         */
@@ -371,6 +376,7 @@ typedef u64                                 pal_mc_info_index_t;
                                                         * dependent
                                                         */
 
+#define PAL_TLB_CHECK_OP_PURGE                 8
 
 typedef struct pal_process_state_info_s {
        u64             reserved1       : 2,
@@ -501,7 +507,8 @@ typedef struct pal_cache_check_info_s {
                        wiv             : 1,    /* Way field valid */
                        reserved2       : 1,
                        dp              : 1,    /* Data poisoned on MBE */
-                       reserved3       : 8,
+                       reserved3       : 6,
+                       hlth            : 2,    /* Health indicator */
 
                        index           : 20,   /* Cache line index */
                        reserved4       : 2,
@@ -539,7 +546,9 @@ typedef struct pal_tlb_check_info_s {
                        dtc             : 1,    /* Fail in data TC */
                        itc             : 1,    /* Fail in inst. TC */
                        op              : 4,    /* Cache operation */
-                       reserved3       : 30,
+                       reserved3       : 6,
+                       hlth            : 2,    /* Health indicator */
+                       reserved4       : 22,
 
                        is              : 1,    /* instruction set (1 == ia32) */
                        iv              : 1,    /* instruction set field valid */
@@ -630,7 +639,8 @@ typedef struct pal_uarch_check_info_s {
                        way             : 6,    /* Way of structure */
                        wv              : 1,    /* way valid */
                        xv              : 1,    /* index valid */
-                       reserved1       : 8,
+                       reserved1       : 6,
+                       hlth            : 2,    /* Health indicator */
                        index           : 8,    /* Index or set of the uarch
                                                 * structure that failed.
                                                 */
@@ -978,7 +988,7 @@ ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr)
        return iprv.status;
 }
 
-/* Return summary information about the heirarchy of caches controlled by the processor */
+/* Return summary information about the hierarchy of caches controlled by the processor */
 static inline s64
 ia64_pal_cache_summary (u64 *cache_levels, u64 *unique_caches)
 {
@@ -1210,14 +1220,12 @@ ia64_pal_mc_drain (void)
 
 /* Return the machine check dynamic processor state */
 static inline s64
-ia64_pal_mc_dynamic_state (u64 offset, u64 *size, u64 *pds)
+ia64_pal_mc_dynamic_state (u64 info_type, u64 dy_buffer, u64 *size)
 {
        struct ia64_pal_retval iprv;
-       PAL_CALL(iprv, PAL_MC_DYNAMIC_STATE, offset, 0, 0);
+       PAL_CALL(iprv, PAL_MC_DYNAMIC_STATE, info_type, dy_buffer, 0);
        if (size)
                *size = iprv.v0;
-       if (pds)
-               *pds = iprv.v1;
        return iprv.status;
 }
 
@@ -1234,6 +1242,37 @@ ia64_pal_mc_error_info (u64 info_index, u64 type_index, u64 *size, u64 *error_in
        return iprv.status;
 }
 
+/* Injects the requested processor error or returns info on
+ * supported injection capabilities for current processor implementation
+ */
+static inline s64
+ia64_pal_mc_error_inject_phys (u64 err_type_info, u64 err_struct_info,
+                       u64 err_data_buffer, u64 *capabilities, u64 *resources)
+{
+       struct ia64_pal_retval iprv;
+       PAL_CALL_PHYS_STK(iprv, PAL_MC_ERROR_INJECT, err_type_info,
+                         err_struct_info, err_data_buffer);
+       if (capabilities)
+               *capabilities= iprv.v0;
+       if (resources)
+               *resources= iprv.v1;
+       return iprv.status;
+}
+
+static inline s64
+ia64_pal_mc_error_inject_virt (u64 err_type_info, u64 err_struct_info,
+                       u64 err_data_buffer, u64 *capabilities, u64 *resources)
+{
+       struct ia64_pal_retval iprv;
+       PAL_CALL_STK(iprv, PAL_MC_ERROR_INJECT, err_type_info,
+                         err_struct_info, err_data_buffer);
+       if (capabilities)
+               *capabilities= iprv.v0;
+       if (resources)
+               *resources= iprv.v1;
+       return iprv.status;
+}
+
 /* Inform PALE_CHECK whether a machine check is expected so that PALE_CHECK willnot
  * attempt to correct any expected machine checks.
  */
@@ -1247,15 +1286,41 @@ ia64_pal_mc_expected (u64 expected, u64 *previous)
        return iprv.status;
 }
 
+typedef union pal_hw_tracking_u {
+       u64                     pht_data;
+       struct {
+               u64             itc     :4,     /* Instruction cache tracking */
+                               dct     :4,     /* Date cache tracking */
+                               itt     :4,     /* Instruction TLB tracking */
+                               ddt     :4,     /* Data TLB tracking */
+                               reserved:48;
+       } pal_hw_tracking_s;
+} pal_hw_tracking_u_t;
+
+/*
+ * Hardware tracking status.
+ */
+static inline s64
+ia64_pal_mc_hw_tracking (u64 *status)
+{
+       struct ia64_pal_retval iprv;
+       PAL_CALL(iprv, PAL_MC_HW_TRACKING, 0, 0, 0);
+       if (status)
+               *status = iprv.v0;
+       return iprv.status;
+}
+
 /* Register a platform dependent location with PAL to which it can save
  * minimal processor state in the event of a machine check or initialization
  * event.
  */
 static inline s64
-ia64_pal_mc_register_mem (u64 physical_addr)
+ia64_pal_mc_register_mem (u64 physical_addr, u64 size, u64 *req_size)
 {
        struct ia64_pal_retval iprv;
-       PAL_CALL(iprv, PAL_MC_REGISTER_MEM, physical_addr, 0, 0);
+       PAL_CALL(iprv, PAL_MC_REGISTER_MEM, physical_addr, size, 0);
+       if (req_size)
+               *req_size = iprv.v0;
        return iprv.status;
 }
 
@@ -1345,10 +1410,11 @@ struct pal_features_s;
 static inline s64
 ia64_pal_proc_get_features (u64 *features_avail,
                            u64 *features_status,
-                           u64 *features_control)
+                           u64 *features_control,
+                           u64 features_set)
 {
        struct ia64_pal_retval iprv;
-       PAL_CALL_PHYS(iprv, PAL_PROC_GET_FEATURES, 0, 0, 0);
+       PAL_CALL_PHYS(iprv, PAL_PROC_GET_FEATURES, 0, features_set, 0);
        if (iprv.status == 0) {
                *features_avail   = iprv.v0;
                *features_status  = iprv.v1;
@@ -1596,6 +1662,29 @@ ia64_pal_vm_summary (pal_vm_info_1_u_t *vm_info_1, pal_vm_info_2_u_t *vm_info_2)
        return iprv.status;
 }
 
+typedef union pal_vp_info_u {
+       u64                     pvi_val;
+       struct {
+               u64             index:          48,     /* virtual feature set info */
+                               vmm_id:         16;     /* feature set id */
+       } pal_vp_info_s;
+} pal_vp_info_u_t;
+
+/*
+ * Returns infomation about virtual processor features
+ */
+static inline s64
+ia64_pal_vp_info (u64 feature_set, u64 vp_buffer, u64 *vp_info, u64 *vmm_id)
+{
+       struct ia64_pal_retval iprv;
+       PAL_CALL(iprv, PAL_VP_INFO, feature_set, vp_buffer, 0);
+       if (vp_info)
+               *vp_info = iprv.v0;
+       if (vmm_id)
+               *vmm_id = iprv.v1;
+       return iprv.status;
+}
+
 typedef union pal_itr_valid_u {
        u64                     piv_val;
        struct {