This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / include / asm-parisc / pdc.h
index ce9a9e1..990ddd3 100644 (file)
@@ -297,6 +297,175 @@ typedef struct {
 #define OSTAT_RUN              6
 #define OSTAT_ON               7
 
+#ifdef __LP64__
+/* PDC PAT CELL */
+#define PDC_PAT_CELL   64L             /* Interface for gaining and 
+                                        * manipulating cell state within PD */
+#define PDC_PAT_CELL_GET_NUMBER           0L   /* Return Cell number           */
+#define PDC_PAT_CELL_GET_INFO      1L  /* Returns info about Cell      */
+#define PDC_PAT_CELL_MODULE        2L  /* Returns info about Module    */
+#define PDC_PAT_CELL_SET_ATTENTION 9L  /* Set Cell Attention indicator */
+#define PDC_PAT_CELL_NUMBER_TO_LOC 10L /* Cell Number -> Location      */
+#define PDC_PAT_CELL_WALK_FABRIC   11L /* Walk the Fabric              */
+#define PDC_PAT_CELL_GET_RDT_SIZE  12L /* Return Route Distance Table Sizes */
+#define PDC_PAT_CELL_GET_RDT       13L /* Return Route Distance Tables */
+#define PDC_PAT_CELL_GET_LOCAL_PDH_SZ  14L /* Read Local PDH Buffer Size*/
+#define PDC_PAT_CELL_SET_LOCAL_PDH     15L /* Write Local PDH Buffer   */
+#define PDC_PAT_CELL_GET_REMOTE_PDH_SZ 16L /* Return Remote PDH Buffer Size */
+#define PDC_PAT_CELL_GET_REMOTE_PDH    17L /* Read Remote PDH Buffer   */
+#define PDC_PAT_CELL_GET_DBG_INFO  128L        /* Return DBG Buffer Info       */
+#define PDC_PAT_CELL_CHANGE_ALIAS  129L        /* Change Non-Equivalent Alias Checking */
+
+/*
+** Arg to PDC_PAT_CELL_MODULE memaddr[4]
+**
+** Addresses on the Merced Bus != all Runway Bus addresses.
+** This is intended for programming SBA/LBA chips range registers.
+*/
+#define IO_VIEW                        0UL
+#define PA_VIEW                        1UL
+
+/* PDC_PAT_CELL_MODULE entity type values */
+#define PAT_ENTITY_CA          0       /* central agent        */
+#define PAT_ENTITY_PROC                1       /* processor            */
+#define PAT_ENTITY_MEM         2       /* memory controller    */
+#define PAT_ENTITY_SBA         3       /* system bus adapter   */
+#define PAT_ENTITY_LBA         4       /* local bus adapter    */
+#define PAT_ENTITY_PBC         5       /* processor bus converter */
+#define PAT_ENTITY_XBC         6       /* crossbar fabric connect */
+#define PAT_ENTITY_RC          7       /* fabric interconnect  */
+
+/* PDC_PAT_CELL_MODULE address range type values */
+#define PAT_PBNUM              0       /* PCI Bus Number       */
+#define PAT_LMMIO              1       /* < 4G MMIO Space      */
+#define PAT_GMMIO              2       /* > 4G MMIO Space      */
+#define PAT_NPIOP              3       /* Non Postable I/O Port Space */
+#define PAT_PIOP               4       /* Postable I/O Port Space */
+#define PAT_AHPA               5       /* Additional HPA Space */
+#define PAT_UFO                        6       /* HPA Space (UFO for Mariposa) */
+#define PAT_GNIP               7       /* GNI Reserved Space   */
+
+
+/* PDC PAT CHASSIS LOG */
+#define PDC_PAT_CHASSIS_LOG    65L     /* Platform logging & forward
+                                        ** progress functions  */
+#define PDC_PAT_CHASSIS_WRITE_LOG      0L /* Write Log Entry   */
+#define PDC_PAT_CHASSIS_READ_LOG       1L /* Read  Log Entry   */
+
+
+/* PDC PAT CPU  */
+#define PDC_PAT_CPU            67L     /* Interface to CPU configuration
+                                        * within the protection domain */
+#define PDC_PAT_CPU_INFO               0L /* Return CPU config info    */
+#define PDC_PAT_CPU_DELETE             1L /* Delete CPU                */
+#define PDC_PAT_CPU_ADD                        2L /* Add    CPU                */
+#define PDC_PAT_CPU_GET_NUMBER         3L /* Return CPU Number         */
+#define PDC_PAT_CPU_GET_HPA            4L /* Return CPU HPA            */
+#define PDC_PAT_CPU_STOP               5L /* Stop   CPU                */
+#define PDC_PAT_CPU_RENDEZVOUS         6L /* Rendezvous CPU            */
+#define PDC_PAT_CPU_GET_CLOCK_INFO     7L /* Return CPU Clock info     */
+#define PDC_PAT_CPU_GET_RENDEZVOUS_STATE 8L /* Return Rendezvous State */
+#define PDC_PAT_CPU_PLUNGE_FABRIC      128L /* Plunge Fabric           */
+#define PDC_PAT_CPU_UPDATE_CACHE_CLEANSING 129L /* Manipulate Cache 
+                                                 * Cleansing Mode      */
+
+/*  PDC PAT EVENT */
+#define PDC_PAT_EVENT          68L     /* Interface to Platform Events */
+#define PDC_PAT_EVENT_GET_CAPS         0L /* Get Capabilities          */
+#define PDC_PAT_EVENT_SET_MODE         1L /* Set Notification Mode     */
+#define PDC_PAT_EVENT_SCAN             2L /* Scan Event                */
+#define PDC_PAT_EVENT_HANDLE           3L /* Handle Event              */
+#define PDC_PAT_EVENT_GET_NB_CALL      4L /* Get Non-Blocking call Args*/
+
+/*  PDC PAT HPMC */
+#define PDC_PAT_HPMC           70L     /* Cause processor to go into spin
+                                        ** loop, and wait for wake up from
+                                        ** Monarch Processor           */
+#define PDC_PAT_HPMC_RENDEZ_CPU                0L /* go into spin loop         */
+#define PDC_PAT_HPMC_SET_PARAMS                1L /* Allows OS to specify intr which PDC 
+                                        * will use to interrupt OS during machine
+                                        * check rendezvous             */
+
+/* parameters for PDC_PAT_HPMC_SET_PARAMS */
+#define HPMC_SET_PARAMS_INTR           1L /* Rendezvous Interrupt      */
+#define HPMC_SET_PARAMS_WAKE           2L /* Wake up processor         */
+
+/*  PDC PAT IO */
+#define PDC_PAT_IO             71L     /* On-line services for I/O modules */
+#define PDC_PAT_IO_GET_SLOT_STATUS      5L /* Get Slot Status Info     */
+#define PDC_PAT_IO_GET_LOC_FROM_HARDWARE 6L /* Get Physical Location from */
+                                            /* Hardware Path           */
+#define PDC_PAT_IO_GET_HARDWARE_FROM_LOC 7L /* Get Hardware Path from 
+                                             * Physical Location       */
+#define PDC_PAT_IO_GET_PCI_CONFIG_FROM_HW 11L /* Get PCI Configuration
+                                               * Address from Hardware Path */
+#define PDC_PAT_IO_GET_HW_FROM_PCI_CONFIG 12L /* Get Hardware Path 
+                                               * from PCI Configuration Address */
+#define PDC_PAT_IO_READ_HOST_BRIDGE_INFO  13L /* Read Host Bridge State Info */
+#define PDC_PAT_IO_CLEAR_HOST_BRIDGE_INFO 14L /* Clear Host Bridge State Info*/
+#define PDC_PAT_IO_GET_PCI_ROUTING_TABLE_SIZE 15L /* Get PCI INT Routing Table 
+                                                   * Size              */
+#define PDC_PAT_IO_GET_PCI_ROUTING_TABLE  16L /* Get PCI INT Routing Table */
+#define PDC_PAT_IO_GET_HINT_TABLE_SIZE    17L /* Get Hint Table Size   */
+#define PDC_PAT_IO_GET_HINT_TABLE      18L /* Get Hint Table           */
+#define PDC_PAT_IO_PCI_CONFIG_READ     19L /* PCI Config Read          */
+#define PDC_PAT_IO_PCI_CONFIG_WRITE    20L /* PCI Config Write         */
+#define PDC_PAT_IO_GET_NUM_IO_SLOTS    21L /* Get Number of I/O Bay Slots in 
+                                                         * Cabinet             */
+#define PDC_PAT_IO_GET_LOC_IO_SLOTS    22L /* Get Physical Location of I/O */
+                                           /* Bay Slots in Cabinet     */
+#define PDC_PAT_IO_BAY_STATUS_INFO     28L /* Get I/O Bay Slot Status Info */
+#define PDC_PAT_IO_GET_PROC_VIEW       29L /* Get Processor view of IO address */
+#define PDC_PAT_IO_PROG_SBA_DIR_RANGE  30L /* Program directed range   */
+
+/* PDC PAT MEM */
+#define PDC_PAT_MEM            72L  /* Manage memory page deallocation */
+#define PDC_PAT_MEM_PD_INFO            0L /* Return PDT info for PD    */
+#define PDC_PAT_MEM_PD_CLEAR           1L /* Clear PDT for PD          */
+#define PDC_PAT_MEM_PD_READ            2L /* Read PDT entries for PD   */
+#define PDC_PAT_MEM_PD_RESET           3L /* Reset clear bit for PD    */
+#define PDC_PAT_MEM_CELL_INFO          5L /* Return PDT info For Cell  */
+#define PDC_PAT_MEM_CELL_CLEAR         6L /* Clear PDT For Cell        */
+#define PDC_PAT_MEM_CELL_READ          7L /* Read PDT entries For Cell */
+#define PDC_PAT_MEM_CELL_RESET         8L /* Reset clear bit For Cell  */
+#define PDC_PAT_MEM_SETGM              9L /* Set Golden Memory value   */
+#define PDC_PAT_MEM_ADD_PAGE           10L /* ADDs a page to the cell  */
+#define PDC_PAT_MEM_ADDRESS            11L /* Get Physical Location From*/
+                                           /* Memory Address           */
+#define PDC_PAT_MEM_GET_TXT_SIZE       12L /* Get Formatted Text Size  */
+#define PDC_PAT_MEM_GET_PD_TXT         13L /* Get PD Formatted Text    */
+#define PDC_PAT_MEM_GET_CELL_TXT       14L /* Get Cell Formatted Text  */
+#define PDC_PAT_MEM_RD_STATE_INFO      15L /* Read Mem Module State Info*/
+#define PDC_PAT_MEM_CLR_STATE_INFO     16L /*Clear Mem Module State Info*/
+#define PDC_PAT_MEM_CLEAN_RANGE        128L /*Clean Mem in specific range*/
+#define PDC_PAT_MEM_GET_TBL_SIZE       131L /* Get Memory Table Size   */
+#define PDC_PAT_MEM_GET_TBL            132L /* Get Memory Table        */
+
+/* PDC PAT NVOLATILE */
+#define PDC_PAT_NVOLATILE      73L        /* Access Non-Volatile Memory*/
+#define PDC_PAT_NVOLATILE_READ         0L /* Read Non-Volatile Memory  */
+#define PDC_PAT_NVOLATILE_WRITE                1L /* Write Non-Volatile Memory */
+#define PDC_PAT_NVOLATILE_GET_SIZE     2L /* Return size of NVM        */
+#define PDC_PAT_NVOLATILE_VERIFY       3L /* Verify contents of NVM    */
+#define PDC_PAT_NVOLATILE_INIT         4L /* Initialize NVM            */
+
+/* PDC PAT PD */
+#define PDC_PAT_PD             74L         /* Protection Domain Info   */
+#define PDC_PAT_PD_GET_ADDR_MAP                0L  /* Get Address Map          */
+
+/* PDC_PAT_PD_GET_ADDR_MAP entry types */
+#define PAT_MEMORY_DESCRIPTOR          1
+
+/* PDC_PAT_PD_GET_ADDR_MAP memory types */
+#define PAT_MEMTYPE_MEMORY             0
+#define PAT_MEMTYPE_FIRMWARE           4
+
+/* PDC_PAT_PD_GET_ADDR_MAP memory usage */
+#define PAT_MEMUSE_GENERAL             0
+#define PAT_MEMUSE_GI                  128
+#define PAT_MEMUSE_GNI                 129
+#endif /* __LP64__ */
+
 #ifndef __ASSEMBLY__
 
 #include <linux/types.h>
@@ -309,6 +478,12 @@ extern int pdc_type;
 #define PDC_TYPE_SYSTEM_MAP     1 /* 32-bit, but supports PDC_SYSTEM_MAP */
 #define PDC_TYPE_SNAKE          2 /* Doesn't support SYSTEM_MAP */
 
+#ifdef CONFIG_PARISC64
+#define is_pdc_pat()    (PDC_TYPE_PAT == pdc_type)
+#else
+#define is_pdc_pat()    (0)
+#endif
+
 struct pdc_chassis_info {       /* for PDC_CHASSIS_INFO */
        unsigned long actcnt;   /* actual number of bytes returned */
        unsigned long maxcnt;   /* maximum number of bytes that could be returned */
@@ -346,10 +521,10 @@ struct pdc_cache_cf {             /* for PDC_CACHE  (I/D-caches) */
 #ifdef __LP64__
                cc_padW:32,
 #endif
-               cc_alias: 4,    /* alias boundaries for virtual addresses   */
+               cc_alias:4,     /* alias boundaries for virtual addresses   */
                cc_block: 4,    /* to determine most efficient stride */
                cc_line : 3,    /* maximum amount written back as a result of store (multiple of 16 bytes) */
-               cc_shift: 2,    /* how much to shift cc_block left */
+               cc_pad0 : 2,    /* reserved */
                cc_wt   : 1,    /* 0 = WT-Dcache, 1 = WB-Dcache */
                cc_sh   : 2,    /* 0 = separate I/D-cache, else shared I/D-cache */
                cc_cst  : 3,    /* 0 = incoherent D-cache, 1=coherent D-cache */
@@ -499,6 +674,40 @@ struct pdc_tod {
        unsigned long tod_usec;
 };
 
+#ifdef __LP64__
+struct pdc_pat_cell_num {
+       unsigned long cell_num;
+       unsigned long cell_loc;
+};
+
+struct pdc_pat_cpu_num {
+       unsigned long cpu_num;
+       unsigned long cpu_loc;
+};
+
+struct pdc_pat_pd_addr_map_entry {
+       unsigned char entry_type;       /* 1 = Memory Descriptor Entry Type */
+       unsigned char reserve1[5];
+       unsigned char memory_type;
+       unsigned char memory_usage;
+       unsigned long paddr;
+       unsigned int  pages;            /* Length in 4K pages */
+       unsigned int  reserve2;
+       unsigned long cell_map;
+};
+
+/* FIXME: mod[508] should really be a union of the various mod components */
+struct pdc_pat_cell_mod_maddr_block {  /* PDC_PAT_CELL_MODULE */
+       unsigned long cba;              /* function 0 configuration space address */
+       unsigned long mod_info;         /* module information */
+       unsigned long mod_location;     /* physical location of the module */
+       struct hardware_path mod_path;  /* hardware path */
+       unsigned long mod[508];         /* PAT cell module components */
+};
+
+typedef struct pdc_pat_cell_mod_maddr_block pdc_pat_cell_mod_maddr_block_t;
+#endif /* __LP64__ */
+
 /* architected results from PDC_PIM/transfer hpmc on a PA1.1 machine */
 
 struct pdc_hpmc_pim_11 { /* PDC_PIM */
@@ -760,6 +969,52 @@ int pdc_sti_call(unsigned long func, unsigned long flags,
                  unsigned long inptr, unsigned long outputr,
                  unsigned long glob_cfg);
 
+#ifdef __LP64__
+int pdc_pat_chassis_send_log(unsigned long status, unsigned long data);
+int pdc_pat_cell_get_number(struct pdc_pat_cell_num *cell_info);
+int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long mod,
+                       unsigned long view_type, void *mem_addr);
+int pdc_pat_cpu_get_number(struct pdc_pat_cpu_num *cpu_info, void *hpa);
+int pdc_pat_get_irt_size(unsigned long *num_entries, unsigned long cell_num);
+int pdc_pat_get_irt(void *r_addr, unsigned long cell_num);
+int pdc_pat_pd_get_addr_map(unsigned long *actual_len, void *mem_addr, 
+                           unsigned long count, unsigned long offset);
+
+/********************************************************************
+* PDC_PAT_CELL[Return Cell Module] memaddr[0] conf_base_addr
+* ----------------------------------------------------------
+* Bit  0 to 51 - conf_base_addr
+* Bit 52 to 62 - reserved
+* Bit       63 - endianess bit
+********************************************************************/
+#define PAT_GET_CBA(value) ((value) & 0xfffffffffffff000UL)
+
+/********************************************************************
+* PDC_PAT_CELL[Return Cell Module] memaddr[1] mod_info
+* ----------------------------------------------------
+* Bit  0 to  7 - entity type
+*    0 = central agent,            1 = processor,
+*    2 = memory controller,        3 = system bus adapter,
+*    4 = local bus adapter,        5 = processor bus converter,
+*    6 = crossbar fabric connect,  7 = fabric interconnect,
+*    8 to 254 reserved,            255 = unknown.
+* Bit  8 to 15 - DVI
+* Bit 16 to 23 - IOC functions
+* Bit 24 to 39 - reserved
+* Bit 40 to 63 - mod_pages
+*    number of 4K pages a module occupies starting at conf_base_addr
+********************************************************************/
+#define PAT_GET_ENTITY(value)  (((value) >> 56) & 0xffUL)
+#define PAT_GET_DVI(value)     (((value) >> 48) & 0xffUL)
+#define PAT_GET_IOC(value)     (((value) >> 40) & 0xffUL)
+#define PAT_GET_MOD_PAGES(value)(((value) & 0xffffffUL)
+
+#else /* !__LP64__ */
+/* No PAT support for 32-bit kernels...sorry */
+#define pdc_pat_get_irt_size(num_entries, cell_numn)   PDC_BAD_PROC
+#define pdc_pat_get_irt(r_addr, cell_num)      PDC_BAD_PROC
+#endif /* !__LP64__ */
+
 extern void pdc_init(void);
 
 #endif /* __ASSEMBLY__ */