/*
 * PPC440GX system library
 *
 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
 * Copyright (c) 2003, 2004 Zultys Technologies
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */
#ifdef __KERNEL__
#ifndef __PPC_SYSLIB_IBM440GX_COMMON_H
#define __PPC_SYSLIB_IBM440GX_COMMON_H

#ifndef __ASSEMBLY__

#include <linux/init.h>
#include <linux/seq_file.h>
#include <syslib/ibm44x_common.h>

/*
 * Please, refer to the Figure 14.1 in 440GX user manual
 *
 * if internal UART clock is used, ser_clk is ignored
 */
void ibm440gx_get_clocks(struct ibm44x_clocks*, unsigned int sys_clk,
	unsigned int ser_clk) __init;

/* common 440GX platform init */
void ibm440gx_platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
			    unsigned long r6, unsigned long r7) __init;

/* Enable L2 cache */
void ibm440gx_l2c_enable(void) __init;

/* Disable L2 cache */
void ibm440gx_l2c_disable(void) __init;

/* Enable/disable L2 cache for a particular chip revision */
void ibm440gx_l2c_setup(struct ibm44x_clocks*) __init;

/* Get Ethernet Group */
int ibm440gx_get_eth_grp(void) __init;

/* Set Ethernet Group */
void ibm440gx_set_eth_grp(int group) __init;

/* Enable TAH devices */
void ibm440gx_tah_enable(void) __init;

/* Add L2C info to /proc/cpuinfo */
int ibm440gx_show_cpuinfo(struct seq_file*);

#endif /* __ASSEMBLY__ */
#endif /* __PPC_SYSLIB_IBM440GX_COMMON_H */
#endif /* __KERNEL__ */
