blob: 9f7256f02606f6d62249a4435a8b69a162800427 [file] [log] [blame]
/*
* (C) Copyright 2011
* Author : Mindspeed Technologes
*
* See file CREDITS for list of people who contributed to this
* project.
*
* 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.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
* */
#ifndef __PFE_DRIVER_H__
#define __PFE_DRIVER_H__
#include "hal.h"
#include "pfe/pfe.h"
#include "pfe/cbus.h"
#include "pfe/cbus/bmu.h"
typedef struct bufDesc {
u32 ctrl;
u32 status;
u32 data;
struct bufDesc *next;
}bufDesc_t;
#if defined(CONFIG_PLATFORM_PCI)
#define HIF_RX_DESC_NT 4
#define HIF_TX_DESC_NT 4
#else
#define HIF_RX_DESC_NT 64
#define HIF_TX_DESC_NT 64
#endif
#define RX_BD_BASEADDR (HIF_DESC_BASEADDR)
#define TX_BD_BASEADDR (HIF_DESC_BASEADDR + HIF_TX_DESC_SIZE)
#define MIN_PKT_SIZE 56
#define MAX_FRAME_SIZE 2048
typedef struct hif_header_s {
u8 port_no; //Carries input port no for host rx packets and output port no for tx pkts
u8 reserved0;
u32 reserved2;
} __attribute__((packed)) hif_header_t;
typedef struct rx_desc_s {
struct bufDesc *rxBase;
unsigned int rxBase_pa;
int rxToRead;
int rxRingSize;
}rx_desc_t;
typedef struct tx_desc_s {
struct bufDesc *txBase;
unsigned int txBase_pa;
int txToSend;
int txRingSize;
}tx_desc_t;
/* The set of statistics registers implemented in the Cadence MAC.
* The statistics registers implemented are a subset of all the statistics
* available, but contains all the compulsory ones.
*/
typedef struct gem_stats{
u32 octets_tx_bot; /* Lower 32-bits for number of octets tx'd */
u32 octets_tx_top; /* Upper 16-bits for number of octets tx'd */
u32 frames_tx; /* Number of frames transmitted OK */
u32 broadcast_tx; /* Number of broadcast frames transmitted */
u32 multicast_tx; /* Number of multicast frames transmitted */
u32 pause_tx; /* Number of pause frames transmitted. */
u32 frame64_tx; /* Number of 64byte frames transmitted */
u32 frame65_127_tx; /* Number of 65-127 byte frames transmitted */
u32 frame128_255_tx; /* Number of 128-255 byte frames transmitted */
u32 frame256_511_tx; /* Number of 256-511 byte frames transmitted */
u32 frame512_1023_tx; /* Number of 512-1023 byte frames transmitted */
u32 frame1024_1518_tx; /* Number of 1024-1518 byte frames transmitted*/
u32 frame1519_tx; /* Number of frames greater than 1518 bytes tx*/
u32 tx_urun; /* Transmit underrun errors due to DMA */
u32 single_col; /* Number of single collision frames */
u32 multi_col; /* Number of multi collision frames */
u32 excess_col; /* Number of excessive collision frames. */
u32 late_col; /* Collisions occuring after slot time */
u32 def_tx; /* Frames deferred due to crs */
u32 crs_errors; /* Errors caused by crs not being asserted. */
u32 octets_rx_bot; /* Lower 32-bits for number of octets rx'd */
u32 octets_rx_top; /* Upper 16-bits for number of octets rx'd */
u32 frames_rx; /* Number of frames received OK */
u32 broadcast_rx; /* Number of broadcast frames received */
u32 multicast_rx; /* Number of multicast frames received */
u32 pause_rx; /* Number of pause frames received. */
u32 frame64_rx; /* Number of 64byte frames received */
u32 frame65_127_rx; /* Number of 65-127 byte frames received */
u32 frame128_255_rx; /* Number of 128-255 byte frames received */
u32 frame256_511_rx; /* Number of 256-511 byte frames received */
u32 frame512_1023_rx; /* Number of 512-1023 byte frames received */
u32 frame1024_1518_rx; /* Number of 1024-1518 byte frames received*/
u32 frame1519_rx; /* Number of frames greater than 1518 bytes rx*/
u32 usize_frames; /* Frames received less than min of 64 bytes */
u32 excess_length; /* Number of excessive length frames rx */
u32 jabbers; /* Excessive length + crc or align errors. */
u32 fcs_errors; /* Number of frames received with crc errors */
u32 length_check_errors;/* Number of frames with incorrect length */
u32 rx_symbol_errors; /* Number of times rx_er asserted during rx */
u32 align_errors; /* Frames received without integer no. bytes */
u32 rx_res_errors; /* Number of times buffers ran out during rx */
u32 rx_orun; /* Receive overrun errors due to DMA */
u32 ip_cksum; /* IP header checksum errors */
u32 tcp_cksum; /* TCP checksum errors */
u32 udp_cksum; /* UDP checksum errors */
} volatile GEM_STATS;
int pfe_send(int phy_port, void *data, int length);
int pfe_recv(unsigned int *pkt_ptr, int *phy_port);
int pfe_tx_done(void);
void pfe_gem_enable_all(void);
void pfe_gemac_init(void *gemac_base, u32 mode, u32 speed, u32 duplex);
#endif