aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-parisc
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-parisc')
-rw-r--r--include/asm-parisc/pdc.h313
1 files changed, 137 insertions, 176 deletions
diff --git a/include/asm-parisc/pdc.h b/include/asm-parisc/pdc.h
index 775726d8a716..5e0c3ca5450b 100644
--- a/include/asm-parisc/pdc.h
+++ b/include/asm-parisc/pdc.h
@@ -1,7 +1,6 @@
1#ifndef _PARISC_PDC_H 1#ifndef _PARISC_PDC_H
2#define _PARISC_PDC_H 2#define _PARISC_PDC_H
3 3
4
5/* 4/*
6 * PDC return values ... 5 * PDC return values ...
7 * All PDC calls return a subset of these errors. 6 * All PDC calls return a subset of these errors.
@@ -20,7 +19,6 @@
20#define PDC_BUS_POW_WARN -12 /* Call could not complete in allowed power budget */ 19#define PDC_BUS_POW_WARN -12 /* Call could not complete in allowed power budget */
21#define PDC_NOT_NARROW -17 /* Narrow mode not supported */ 20#define PDC_NOT_NARROW -17 /* Narrow mode not supported */
22 21
23
24/* 22/*
25 * PDC entry points... 23 * PDC entry points...
26 */ 24 */
@@ -50,6 +48,12 @@
50#define PDC_MODEL_DISPEC 5 /* disable specific option */ 48#define PDC_MODEL_DISPEC 5 /* disable specific option */
51#define PDC_MODEL_CPU_ID 6 /* returns cpu-id (only newer machines!) */ 49#define PDC_MODEL_CPU_ID 6 /* returns cpu-id (only newer machines!) */
52#define PDC_MODEL_CAPABILITIES 7 /* returns OS32/OS64-flags */ 50#define PDC_MODEL_CAPABILITIES 7 /* returns OS32/OS64-flags */
51/* Values for PDC_MODEL_CAPABILITIES non-equivalent virtual aliasing support */
52#define PDC_MODEL_IOPDIR_FDC (1 << 2)
53#define PDC_MODEL_NVA_MASK (3 << 4)
54#define PDC_MODEL_NVA_SUPPORTED (0 << 4)
55#define PDC_MODEL_NVA_SLOW (1 << 4)
56#define PDC_MODEL_NVA_UNSUPPORTED (3 << 4)
53#define PDC_MODEL_GET_BOOT__OP 8 /* returns boot test options */ 57#define PDC_MODEL_GET_BOOT__OP 8 /* returns boot test options */
54#define PDC_MODEL_SET_BOOT__OP 9 /* set boot test options */ 58#define PDC_MODEL_SET_BOOT__OP 9 /* set boot test options */
55 59
@@ -91,7 +95,7 @@
91#define PDC_TOD 9 /* time-of-day clock (TOD) */ 95#define PDC_TOD 9 /* time-of-day clock (TOD) */
92#define PDC_TOD_READ 0 /* read TOD */ 96#define PDC_TOD_READ 0 /* read TOD */
93#define PDC_TOD_WRITE 1 /* write TOD */ 97#define PDC_TOD_WRITE 1 /* write TOD */
94#define PDC_TOD_ITIMER 2 /* calibrate Interval Timer (CR16) */ 98
95 99
96#define PDC_STABLE 10 /* stable storage (sprockets) */ 100#define PDC_STABLE 10 /* stable storage (sprockets) */
97#define PDC_STABLE_READ 0 101#define PDC_STABLE_READ 0
@@ -143,16 +147,6 @@
143#define PDC_MEM_RET_PDT_FULL -11 147#define PDC_MEM_RET_PDT_FULL -11
144#define PDC_MEM_RET_INVALID_PHYSICAL_LOCATION ~0ULL 148#define PDC_MEM_RET_INVALID_PHYSICAL_LOCATION ~0ULL
145 149
146#ifdef __KERNEL__
147# ifndef __ASSEMBLY__
148typedef struct {
149 unsigned long long baseAddr;
150 unsigned int pages;
151 unsigned int reserved;
152} MemAddrTable_t;
153# endif /* __ASSEMBLY__ */
154#endif /* __KERNEL__ */
155
156#define PDC_PSW 21 /* Get/Set default System Mask */ 150#define PDC_PSW 21 /* Get/Set default System Mask */
157#define PDC_PSW_MASK 0 /* Return mask */ 151#define PDC_PSW_MASK 0 /* Return mask */
158#define PDC_PSW_GET_DEFAULTS 1 /* Return defaults */ 152#define PDC_PSW_GET_DEFAULTS 1 /* Return defaults */
@@ -275,6 +269,43 @@ typedef struct {
275#define PDC_LINK_PCI_ENTRY_POINTS 0 /* list (Arg1) = 0 */ 269#define PDC_LINK_PCI_ENTRY_POINTS 0 /* list (Arg1) = 0 */
276#define PDC_LINK_USB_ENTRY_POINTS 1 /* list (Arg1) = 1 */ 270#define PDC_LINK_USB_ENTRY_POINTS 1 /* list (Arg1) = 1 */
277 271
272/* cl_class
273 * page 3-33 of IO-Firmware ARS
274 * IODC ENTRY_INIT(Search first) RET[1]
275 */
276#define CL_NULL 0 /* invalid */
277#define CL_RANDOM 1 /* random access (as disk) */
278#define CL_SEQU 2 /* sequential access (as tape) */
279#define CL_DUPLEX 7 /* full-duplex point-to-point (RS-232, Net) */
280#define CL_KEYBD 8 /* half-duplex console (HIL Keyboard) */
281#define CL_DISPL 9 /* half-duplex console (display) */
282#define CL_FC 10 /* FiberChannel access media */
283
284/* IODC ENTRY_INIT() */
285#define ENTRY_INIT_SRCH_FRST 2
286#define ENTRY_INIT_SRCH_NEXT 3
287#define ENTRY_INIT_MOD_DEV 4
288#define ENTRY_INIT_DEV 5
289#define ENTRY_INIT_MOD 6
290#define ENTRY_INIT_MSG 9
291
292/* IODC ENTRY_IO() */
293#define ENTRY_IO_BOOTIN 0
294#define ENTRY_IO_BOOTOUT 1
295#define ENTRY_IO_CIN 2
296#define ENTRY_IO_COUT 3
297#define ENTRY_IO_CLOSE 4
298#define ENTRY_IO_GETMSG 9
299#define ENTRY_IO_BBLOCK_IN 16
300#define ENTRY_IO_BBLOCK_OUT 17
301
302/* IODC ENTRY_SPA() */
303
304/* IODC ENTRY_CONFIG() */
305
306/* IODC ENTRY_TEST() */
307
308/* IODC ENTRY_TLB() */
278 309
279/* constants for OS (NVM...) */ 310/* constants for OS (NVM...) */
280#define OS_ID_NONE 0 /* Undefined OS ID */ 311#define OS_ID_NONE 0 /* Undefined OS ID */
@@ -296,12 +327,15 @@ typedef struct {
296#define OSTAT_RUN 6 327#define OSTAT_RUN 6
297#define OSTAT_ON 7 328#define OSTAT_ON 7
298 329
299#ifndef __ASSEMBLY__ 330/* Page Zero constant offsets used by the HPMC handler */
300#include <linux/types.h> 331#define BOOT_CONSOLE_HPA_OFFSET 0x3c0
301#endif /* __ASSEMBLY__ */ 332#define BOOT_CONSOLE_SPA_OFFSET 0x3c4
333#define BOOT_CONSOLE_PATH_OFFSET 0x3a8
302 334
335#if !defined(__ASSEMBLY__)
303#ifdef __KERNEL__ 336#ifdef __KERNEL__
304# ifndef __ASSEMBLY__ 337
338#include <linux/types.h>
305 339
306extern int pdc_type; 340extern int pdc_type;
307 341
@@ -335,14 +369,6 @@ struct pdc_model { /* for PDC_MODEL */
335 unsigned long curr_key; 369 unsigned long curr_key;
336}; 370};
337 371
338/* Values for PDC_MODEL_CAPABILITIES non-equivalent virtual aliasing support */
339
340#define PDC_MODEL_IOPDIR_FDC (1 << 2) /* see sba_iommu.c */
341#define PDC_MODEL_NVA_MASK (3 << 4)
342#define PDC_MODEL_NVA_SUPPORTED (0 << 4)
343#define PDC_MODEL_NVA_SLOW (1 << 4)
344#define PDC_MODEL_NVA_UNSUPPORTED (3 << 4)
345
346struct pdc_cache_cf { /* for PDC_CACHE (I/D-caches) */ 372struct pdc_cache_cf { /* for PDC_CACHE (I/D-caches) */
347 unsigned long 373 unsigned long
348#ifdef CONFIG_64BIT 374#ifdef CONFIG_64BIT
@@ -562,16 +588,97 @@ struct pdc_hpmc_pim_20 { /* PDC_PIM */
562 __u64 fr[32]; 588 __u64 fr[32];
563}; 589};
564 590
565# endif /* __ASSEMBLY__ */ 591void pdc_console_init(void); /* in pdc_console.c */
592void pdc_console_restart(void);
593
594void setup_pdc(void); /* in inventory.c */
595
596/* wrapper-functions from pdc.c */
597
598int pdc_add_valid(unsigned long address);
599int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
600int pdc_chassis_disp(unsigned long disp);
601int pdc_chassis_warn(unsigned long *warn);
602int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
603int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
604 void *iodc_data, unsigned int iodc_data_size);
605int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
606 struct pdc_module_path *mod_path, long mod_index);
607int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info,
608 long mod_index, long addr_index);
609int pdc_model_info(struct pdc_model *model);
610int pdc_model_sysmodel(char *name);
611int pdc_model_cpuid(unsigned long *cpu_id);
612int pdc_model_versions(unsigned long *versions, int id);
613int pdc_model_capabilities(unsigned long *capabilities);
614int pdc_cache_info(struct pdc_cache_info *cache);
615int pdc_spaceid_bits(unsigned long *space_bits);
616#ifndef CONFIG_PA20
617int pdc_btlb_info(struct pdc_btlb_info *btlb);
618int pdc_mem_map_hpa(struct pdc_memory_map *r_addr, struct pdc_module_path *mod_path);
619#endif /* !CONFIG_PA20 */
620int pdc_lan_station_id(char *lan_addr, unsigned long net_hpa);
621
622int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count);
623int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count);
624int pdc_stable_get_size(unsigned long *size);
625int pdc_stable_verify_contents(void);
626int pdc_stable_initialize(void);
627
628int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa);
629int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl);
630
631int pdc_get_initiator(struct hardware_path *, struct pdc_initiator *);
632int pdc_tod_read(struct pdc_tod *tod);
633int pdc_tod_set(unsigned long sec, unsigned long usec);
634
635#ifdef CONFIG_64BIT
636int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr,
637 struct pdc_memory_table *tbl, unsigned long entries);
638#endif
639
640void set_firmware_width(void);
641int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
642int pdc_do_reset(void);
643int pdc_soft_power_info(unsigned long *power_reg);
644int pdc_soft_power_button(int sw_control);
645void pdc_io_reset(void);
646void pdc_io_reset_devices(void);
647int pdc_iodc_getc(void);
648void pdc_iodc_putc(unsigned char c);
649void pdc_iodc_outc(unsigned char c);
650void pdc_printf(const char *fmt, ...);
651
652void pdc_emergency_unlock(void);
653int pdc_sti_call(unsigned long func, unsigned long flags,
654 unsigned long inptr, unsigned long outputr,
655 unsigned long glob_cfg);
656
657static inline char * os_id_to_string(u16 os_id) {
658 switch(os_id) {
659 case OS_ID_NONE: return "No OS";
660 case OS_ID_HPUX: return "HP-UX";
661 case OS_ID_MPEXL: return "MPE-iX";
662 case OS_ID_OSF: return "OSF";
663 case OS_ID_HPRT: return "HP-RT";
664 case OS_ID_NOVEL: return "Novell Netware";
665 case OS_ID_LINUX: return "Linux";
666 default: return "Unknown";
667 }
668}
669
566#endif /* __KERNEL__ */ 670#endif /* __KERNEL__ */
567 671
568/* flags of the device_path (see below) */ 672#define PAGE0 ((struct zeropage *)__PAGE_OFFSET)
673
674/* DEFINITION OF THE ZERO-PAGE (PAG0) */
675/* based on work by Jason Eckhardt (jason@equator.com) */
676
677/* flags of the device_path */
569#define PF_AUTOBOOT 0x80 678#define PF_AUTOBOOT 0x80
570#define PF_AUTOSEARCH 0x40 679#define PF_AUTOSEARCH 0x40
571#define PF_TIMER 0x0F 680#define PF_TIMER 0x0F
572 681
573#ifndef __ASSEMBLY__
574
575struct device_path { /* page 1-69 */ 682struct device_path { /* page 1-69 */
576 unsigned char flags; /* flags see above! */ 683 unsigned char flags; /* flags see above! */
577 unsigned char bc[6]; /* bus converter routing info */ 684 unsigned char bc[6]; /* bus converter routing info */
@@ -591,63 +698,6 @@ struct pz_device {
591 unsigned short cl_class;/* see below */ 698 unsigned short cl_class;/* see below */
592} __attribute__((aligned(8))) ; 699} __attribute__((aligned(8))) ;
593 700
594#endif /* __ASSEMBLY__ */
595
596/* cl_class
597 * page 3-33 of IO-Firmware ARS
598 * IODC ENTRY_INIT(Search first) RET[1]
599 */
600#define CL_NULL 0 /* invalid */
601#define CL_RANDOM 1 /* random access (as disk) */
602#define CL_SEQU 2 /* sequential access (as tape) */
603#define CL_DUPLEX 7 /* full-duplex point-to-point (RS-232, Net) */
604#define CL_KEYBD 8 /* half-duplex console (HIL Keyboard) */
605#define CL_DISPL 9 /* half-duplex console (display) */
606#define CL_FC 10 /* FiberChannel access media */
607
608#if 0
609/* FIXME: DEVCLASS_* duplicates CL_* (above). Delete DEVCLASS_*? */
610#define DEVCLASS_RANDOM 1
611#define DEVCLASS_SEQU 2
612#define DEVCLASS_DUPLEX 7
613#define DEVCLASS_KEYBD 8
614#define DEVCLASS_DISP 9
615#endif
616
617/* IODC ENTRY_INIT() */
618#define ENTRY_INIT_SRCH_FRST 2
619#define ENTRY_INIT_SRCH_NEXT 3
620#define ENTRY_INIT_MOD_DEV 4
621#define ENTRY_INIT_DEV 5
622#define ENTRY_INIT_MOD 6
623#define ENTRY_INIT_MSG 9
624
625/* IODC ENTRY_IO() */
626#define ENTRY_IO_BOOTIN 0
627#define ENTRY_IO_BOOTOUT 1
628#define ENTRY_IO_CIN 2
629#define ENTRY_IO_COUT 3
630#define ENTRY_IO_CLOSE 4
631#define ENTRY_IO_GETMSG 9
632#define ENTRY_IO_BBLOCK_IN 16
633#define ENTRY_IO_BBLOCK_OUT 17
634
635/* IODC ENTRY_SPA() */
636
637/* IODC ENTRY_CONFIG() */
638
639/* IODC ENTRY_TEST() */
640
641/* IODC ENTRY_TLB() */
642
643
644/* DEFINITION OF THE ZERO-PAGE (PAG0) */
645/* based on work by Jason Eckhardt (jason@equator.com) */
646
647#ifndef __ASSEMBLY__
648
649#define PAGE0 ((struct zeropage *)__PAGE_OFFSET)
650
651struct zeropage { 701struct zeropage {
652 /* [0x000] initialize vectors (VEC) */ 702 /* [0x000] initialize vectors (VEC) */
653 unsigned int vec_special; /* must be zero */ 703 unsigned int vec_special; /* must be zero */
@@ -704,95 +754,6 @@ struct zeropage {
704 __u32 pad608[126]; 754 __u32 pad608[126];
705}; 755};
706 756
707#endif /* __ASSEMBLY__ */ 757#endif /* !defined(__ASSEMBLY__) */
708
709/* Page Zero constant offsets used by the HPMC handler */
710
711#define BOOT_CONSOLE_HPA_OFFSET 0x3c0
712#define BOOT_CONSOLE_SPA_OFFSET 0x3c4
713#define BOOT_CONSOLE_PATH_OFFSET 0x3a8
714
715#ifdef __KERNEL__
716#ifndef __ASSEMBLY__
717void pdc_console_init(void); /* in pdc_console.c */
718void pdc_console_restart(void);
719
720void setup_pdc(void); /* in inventory.c */
721
722/* wrapper-functions from pdc.c */
723
724int pdc_add_valid(unsigned long address);
725int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
726int pdc_chassis_disp(unsigned long disp);
727int pdc_chassis_warn(unsigned long *warn);
728int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
729int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
730 void *iodc_data, unsigned int iodc_data_size);
731int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
732 struct pdc_module_path *mod_path, long mod_index);
733int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info,
734 long mod_index, long addr_index);
735int pdc_model_info(struct pdc_model *model);
736int pdc_model_sysmodel(char *name);
737int pdc_model_cpuid(unsigned long *cpu_id);
738int pdc_model_versions(unsigned long *versions, int id);
739int pdc_model_capabilities(unsigned long *capabilities);
740int pdc_cache_info(struct pdc_cache_info *cache);
741int pdc_spaceid_bits(unsigned long *space_bits);
742#ifndef CONFIG_PA20
743int pdc_btlb_info(struct pdc_btlb_info *btlb);
744int pdc_mem_map_hpa(struct pdc_memory_map *r_addr, struct pdc_module_path *mod_path);
745#endif /* !CONFIG_PA20 */
746int pdc_lan_station_id(char *lan_addr, unsigned long net_hpa);
747
748int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count);
749int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count);
750int pdc_stable_get_size(unsigned long *size);
751int pdc_stable_verify_contents(void);
752int pdc_stable_initialize(void);
753
754int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa);
755int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl);
756
757int pdc_get_initiator(struct hardware_path *, struct pdc_initiator *);
758int pdc_tod_read(struct pdc_tod *tod);
759int pdc_tod_set(unsigned long sec, unsigned long usec);
760
761#ifdef CONFIG_64BIT
762int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr,
763 struct pdc_memory_table *tbl, unsigned long entries);
764#endif
765
766void set_firmware_width(void);
767int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
768int pdc_do_reset(void);
769int pdc_soft_power_info(unsigned long *power_reg);
770int pdc_soft_power_button(int sw_control);
771void pdc_io_reset(void);
772void pdc_io_reset_devices(void);
773int pdc_iodc_getc(void);
774void pdc_iodc_putc(unsigned char c);
775void pdc_iodc_outc(unsigned char c);
776void pdc_printf(const char *fmt, ...);
777
778void pdc_emergency_unlock(void);
779int pdc_sti_call(unsigned long func, unsigned long flags,
780 unsigned long inptr, unsigned long outputr,
781 unsigned long glob_cfg);
782
783static inline char * os_id_to_string(u16 os_id) {
784 switch(os_id) {
785 case OS_ID_NONE: return "No OS";
786 case OS_ID_HPUX: return "HP-UX";
787 case OS_ID_MPEXL: return "MPE-iX";
788 case OS_ID_OSF: return "OSF";
789 case OS_ID_HPRT: return "HP-RT";
790 case OS_ID_NOVEL: return "Novell Netware";
791 case OS_ID_LINUX: return "Linux";
792 default: return "Unknown";
793 }
794}
795# endif /* __ASSEMBLY__ */
796#endif /* __KERNEL__ */
797 758
798#endif /* _PARISC_PDC_H */ 759#endif /* _PARISC_PDC_H */