115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek/*
215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * Generic library functions for the MSF (Media and Switch Fabric) unit
315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * found on the Intel IXP2400 network processor.
415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek *
515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * Copyright (C) 2004, 2005 Lennert Buytenhek <buytenh@wantstofly.org>
615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * Dedicated to Marija Kulikova.
715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek *
815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * This program is free software; you can redistribute it and/or modify
915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * it under the terms of the GNU Lesser General Public License as
1015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * published by the Free Software Foundation; either version 2.1 of the
1115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek * License, or (at your option) any later version.
1215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek */
1315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
1415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#ifndef __IXP2400_MSF_H
1515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define __IXP2400_MSF_H
1615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
1715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhekstruct ixp2400_msf_parameters
1815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek{
1915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	u32				rx_mode;
2015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			rxclk01_multiplier:2;
2115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			rxclk23_multiplier:2;
2215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			rx_poll_ports:6;
2315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	u32				rx_channel_mode[4];
2415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
2515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	u32				tx_mode;
2615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			txclk01_multiplier:2;
2715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			txclk23_multiplier:2;
2815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	unsigned			tx_poll_ports:6;
2915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek	u32				tx_channel_mode[4];
3015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek};
3115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
3215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhekvoid ixp2400_msf_init(struct ixp2400_msf_parameters *mp);
3315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
3415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PLL_MULTIPLIER_48		0x00
3515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PLL_MULTIPLIER_24		0x01
3615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PLL_MULTIPLIER_16		0x02
3715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PLL_MULTIPLIER_12		0x03
3815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
3915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CSIX			0x00400000
4015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_UTOPIA_POS		0x00000000
4115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_WIDTH_MASK		0x00300000
4215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_1x16_2x8		0x00300000
4315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_4x8			0x00200000
4415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_2x16			0x00100000
4515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_1x32			0x00000000
4615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY			0x00080000
4715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_SPHY			0x00000000
4815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_32			0x00040000
4915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_4			0x00000000
5015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_POLLED_STATUS	0x00020000
5115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_DIRECT_STATUS	0x00000000
5215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CBUS_FULL_DUPLEX	0x00010000
5315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CBUS_SIMPLEX		0x00000000
5415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_LEVEL2		0x00004000
5515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_MPHY_LEVEL3		0x00000000
5615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CBUS_8BIT		0x00002000
5715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CBUS_4BIT		0x00000000
5815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CSIX_SINGLE_FREELIST	0x00000200
5915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_CSIX_SPLIT_FREELISTS	0x00000000
6015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_RBUF_SIZE_MASK		0x0000000c
6115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_RBUF_SIZE_256		0x00000008
6215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_RBUF_SIZE_128		0x00000004
6315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_RX_MODE_RBUF_SIZE_64		0x00000000
6415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
6515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_SLAVE		0x00000040
6615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_MASTER		0x00000000
6715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_POS_PHY_L3		0x00000020
6815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_POS_PHY_L2		0x00000000
6915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_POS_PHY		0x00000010
7015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_UTOPIA		0x00000000
7115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_EVEN_PARITY	0x0000000c
7215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_ODD_PARITY		0x00000008
7315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_NO_PARITY		0x00000000
7415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_UTOPIA_BIG_CELLS	0x00000002
7515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_UTOPIA_NORMAL_CELLS	0x00000000
7615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_2_CYCLE_DECODE	0x00000001
7715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_RX_MODE_1_CYCLE_DECODE	0x00000000
7815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
7915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_CSIX			0x00400000
8015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_UTOPIA_POS		0x00000000
8115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_WIDTH_MASK		0x00300000
8215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_1x16_2x8		0x00300000
8315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_4x8			0x00200000
8415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_2x16			0x00100000
8515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_1x32			0x00000000
8615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY			0x00080000
8715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_SPHY			0x00000000
8815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_32			0x00040000
8915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_4			0x00000000
9015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_POLLED_STATUS	0x00020000
9115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_DIRECT_STATUS	0x00000000
9215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_CBUS_FULL_DUPLEX	0x00010000
9315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_CBUS_SIMPLEX		0x00000000
9415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_LEVEL2		0x00004000
9515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_MPHY_LEVEL3		0x00000000
9615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_CBUS_8BIT		0x00002000
9715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_CBUS_4BIT		0x00000000
9815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_TBUF_SIZE_MASK		0x0000000c
9915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_TBUF_SIZE_256		0x00000008
10015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_TBUF_SIZE_128		0x00000004
10115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_TX_MODE_TBUF_SIZE_64		0x00000000
10215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
10315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_SLAVE		0x00000040
10415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_MASTER		0x00000000
10515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_POS_PHY		0x00000010
10615d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_UTOPIA		0x00000000
10715d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_EVEN_PARITY	0x0000000c
10815d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_ODD_PARITY		0x00000008
10915d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_NO_PARITY		0x00000000
11015d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_UTOPIA_BIG_CELLS	0x00000002
11115d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_2_CYCLE_DECODE	0x00000001
11215d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#define IXP2400_PORT_TX_MODE_1_CYCLE_DECODE	0x00000000
11315d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
11415d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek
11515d014d13149aedd76cbff1b5c3bbfe839391457Lennert Buytenhek#endif
116