/****************************************************************************** * 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 #include // 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);