108 lines
3.4 KiB
C
108 lines
3.4 KiB
C
/******************************************************************************
|
|
* Copyright (c) 2007, 2011, 2013 IBM Corporation
|
|
* All rights reserved.
|
|
* This program and the accompanying materials
|
|
* are made available under the terms of the BSD License
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.opensource.org/licenses/bsd-license.php
|
|
*
|
|
* Contributors:
|
|
* IBM Corporation - initial implementation
|
|
*****************************************************************************/
|
|
/*
|
|
* Definitions for the e1000 Gigabit Ethernet Driver for SLOF
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <cache.h>
|
|
|
|
// compiler switches
|
|
|
|
// Debug switches
|
|
//#define E1K_DEBUG // main debug switch, w/o it the other ones don't work
|
|
//#define E1K_SHOW_RCV
|
|
//#define E1K_SHOW_RCV_DATA
|
|
//#define E1K_SHOW_XMIT
|
|
//#define E1K_SHOW_XMIT_DATA
|
|
|
|
/*
|
|
* pci register offsets
|
|
*/
|
|
// PCI command register
|
|
#define PCI_COM_R ((uint16_t) 0x0004)
|
|
// PCI Cache Line Size register
|
|
#define PCI_CACHELS_R ((uint16_t) 0x000c)
|
|
// PCI bar1 register
|
|
#define PCI_BAR1_R ((uint16_t) 0x0010)
|
|
// PCI bar2 register
|
|
#define PCI_BAR2_R ((uint16_t) 0x0014)
|
|
// PCI bar1 register
|
|
#define PCI_SUBID_R ((uint16_t) 0x002e)
|
|
|
|
/*
|
|
* e1000 register offsets
|
|
*/
|
|
// Device Control register
|
|
#define CTRL ((uint16_t) 0x0000)
|
|
// Device Status register
|
|
#define STATUS ((uint16_t) 0x0008)
|
|
// Eeprom Read register
|
|
#define EERD ((uint16_t) 0x0014)
|
|
// Interrupt Mask Clear register
|
|
#define IMC ((uint16_t) 0x00d8)
|
|
// Receive Control register
|
|
#define RCTL ((uint16_t) 0x0100)
|
|
// Receive Descriptor Base Address Low register
|
|
#define RDBAL ((uint16_t) 0x2800)
|
|
// Receive Descriptor Base Address High register
|
|
#define RDBAH ((uint16_t) 0x2804)
|
|
// Receive Descriptor Length register
|
|
#define RDLEN ((uint16_t) 0x2808)
|
|
// Receive Descriptor Head register
|
|
#define RDH ((uint16_t) 0x2810)
|
|
// Receive Descriptor Tail register
|
|
#define RDT ((uint16_t) 0x2818)
|
|
// Receive Delay Timer register
|
|
#define RDTR ((uint16_t) 0x2820)
|
|
// Transmit Control register
|
|
#define TCTL ((uint16_t) 0x0400)
|
|
// Transmit Descriptor Base Address Low register
|
|
#define TDBAL ((uint16_t) 0x3800)
|
|
// Transmit Descriptor Base Address High register
|
|
#define TDBAH ((uint16_t) 0x3804)
|
|
// Transmit Descriptor Length register
|
|
#define TDLEN ((uint16_t) 0x3808)
|
|
// Transmit Descriptor Head register
|
|
#define TDH ((uint16_t) 0x3810)
|
|
// Transmit Descriptor Tail register
|
|
#define TDT ((uint16_t) 0x3818)
|
|
// Receive Address Low register
|
|
#define RAL0 ((uint16_t) 0x5400)
|
|
// Receive Address High register
|
|
#define RAH0 ((uint16_t) 0x5404)
|
|
|
|
|
|
/*
|
|
* useful def's
|
|
*/
|
|
#define rd08(a) ci_read_8((uint32_t *)(a))
|
|
#define rd16(a) ci_read_16((uint32_t *)(a))
|
|
#define rd32(a) ci_read_32((uint32_t *)(a))
|
|
#define wr08(a,v) ci_write_8((uint32_t *)(a), (v))
|
|
#define wr16(a,v) ci_write_16((uint32_t *)(a), (v))
|
|
#define wr32(a,v) ci_write_32((uint32_t *)(a), (v))
|
|
//#define printk snk_kernel_interface->print
|
|
//#define ms_delay snk_kernel_interface->ms_delay
|
|
|
|
#define BIT08(bit) ((uint8_t) 0x1 << (bit))
|
|
#define BIT16(bit) ((uint16_t) 0x1 << (bit))
|
|
#define BIT32(bit) ((uint32_t) 0x1 << (bit))
|
|
|
|
//#define mb() asm volatile("sync" ::: "memory");
|
|
|
|
extern net_driver_t *e1k_open(uint64_t baseaddr);
|
|
extern void e1k_close(net_driver_t *driver);
|
|
extern int e1k_read(char *buf, int len);
|
|
extern int e1k_write(char *buf, int len);
|
|
extern int e1k_mac_setup(uint16_t vendor_id, uint16_t device_id,
|
|
uint64_t baseaddr, char *mac_addr);
|