home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-powerpc / machdep.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  9.1 KB  |  314 lines

  1. #ifndef _ASM_POWERPC_MACHDEP_H
  2. #define _ASM_POWERPC_MACHDEP_H
  3. #ifdef __KERNEL__
  4.  
  5. /*
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the License, or (at your option) any later version.
  10.  */
  11.  
  12. #include <linux/seq_file.h>
  13. #include <linux/init.h>
  14. #include <linux/dma-mapping.h>
  15.  
  16. #include <asm/setup.h>
  17.  
  18. /* We export this macro for external modules like Alsa to know if
  19.  * ppc_md.feature_call is implemented or not
  20.  */
  21. #define CONFIG_PPC_HAS_FEATURE_CALLS
  22.  
  23. struct pt_regs;
  24. struct pci_bus;    
  25. struct device_node;
  26. struct iommu_table;
  27. struct rtc_time;
  28. struct file;
  29. #ifdef CONFIG_KEXEC
  30. struct kimage;
  31. #endif
  32.  
  33. #ifdef CONFIG_SMP
  34. struct smp_ops_t {
  35.     void  (*message_pass)(int target, int msg);
  36.     int   (*probe)(void);
  37.     void  (*kick_cpu)(int nr);
  38.     void  (*setup_cpu)(int nr);
  39.     void  (*take_timebase)(void);
  40.     void  (*give_timebase)(void);
  41.     int   (*cpu_enable)(unsigned int nr);
  42.     int   (*cpu_disable)(void);
  43.     void  (*cpu_die)(unsigned int nr);
  44.     int   (*cpu_bootable)(unsigned int nr);
  45. };
  46. #endif
  47.  
  48. struct machdep_calls {
  49.     char        *name;
  50. #ifdef CONFIG_PPC64
  51.     void            (*hpte_invalidate)(unsigned long slot,
  52.                        unsigned long va,
  53.                        int psize,
  54.                        int local);
  55.     long        (*hpte_updatepp)(unsigned long slot, 
  56.                      unsigned long newpp, 
  57.                      unsigned long va,
  58.                      int pize,
  59.                      int local);
  60.     void            (*hpte_updateboltedpp)(unsigned long newpp, 
  61.                            unsigned long ea,
  62.                            int psize);
  63.     long        (*hpte_insert)(unsigned long hpte_group,
  64.                        unsigned long va,
  65.                        unsigned long prpn,
  66.                        unsigned long rflags,
  67.                        unsigned long vflags,
  68.                        int psize);
  69.     long        (*hpte_remove)(unsigned long hpte_group);
  70.     void        (*flush_hash_range)(unsigned long number, int local);
  71.  
  72.     /* special for kexec, to be called in real mode, linar mapping is
  73.      * destroyed as well */
  74.     void        (*hpte_clear_all)(void);
  75.  
  76.     void        (*tce_build)(struct iommu_table * tbl,
  77.                      long index,
  78.                      long npages,
  79.                      unsigned long uaddr,
  80.                      enum dma_data_direction direction);
  81.     void        (*tce_free)(struct iommu_table *tbl,
  82.                     long index,
  83.                     long npages);
  84.     void        (*tce_flush)(struct iommu_table *tbl);
  85.     void        (*iommu_dev_setup)(struct pci_dev *dev);
  86.     void        (*iommu_bus_setup)(struct pci_bus *bus);
  87.     void        (*irq_bus_setup)(struct pci_bus *bus);
  88. #endif /* CONFIG_PPC64 */
  89.  
  90.     int        (*probe)(void);
  91.     void        (*setup_arch)(void);
  92.     void        (*init_early)(void);
  93.     /* Optional, may be NULL. */
  94.     void        (*show_cpuinfo)(struct seq_file *m);
  95.     void        (*show_percpuinfo)(struct seq_file *m, int i);
  96.  
  97.     void        (*init_IRQ)(void);
  98.     int        (*get_irq)(struct pt_regs *);
  99. #ifdef CONFIG_KEXEC
  100.     void        (*kexec_cpu_down)(int crash_shutdown, int secondary);
  101. #endif
  102.  
  103.     /* PCI stuff */
  104.     /* Called after scanning the bus, before allocating resources */
  105.     void        (*pcibios_fixup)(void);
  106.     int        (*pci_probe_mode)(struct pci_bus *);
  107.  
  108.     void        (*restart)(char *cmd);
  109.     void        (*power_off)(void);
  110.     void        (*halt)(void);
  111.     void        (*panic)(char *str);
  112.     void        (*cpu_die)(void);
  113.  
  114.     long        (*time_init)(void); /* Optional, may be NULL */
  115.  
  116.     int        (*set_rtc_time)(struct rtc_time *);
  117.     void        (*get_rtc_time)(struct rtc_time *);
  118.     unsigned long    (*get_boot_time)(void);
  119.     unsigned char     (*rtc_read_val)(int addr);
  120.     void        (*rtc_write_val)(int addr, unsigned char val);
  121.  
  122.     void        (*calibrate_decr)(void);
  123.  
  124.     void        (*progress)(char *, unsigned short);
  125.  
  126.     /* Interface for platform error logging */
  127.     void         (*log_error)(char *buf, unsigned int err_type, int fatal);
  128.  
  129.     unsigned char     (*nvram_read_val)(int addr);
  130.     void        (*nvram_write_val)(int addr, unsigned char val);
  131.     ssize_t        (*nvram_write)(char *buf, size_t count, loff_t *index);
  132.     ssize_t        (*nvram_read)(char *buf, size_t count, loff_t *index);    
  133.     ssize_t        (*nvram_size)(void);        
  134.     void        (*nvram_sync)(void);
  135.  
  136.     /* Exception handlers */
  137.     int        (*system_reset_exception)(struct pt_regs *regs);
  138.     int         (*machine_check_exception)(struct pt_regs *regs);
  139.  
  140.     /* Motherboard/chipset features. This is a kind of general purpose
  141.      * hook used to control some machine specific features (like reset
  142.      * lines, chip power control, etc...).
  143.      */
  144.     long         (*feature_call)(unsigned int feature, ...);
  145.  
  146.     /* Check availability of legacy devices like i8042 */
  147.     int         (*check_legacy_ioport)(unsigned int baseport);
  148.  
  149.     /* Get legacy PCI/IDE interrupt mapping */ 
  150.     int        (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel);
  151.     
  152.     /* Get access protection for /dev/mem */
  153.     pgprot_t    (*phys_mem_access_prot)(struct file *file,
  154.                         unsigned long pfn,
  155.                         unsigned long size,
  156.                         pgprot_t vma_prot);
  157.  
  158.     /* Idle loop for this platform, leave empty for default idle loop */
  159.     void        (*idle_loop)(void);
  160.  
  161.     /*
  162.      * Function for waiting for work with reduced power in idle loop;
  163.      * called with interrupts disabled.
  164.      */
  165.     void        (*power_save)(void);
  166.  
  167.     /* Function to enable performance monitor counters for this
  168.        platform, called once per cpu. */
  169.     void        (*enable_pmcs)(void);
  170.  
  171.     /* Set DABR for this platform, leave empty for default implemenation */
  172.     int        (*set_dabr)(unsigned long dabr);
  173.  
  174. #ifdef CONFIG_PPC32    /* XXX for now */
  175.     /* A general init function, called by ppc_init in init/main.c.
  176.        May be NULL. */
  177.     void        (*init)(void);
  178.  
  179.     void        (*setup_io_mappings)(void);
  180.  
  181.     void        (*early_serial_map)(void);
  182.     void        (*kgdb_map_scc)(void);
  183.  
  184.     /*
  185.      * optional PCI "hooks"
  186.      */
  187.  
  188.     /* Called after PPC generic resource fixup to perform
  189.        machine specific fixups */
  190.     void (*pcibios_fixup_resources)(struct pci_dev *);
  191.  
  192.     /* Called for each PCI bus in the system when it's probed */
  193.     void (*pcibios_fixup_bus)(struct pci_bus *);
  194.  
  195.     /* Called when pci_enable_device() is called (initial=0) or
  196.      * when a device with no assigned resource is found (initial=1).
  197.      * Returns 0 to allow assignment/enabling of the device. */
  198.     int  (*pcibios_enable_device_hook)(struct pci_dev *, int initial);
  199.  
  200.     /* For interrupt routing */
  201.     unsigned char (*pci_swizzle)(struct pci_dev *, unsigned char *);
  202.     int (*pci_map_irq)(struct pci_dev *, unsigned char, unsigned char);
  203.  
  204.     /* Called in indirect_* to avoid touching devices */
  205.     int (*pci_exclude_device)(unsigned char, unsigned char);
  206.  
  207.     /* Called at then very end of pcibios_init() */
  208.     void (*pcibios_after_init)(void);
  209.  
  210. #endif /* CONFIG_PPC32 */
  211.  
  212.     /* Called to shutdown machine specific hardware not already controlled
  213.      * by other drivers.
  214.      */
  215.     void (*machine_shutdown)(void);
  216.  
  217. #ifdef CONFIG_KEXEC
  218.     /* Called to do the minimal shutdown needed to run a kexec'd kernel
  219.      * to run successfully.
  220.      * XXX Should we move this one out of kexec scope?
  221.      */
  222.     void (*machine_crash_shutdown)(struct pt_regs *regs);
  223.  
  224.     /* Called to do what every setup is needed on image and the
  225.      * reboot code buffer. Returns 0 on success.
  226.      * Provide your own (maybe dummy) implementation if your platform
  227.      * claims to support kexec.
  228.      */
  229.     int (*machine_kexec_prepare)(struct kimage *image);
  230.  
  231.     /* Called to handle any machine specific cleanup on image */
  232.     void (*machine_kexec_cleanup)(struct kimage *image);
  233.  
  234.     /* Called to perform the _real_ kexec.
  235.      * Do NOT allocate memory or fail here. We are past the point of
  236.      * no return.
  237.      */
  238.     void (*machine_kexec)(struct kimage *image);
  239. #endif /* CONFIG_KEXEC */
  240. };
  241.  
  242. extern void power4_idle(void);
  243. extern void ppc6xx_idle(void);
  244.  
  245. /*
  246.  * ppc_md contains a copy of the machine description structure for the
  247.  * current platform. machine_id contains the initial address where the
  248.  * description was found during boot.
  249.  */
  250. extern struct machdep_calls ppc_md;
  251. extern struct machdep_calls *machine_id;
  252.  
  253. #define __machine_desc __attribute__ ((__section__ (".machine.desc")))
  254.  
  255. #define define_machine(name)                    \
  256.     extern struct machdep_calls mach_##name;        \
  257.     EXPORT_SYMBOL(mach_##name);                \
  258.     struct machdep_calls mach_##name __machine_desc =
  259.  
  260. #define machine_is(name) \
  261.     ({ \
  262.         extern struct machdep_calls mach_##name \
  263.             __attribute__((weak));         \
  264.         machine_id == &mach_##name; \
  265.     })
  266.  
  267. extern void probe_machine(void);
  268.  
  269. extern char cmd_line[COMMAND_LINE_SIZE];
  270.  
  271. #ifdef CONFIG_PPC_PMAC
  272. /*
  273.  * Power macintoshes have either a CUDA, PMU or SMU controlling
  274.  * system reset, power, NVRAM, RTC.
  275.  */
  276. typedef enum sys_ctrler_kind {
  277.     SYS_CTRLER_UNKNOWN = 0,
  278.     SYS_CTRLER_CUDA = 1,
  279.     SYS_CTRLER_PMU = 2,
  280.     SYS_CTRLER_SMU = 3,
  281. } sys_ctrler_t;
  282. extern sys_ctrler_t sys_ctrler;
  283.  
  284. #endif /* CONFIG_PPC_PMAC */
  285.  
  286. extern void setup_pci_ptrs(void);
  287.  
  288. #ifdef CONFIG_SMP
  289. /* Poor default implementations */
  290. extern void __devinit smp_generic_give_timebase(void);
  291. extern void __devinit smp_generic_take_timebase(void);
  292. #endif /* CONFIG_SMP */
  293.  
  294.  
  295. /* Functions to produce codes on the leds.
  296.  * The SRC code should be unique for the message category and should
  297.  * be limited to the lower 24 bits (the upper 8 are set by these funcs),
  298.  * and (for boot & dump) should be sorted numerically in the order
  299.  * the events occur.
  300.  */
  301. /* Print a boot progress message. */
  302. void ppc64_boot_msg(unsigned int src, const char *msg);
  303. /* Print a termination message (print only -- does not stop the kernel) */
  304. void ppc64_terminate_msg(unsigned int src, const char *msg);
  305.  
  306. static inline void log_error(char *buf, unsigned int err_type, int fatal)
  307. {
  308.     if (ppc_md.log_error)
  309.         ppc_md.log_error(buf, err_type, fatal);
  310. }
  311.  
  312. #endif /* __KERNEL__ */
  313. #endif /* _ASM_POWERPC_MACHDEP_H */
  314.