Huge cleanup of debugging code. Also fixed a few warnings.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7935 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -23,31 +23,54 @@
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
#define TRACE(a...) dprintf("ipro1000: " a)
|
||||
#define ASSERT(a) if (a) ; else panic("ipro1000: ASSERT failed, " #a)
|
||||
|
||||
/* used by if_em.h */
|
||||
#define DEBUG_INIT 1
|
||||
#define DEBUG_IOCTL 1
|
||||
#define DEBUG_HW 1
|
||||
#define DEBUG_TRACE_STATS 1
|
||||
#define DBG_STATS 1
|
||||
/* Set these to 1 to enable debugging */
|
||||
#define DEBUG_DEVICE 0
|
||||
#define DEBUG_INIT 0
|
||||
#define DEBUG_IOCTL 0
|
||||
#define DEBUG_HW 0
|
||||
#define DEBUG_FUNC_CALLS 0
|
||||
#define DEBUG_DISPLAY_STATS 1
|
||||
|
||||
#define ASSERT(a) if (a) ; else panic("ipro1000: ASSERT failed, " #a)
|
||||
#define DEBUGFUNC(S) if (DEBUG_FUNC_CALLS) dprintf("ipro1000: " S "\n")
|
||||
#define DEVICE_DEBUGOUT(S) if (DEBUG_DEVICE) dprintf("ipro1000: " S "\n")
|
||||
#define DEVICE_DEBUGOUT1(S,A) if (DEBUG_DEVICE) dprintf("ipro1000: " S "\n", A)
|
||||
#define DEVICE_DEBUGOUT2(S,A,B) if (DEBUG_DEVICE) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define INIT_DEBUGOUT(S) if (DEBUG_INIT) dprintf("ipro1000: " S "\n")
|
||||
#define INIT_DEBUGOUT1(S,A) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A)
|
||||
#define INIT_DEBUGOUT2(S,A,B) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define INIT_DEBUGOUT3(S,A,B,C) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A, B, C)
|
||||
#define INIT_DEBUGOUT7(S,A,B,C,D,E,F,G) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A,B,C,D,E,F,G)
|
||||
#define IOCTL_DEBUGOUT(S) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n")
|
||||
#define IOCTL_DEBUGOUT1(S,A) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n", A)
|
||||
#define IOCTL_DEBUGOUT2(S,A,B) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define HW_DEBUGOUT(S) if (DEBUG_HW) dprintf("ipro1000: " S "\n")
|
||||
#define HW_DEBUGOUT1(S,A) if (DEBUG_HW) dprintf("ipro1000: " S "\n", A)
|
||||
#define HW_DEBUGOUT2(S,A,B) if (DEBUG_HW) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define HW_DEBUGOUT7(S,A,B,C,D,E,F,G) if (DEBUG_HW) dprintf("ipro1000: " S "\n", A,B,C,D,E,F,G)
|
||||
#else
|
||||
|
||||
#define TRACE(a...)
|
||||
#define DEBUG_DISPLAY_STATS 0
|
||||
#define DEBUGFUNC(S)
|
||||
#define DEVICE_DEBUGOUT(S)
|
||||
#define DEVICE_DEBUGOUT1(S,A)
|
||||
#define DEVICE_DEBUGOUT2(S,A,B)
|
||||
#define INIT_DEBUGOUT(S)
|
||||
#define INIT_DEBUGOUT1(S,A)
|
||||
#define INIT_DEBUGOUT2(S,A,B)
|
||||
#define INIT_DEBUGOUT3(S,A,B,C)
|
||||
#define INIT_DEBUGOUT7(S,A,B,C,D,E,F,G)
|
||||
#define IOCTL_DEBUGOUT(S)
|
||||
#define IOCTL_DEBUGOUT1(S,A)
|
||||
#define IOCTL_DEBUGOUT2(S,A,B)
|
||||
#define HW_DEBUGOUT(S)
|
||||
#define HW_DEBUGOUT1(S,A)
|
||||
#define HW_DEBUGOUT2(S,A,B)
|
||||
#define HW_DEBUGOUT7(S,A,B,C,D,E,F,G)
|
||||
#define ASSERT(a)
|
||||
|
||||
/* used by if_em.h */
|
||||
#define DEBUG_INIT 0
|
||||
#define DEBUG_IOCTL 0
|
||||
#define DEBUG_HW 0
|
||||
#define DEBUG_TRACE_STATS 0
|
||||
#undef DBG_STATS
|
||||
|
||||
#endif
|
||||
|
||||
#define ERROR(a...) dprintf("ipro1000: ERROR " a)
|
||||
#define PRINT(a...) dprintf("ipro1000: " a)
|
||||
#define ERROROUT(S) dprintf("ipro1000: ERROR " S "\n")
|
||||
#define ERROROUT1(S,A) dprintf("ipro1000: ERROR " S "\n", A)
|
||||
#define ERROROUT3(S,A,B,C) dprintf("ipro1000: ERROR " S "\n", A,B,C)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
#include <string.h>
|
||||
#include <driver_settings.h>
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
#include "debug.h"
|
||||
#include "device.h"
|
||||
#include "driver.h"
|
||||
@@ -72,14 +70,14 @@ ipro1000_open(const char *name, uint32 flags, void** cookie)
|
||||
int dev_id;
|
||||
int mask;
|
||||
|
||||
TRACE("ipro1000_open()\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_open()");
|
||||
|
||||
for (dev_id = 0; (deviceName = gDevNameList[dev_id]) != NULL; dev_id++) {
|
||||
if (!strcmp(name, deviceName))
|
||||
break;
|
||||
}
|
||||
if (deviceName == NULL) {
|
||||
ERROR("invalid device name");
|
||||
ERROROUT("invalid device name");
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
@@ -110,7 +108,7 @@ ipro1000_open(const char *name, uint32 flags, void** cookie)
|
||||
ipro1000_read_settings(device);
|
||||
|
||||
if (em_attach(device) != 0) {
|
||||
TRACE("em_attach failed\n");
|
||||
DEVICE_DEBUGOUT("em_attach failed");
|
||||
goto err;
|
||||
}
|
||||
|
||||
@@ -128,7 +126,7 @@ ipro1000_close(void* cookie)
|
||||
{
|
||||
ipro1000_device *device = (ipro1000_device *)cookie;
|
||||
struct ifnet *ifp = &device->adapter->interface_data.ac_if;
|
||||
TRACE("ipro1000_close()\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_close()");
|
||||
|
||||
device->closed = true;
|
||||
release_sem(ifp->if_rcv_sem);
|
||||
@@ -141,10 +139,10 @@ status_t
|
||||
ipro1000_free(void* cookie)
|
||||
{
|
||||
ipro1000_device *device = (ipro1000_device *)cookie;
|
||||
TRACE("ipro1000_free()\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_free()");
|
||||
|
||||
if (em_detach(device) != 0) {
|
||||
TRACE("em_detach failed\n");
|
||||
DEVICE_DEBUGOUT("em_detach failed");
|
||||
}
|
||||
|
||||
free(device);
|
||||
@@ -162,31 +160,31 @@ ipro1000_read(void* cookie, off_t position, void *buf, size_t* num_bytes)
|
||||
status_t stat;
|
||||
int len;
|
||||
|
||||
// TRACE("ipro1000_read() enter\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_read() enter");
|
||||
|
||||
if (device->closed) {
|
||||
TRACE("ipro1000_read() interrupted 1\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_read() interrupted 1");
|
||||
return B_INTERRUPTED;
|
||||
}
|
||||
retry:
|
||||
stat = acquire_sem_etc(ifp->if_rcv_sem, 1, B_CAN_INTERRUPT | (device->nonblocking ? B_TIMEOUT : 0), 0);
|
||||
if (device->closed) {
|
||||
// TRACE("ipro1000_read() interrupted 2\n"); // net_server will crash if we print this (race condition in net_server?)
|
||||
// DEVICE_DEBUGOUT("ipro1000_read() interrupted 2"); // net_server will crash if we print this (race condition in net_server?)
|
||||
return B_INTERRUPTED;
|
||||
}
|
||||
if (stat == B_WOULD_BLOCK) {
|
||||
TRACE("ipro1000_read() would block (OK 0 bytes)\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_read() would block (OK 0 bytes)");
|
||||
*num_bytes = 0;
|
||||
return B_OK;
|
||||
}
|
||||
if (stat != B_OK) {
|
||||
TRACE("ipro1000_read() error\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_read() error");
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
IF_DEQUEUE(&ifp->if_rcv, mb);
|
||||
if (!mb) {
|
||||
ERROR("ipro1000_read() mbuf not ready\n");
|
||||
ERROROUT("ipro1000_read() mbuf not ready");
|
||||
goto retry;
|
||||
}
|
||||
|
||||
@@ -201,7 +199,7 @@ retry:
|
||||
|
||||
m_freem(mb);
|
||||
|
||||
// TRACE("ipro1000_read() leave, %d bytes\n", len);
|
||||
// DEVICE_DEBUGOUT1("ipro1000_read() leave, %d bytes", len);
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@@ -214,7 +212,7 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
struct ifnet *ifp = &device->adapter->interface_data.ac_if;
|
||||
struct mbuf *mb;
|
||||
|
||||
// TRACE("ipro1000_write() enter\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() enter");
|
||||
|
||||
// allocate mbuf
|
||||
for (;;) {
|
||||
@@ -226,7 +224,7 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
return B_INTERRUPTED;
|
||||
}
|
||||
|
||||
// TRACE("ipro1000_write() 1\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() 1");
|
||||
|
||||
// allocate memory
|
||||
for (;;) {
|
||||
@@ -240,7 +238,7 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
}
|
||||
}
|
||||
|
||||
// TRACE("ipro1000_write() 2\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() 2");
|
||||
|
||||
// copy data
|
||||
mb->m_len = *num_bytes;
|
||||
@@ -248,12 +246,12 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
mb->m_len = MCLBYTES;
|
||||
memcpy(mtod(mb, uint8 *), buffer, mb->m_len);
|
||||
|
||||
// TRACE("ipro1000_write() 3\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() 3");
|
||||
|
||||
// add mbuf to send queue
|
||||
IF_APPEND(&ifp->if_snd, mb);
|
||||
|
||||
// TRACE("ipro1000_write() 4\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() 4");
|
||||
|
||||
// wait for output available
|
||||
while (ifp->if_flags & IFF_OACTIVE) {
|
||||
@@ -262,7 +260,7 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
return B_INTERRUPTED;
|
||||
}
|
||||
|
||||
// TRACE("ipro1000_write() 5\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() 5");
|
||||
|
||||
// send everything (if still required)
|
||||
if (ifp->if_snd.ifq_head != NULL)
|
||||
@@ -280,9 +278,9 @@ ipro1000_write(void* cookie, off_t position, const void* buffer, size_t* num_byt
|
||||
// t = system_time() - t;
|
||||
|
||||
// if (t > 20)
|
||||
// TRACE("write %Ld\n", t);
|
||||
// DEVICE_DEBUGOUT("write %Ld", t);
|
||||
|
||||
// TRACE("ipro1000_write() finished\n");
|
||||
// DEVICE_DEBUGOUT("ipro1000_write() finished");
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
@@ -295,47 +293,47 @@ ipro1000_control(void *cookie, uint32 op, void *arg, size_t len)
|
||||
|
||||
switch (op) {
|
||||
case ETHER_INIT:
|
||||
TRACE("ipro1000_control() ETHER_INIT\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_control() ETHER_INIT");
|
||||
return B_OK;
|
||||
|
||||
case ETHER_GETADDR:
|
||||
TRACE("ipro1000_control() ETHER_GETADDR\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_control() ETHER_GETADDR");
|
||||
memcpy(arg, &device->macaddr, sizeof(device->macaddr));
|
||||
return B_OK;
|
||||
|
||||
case ETHER_NONBLOCK:
|
||||
if (*(int32 *)arg) {
|
||||
TRACE("non blocking mode on\n");
|
||||
DEVICE_DEBUGOUT("non blocking mode on");
|
||||
device->nonblocking = true;
|
||||
} else {
|
||||
TRACE("non blocking mode off\n");
|
||||
DEVICE_DEBUGOUT("non blocking mode off");
|
||||
device->nonblocking = false;
|
||||
}
|
||||
return B_OK;
|
||||
|
||||
case ETHER_ADDMULTI:
|
||||
TRACE("ipro1000_control() ETHER_ADDMULTI not supported\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_control() ETHER_ADDMULTI not supported");
|
||||
break;
|
||||
|
||||
case ETHER_REMMULTI:
|
||||
TRACE("ipro1000_control() ETHER_REMMULTI not supported\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_control() ETHER_REMMULTI not supported");
|
||||
return B_OK;
|
||||
|
||||
case ETHER_SETPROMISC:
|
||||
if (*(int32 *)arg) {
|
||||
TRACE("promiscuous mode on not supported\n");
|
||||
DEVICE_DEBUGOUT("promiscuous mode on not supported");
|
||||
} else {
|
||||
TRACE("promiscuous mode off\n");
|
||||
DEVICE_DEBUGOUT("promiscuous mode off");
|
||||
}
|
||||
return B_OK;
|
||||
|
||||
case ETHER_GETFRAMESIZE:
|
||||
TRACE("ipro1000_control() ETHER_GETFRAMESIZE, framesize = %d (MTU = %d)\n", device->maxframesize, device->maxframesize - ENET_HEADER_SIZE);
|
||||
DEVICE_DEBUGOUT2("ipro1000_control() ETHER_GETFRAMESIZE, framesize = %d (MTU = %d)", device->maxframesize, device->maxframesize - ENET_HEADER_SIZE);
|
||||
*(uint32*)arg = device->maxframesize;
|
||||
return B_OK;
|
||||
|
||||
default:
|
||||
TRACE("ipro1000_control() Invalid command\n");
|
||||
DEVICE_DEBUGOUT("ipro1000_control() Invalid command");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
#include "debug.h"
|
||||
#include "timer.h"
|
||||
#include "device.h"
|
||||
@@ -87,7 +85,7 @@ init_hardware(void)
|
||||
status_t res;
|
||||
int i;
|
||||
|
||||
TRACE("init_hardware()\n");
|
||||
INIT_DEBUGOUT("init_hardware()");
|
||||
|
||||
if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci) < B_OK)
|
||||
return B_ERROR;
|
||||
@@ -115,9 +113,9 @@ init_driver(void)
|
||||
load_driver_symbols("ipro1000");
|
||||
#endif
|
||||
|
||||
dprintf(INFO1"\n");
|
||||
dprintf(INFO2"\n");
|
||||
dprintf(INFO3"\n");
|
||||
dprintf("ipro1000: " INFO1 "\n");
|
||||
dprintf("ipro1000: " INFO2 "\n");
|
||||
dprintf("ipro1000: " INFO3 "\n");
|
||||
|
||||
item = (pci_info *)malloc(sizeof(pci_info));
|
||||
if (!item)
|
||||
@@ -133,7 +131,7 @@ init_driver(void)
|
||||
if (info) {
|
||||
char name[64];
|
||||
sprintf(name, "net/ipro1000/%d", cards);
|
||||
PRINT("/dev/%s is a %s\n", name, info);
|
||||
dprintf("ipro1000: /dev/%s is a %s\n", name, info);
|
||||
gDevList[cards] = item;
|
||||
gDevNameList[cards] = strdup(name);
|
||||
gDevNameList[cards + 1] = NULL;
|
||||
@@ -145,8 +143,6 @@ init_driver(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("found %d cards\n", cards);
|
||||
|
||||
free(item);
|
||||
|
||||
@@ -154,12 +150,12 @@ init_driver(void)
|
||||
goto err_cards;
|
||||
|
||||
if (initialize_timer() != B_OK) {
|
||||
ERROR("timer init failed\n");
|
||||
ERROROUT("timer init failed");
|
||||
goto err_timer;
|
||||
}
|
||||
|
||||
if (mempool_init(cards * 768) != B_OK) {
|
||||
ERROR("mempool init failed\n");
|
||||
ERROROUT("mempool init failed");
|
||||
goto err_mempool;
|
||||
}
|
||||
|
||||
@@ -184,7 +180,7 @@ uninit_driver(void)
|
||||
{
|
||||
int32 i;
|
||||
|
||||
TRACE("uninit_driver()\n");
|
||||
INIT_DEBUGOUT("uninit_driver()");
|
||||
|
||||
terminate_timer();
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ ether_ifattach(struct ifnet *ifp, const uint8 *etheraddr)
|
||||
{
|
||||
ipro1000_device *dev = ifp->if_softc->dev;
|
||||
|
||||
TRACE("ether_ifattach\n");
|
||||
INIT_DEBUGOUT("ether_ifattach");
|
||||
|
||||
memcpy(dev->macaddr, etheraddr, 6);
|
||||
|
||||
@@ -103,15 +103,15 @@ ether_ifattach(struct ifnet *ifp, const uint8 *etheraddr)
|
||||
ifp->if_rcv_sem = create_sem(0, "ifp->if_rcv_sem");
|
||||
set_sem_owner(ifp->if_rcv_sem, B_SYSTEM_TEAM);
|
||||
|
||||
TRACE("calling if_init...\n");
|
||||
INIT_DEBUGOUT("calling if_init...");
|
||||
ifp->if_init(ifp->if_softc);
|
||||
TRACE("done calling if_init!\n");
|
||||
INIT_DEBUGOUT("done calling if_init!");
|
||||
}
|
||||
|
||||
void
|
||||
ether_ifdetach(struct ifnet *ifp)
|
||||
{
|
||||
TRACE("ether_ifdetach\n");
|
||||
INIT_DEBUGOUT("ether_ifdetach");
|
||||
|
||||
delete_sem(ifp->if_rcv_sem);
|
||||
}
|
||||
|
||||
@@ -33,15 +33,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/*$FreeBSD: /repoman/r/ncvs/src/sys/dev/em/if_em.c,v 1.2.2.19 2004/04/22 22:03:26 ru Exp $*/
|
||||
|
||||
#include "debug.h"
|
||||
#include "if_em.h"
|
||||
#include "util.h"
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* Set this to one to display debug statistics
|
||||
*********************************************************************/
|
||||
int em_display_debug_stats = DEBUG_TRACE_STATS;
|
||||
|
||||
/*********************************************************************
|
||||
* Function prototypes
|
||||
*********************************************************************/
|
||||
@@ -56,8 +52,8 @@ static int em_ioctl(struct ifnet *, u_long, caddr_t);
|
||||
static void em_watchdog(struct ifnet *);
|
||||
static void em_init(void *);
|
||||
static void em_stop(void *);
|
||||
static void em_media_status(struct ifnet *, struct ifmediareq *);
|
||||
static int em_media_change(struct ifnet *);
|
||||
//static void em_media_status(struct ifnet *, struct ifmediareq *);
|
||||
//static int em_media_change(struct ifnet *);
|
||||
static void em_identify_hardware(struct adapter *);
|
||||
static int em_allocate_pci_resources(struct adapter *);
|
||||
static void em_free_pci_resources(struct adapter *);
|
||||
@@ -100,12 +96,12 @@ static int em_82547_tx_fifo_reset(struct adapter *);
|
||||
static void em_82547_move_tail(void *arg);
|
||||
static void em_print_debug_info(struct adapter *);
|
||||
static int em_is_valid_ether_addr(u_int8_t *);
|
||||
static int em_sysctl_stats(SYSCTL_HANDLER_ARGS);
|
||||
static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
|
||||
//static int em_sysctl_stats(SYSCTL_HANDLER_ARGS);
|
||||
//static int em_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
|
||||
static u_int32_t em_fill_descriptors (u_int64_t address,
|
||||
u_int32_t length,
|
||||
PDESC_ARRAY desc_array);
|
||||
static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
|
||||
//static int em_sysctl_int_delay(SYSCTL_HANDLER_ARGS);
|
||||
static void em_add_int_delay_sysctl(struct adapter *, const char *,
|
||||
const char *, struct em_int_delay_info *,
|
||||
int, int);
|
||||
@@ -163,7 +159,7 @@ em_attach(device_t dev)
|
||||
|
||||
/* Allocate, clear, and link in our adapter structure */
|
||||
if (!(adapter = device_get_softc(dev))) {
|
||||
dprintf("ipro1000: adapter structure allocation failed\n");
|
||||
ERROROUT("adapter structure allocation failed");
|
||||
splx(s);
|
||||
return(ENOMEM);
|
||||
}
|
||||
@@ -452,7 +448,7 @@ em_detach(device_t dev)
|
||||
static int
|
||||
start_event_thread(struct adapter *adapter)
|
||||
{
|
||||
TRACE("start_event_thread enter\n");
|
||||
INIT_DEBUGOUT("start_event_thread enter");
|
||||
|
||||
adapter->event_thread = spawn_kernel_thread(event_handler, "ipro1000 event", 80, adapter);
|
||||
adapter->event_flags = 0;
|
||||
@@ -461,16 +457,16 @@ start_event_thread(struct adapter *adapter)
|
||||
|
||||
if (adapter->event_thread >= 0 && adapter->event_sem >= 0) {
|
||||
resume_thread(adapter->event_thread);
|
||||
TRACE("start_event_thread leave\n");
|
||||
INIT_DEBUGOUT("start_event_thread leave");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TRACE("start_event_thread failed\n");
|
||||
ERROROUT("start_event_thread failed");
|
||||
|
||||
delete_sem(adapter->event_sem);
|
||||
kill_thread(adapter->event_thread);
|
||||
|
||||
TRACE("start_event_thread leave\n");
|
||||
INIT_DEBUGOUT("start_event_thread leave");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -479,14 +475,14 @@ stop_event_thread(struct adapter *adapter)
|
||||
{
|
||||
status_t thread_return_value;
|
||||
|
||||
TRACE("stop_event_thread enter\n");
|
||||
INIT_DEBUGOUT("stop_event_thread enter");
|
||||
|
||||
delete_sem(adapter->event_sem);
|
||||
wait_for_thread(adapter->event_thread, &thread_return_value);
|
||||
adapter->event_thread = -1;
|
||||
adapter->event_sem = -1;
|
||||
|
||||
TRACE("stop_event_thread leave\n");
|
||||
INIT_DEBUGOUT("stop_event_thread leave");
|
||||
}
|
||||
|
||||
|
||||
@@ -617,7 +613,7 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%x)\n", (int)command);
|
||||
IOCTL_DEBUGOUT1("ioctl received: UNKNOWN (0x%x)", (int)command);
|
||||
error = EINVAL;
|
||||
}
|
||||
|
||||
@@ -808,7 +804,7 @@ event_handler(void *cookie)
|
||||
atomic_and(&adapter->event_flags, ~events); // and clear
|
||||
|
||||
if (events & EVENT_LINK_CHANGED) {
|
||||
TRACE("EVENT_LINK_CHANGED\n");
|
||||
INIT_DEBUGOUT("EVENT_LINK_CHANGED");
|
||||
untimeout(em_local_timer, adapter, adapter->timer_handle);
|
||||
adapter->hw.get_link_status = 1;
|
||||
em_check_for_link(&adapter->hw);
|
||||
@@ -820,7 +816,7 @@ event_handler(void *cookie)
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
/*********************************************************************
|
||||
*
|
||||
* Media Ioctl callback
|
||||
@@ -948,6 +944,7 @@ em_media_change(struct ifnet *ifp)
|
||||
|
||||
return(0);
|
||||
}
|
||||
#endif // #if 0
|
||||
|
||||
#define EM_FIFO_HDR 0x10
|
||||
#define EM_82547_PKT_THRESH 0x3e0
|
||||
@@ -1292,7 +1289,7 @@ em_set_multi(struct adapter * adapter)
|
||||
u_int8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
|
||||
struct ifmultiaddr *ifma;
|
||||
int mcnt = 0;
|
||||
struct ifnet *ifp = &adapter->interface_data.ac_if;
|
||||
// struct ifnet *ifp = &adapter->interface_data.ac_if;
|
||||
|
||||
IOCTL_DEBUGOUT("em_set_multi: begin");
|
||||
|
||||
@@ -1362,7 +1359,7 @@ em_local_timer(void *arg)
|
||||
em_check_for_link(&adapter->hw);
|
||||
em_print_link_status(adapter);
|
||||
em_update_stats_counters(adapter);
|
||||
if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
|
||||
if (DEBUG_DISPLAY_STATS && ifp->if_flags & IFF_RUNNING) {
|
||||
em_print_hw_stats(adapter);
|
||||
em_print_debug_info(adapter);
|
||||
}
|
||||
@@ -1842,7 +1839,7 @@ em_initialize_transmit_unit(struct adapter * adapter)
|
||||
E1000_WRITE_REG(&adapter->hw, TDT, 0);
|
||||
|
||||
|
||||
HW_DEBUGOUT2("Base = %lx, Length = %lx\n",
|
||||
HW_DEBUGOUT2("Base = %lx, Length = %lx",
|
||||
E1000_READ_REG(&adapter->hw, TDBAL),
|
||||
E1000_READ_REG(&adapter->hw, TDLEN));
|
||||
|
||||
@@ -2022,7 +2019,7 @@ em_clean_transmit_interrupts(struct adapter * adapter)
|
||||
return;
|
||||
|
||||
s = splimp();
|
||||
#ifdef DBG_STATS
|
||||
#if DEBUG_DISPLAY_STATS
|
||||
adapter->clean_tx_interrupts++;
|
||||
#endif
|
||||
num_avail = adapter->num_tx_desc_avail;
|
||||
@@ -2315,7 +2312,7 @@ em_process_receive_interrupts(struct adapter * adapter, int count)
|
||||
current_desc = &adapter->rx_desc_base[i];
|
||||
|
||||
if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
|
||||
#ifdef DBG_STATS
|
||||
#if DEBUG_DISPLAY_STATS
|
||||
adapter->no_pkts_avail++;
|
||||
#endif
|
||||
return;
|
||||
@@ -2762,7 +2759,7 @@ em_update_stats_counters(struct adapter *adapter)
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* This routine is called only when em_display_debug_stats is enabled.
|
||||
* This routine is called only when DEBUG_DISPLAY_STATS is enabled.
|
||||
* This routine provides a way to take a look at important statistics
|
||||
* maintained by the driver and hardware.
|
||||
*
|
||||
@@ -2770,6 +2767,7 @@ em_update_stats_counters(struct adapter *adapter)
|
||||
static void
|
||||
em_print_debug_info(struct adapter *adapter)
|
||||
{
|
||||
#if DEBUG_DISPLAY_STATS
|
||||
int unit = adapter->unit;
|
||||
uint8_t *hw_addr = adapter->hw.hw_addr;
|
||||
|
||||
@@ -2780,12 +2778,10 @@ em_print_debug_info(struct adapter *adapter)
|
||||
dprintf("ipro1000/%d:rx_int_delay = %ld, rx_abs_int_delay = %ld\n", unit,
|
||||
E1000_READ_REG(&adapter->hw, RDTR),
|
||||
E1000_READ_REG(&adapter->hw, RADV));
|
||||
#ifdef DBG_STATS
|
||||
dprintf("ipro1000/%d: Packets not Avail = %ld\n", unit,
|
||||
adapter->no_pkts_avail);
|
||||
dprintf("ipro1000/%d: CleanTxInterrupts = %ld\n", unit,
|
||||
adapter->clean_tx_interrupts);
|
||||
#endif
|
||||
snooze(10000); // give syslog reader some time to catchup
|
||||
dprintf("ipro1000/%d: fifo workaround = %Ld, fifo_reset = %Ld\n", unit,
|
||||
(long long)adapter->tx_fifo_wrk,
|
||||
@@ -2806,13 +2802,13 @@ em_print_debug_info(struct adapter *adapter)
|
||||
dprintf("ipro1000/%d: Driver dropped packets = %ld\n", unit,
|
||||
adapter->dropped_pkts);
|
||||
snooze(10000); // give syslog reader some time to catchup
|
||||
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
em_print_hw_stats(struct adapter *adapter)
|
||||
{
|
||||
#if DEBUG_DISPLAY_STATS
|
||||
int unit = adapter->unit;
|
||||
|
||||
dprintf("ipro1000/%d: Excessive collisions = %Ld\n", unit,
|
||||
@@ -2855,8 +2851,7 @@ em_print_hw_stats(struct adapter *adapter)
|
||||
(long long)adapter->stats.gprc);
|
||||
dprintf("ipro1000/%d: Good Packets Xmtd = %Ld\n", unit,
|
||||
(long long)adapter->stats.gptc);
|
||||
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
@@ -196,18 +196,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
#define PCI_ANY_ID (~0U)
|
||||
#define ETHER_ALIGN 2
|
||||
|
||||
/* Defines for printing debug information */
|
||||
|
||||
#define INIT_DEBUGOUT(S) if (DEBUG_INIT) dprintf("ipro1000: " S "\n")
|
||||
#define INIT_DEBUGOUT1(S, A) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A)
|
||||
#define INIT_DEBUGOUT2(S, A, B) if (DEBUG_INIT) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define IOCTL_DEBUGOUT(S) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n")
|
||||
#define IOCTL_DEBUGOUT1(S, A) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n", A)
|
||||
#define IOCTL_DEBUGOUT2(S, A, B) if (DEBUG_IOCTL) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define HW_DEBUGOUT(S) if (DEBUG_HW) dprintf("ipro1000: " S "\n")
|
||||
#define HW_DEBUGOUT1(S, A) if (DEBUG_HW) dprintf("ipro1000: " S "\n", A)
|
||||
#define HW_DEBUGOUT2(S, A, B) if (DEBUG_HW) dprintf("ipro1000: " S "\n", A, B)
|
||||
|
||||
|
||||
/* Supported RX Buffer Sizes */
|
||||
#define EM_RXBUFFER_2048 2048
|
||||
@@ -341,11 +329,11 @@ struct adapter {
|
||||
boolean_t pcix_82544;
|
||||
boolean_t in_detach;
|
||||
|
||||
#ifdef DBG_STATS
|
||||
#if DEBUG_DISPLAY_STATS
|
||||
unsigned long no_pkts_avail;
|
||||
unsigned long clean_tx_interrupts;
|
||||
|
||||
#endif
|
||||
|
||||
struct em_hw_stats stats;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
* Shared functions for accessing and configuring the MAC
|
||||
*/
|
||||
|
||||
#include "debug.h"
|
||||
#include "if_em_hw.h"
|
||||
|
||||
static int32_t em_set_phy_type(struct em_hw *hw);
|
||||
@@ -330,12 +331,12 @@ em_reset_hw(struct em_hw *hw)
|
||||
|
||||
/* For 82542 (rev 2.0), disable MWI before issuing a device reset */
|
||||
if(hw->mac_type == em_82542_rev2_0) {
|
||||
DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
|
||||
HW_DEBUGOUT("Disabling MWI on 82542 rev 2.0");
|
||||
em_pci_clear_mwi(hw);
|
||||
}
|
||||
|
||||
/* Clear interrupt mask to stop board from generating interrupts */
|
||||
DEBUGOUT("Masking off all interrupts\n");
|
||||
HW_DEBUGOUT("Masking off all interrupts");
|
||||
E1000_WRITE_REG(hw, IMC, 0xffffffff);
|
||||
|
||||
/* Disable the Transmit and Receive units. Then delay to allow
|
||||
@@ -367,7 +368,7 @@ em_reset_hw(struct em_hw *hw)
|
||||
* the current PCI configuration. The global reset bit is self-
|
||||
* clearing, and should clear within a microsecond.
|
||||
*/
|
||||
DEBUGOUT("Issuing a global reset to MAC\n");
|
||||
HW_DEBUGOUT("Issuing a global reset to MAC");
|
||||
|
||||
switch(hw->mac_type) {
|
||||
case em_82544:
|
||||
@@ -439,7 +440,7 @@ em_reset_hw(struct em_hw *hw)
|
||||
}
|
||||
|
||||
/* Clear interrupt mask to stop board from generating interrupts */
|
||||
DEBUGOUT("Masking off all interrupts\n");
|
||||
HW_DEBUGOUT("Masking off all interrupts");
|
||||
E1000_WRITE_REG(hw, IMC, 0xffffffff);
|
||||
|
||||
/* Clear any pending interrupt events. */
|
||||
@@ -480,7 +481,7 @@ em_init_hw(struct em_hw *hw)
|
||||
|
||||
/* Initialize Identification LED */
|
||||
if((ret_val = em_id_led_init(hw))) {
|
||||
DEBUGOUT("Error Initializing Identification LED\n");
|
||||
HW_DEBUGOUT("Error Initializing Identification LED");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
@@ -488,14 +489,14 @@ em_init_hw(struct em_hw *hw)
|
||||
em_set_media_type(hw);
|
||||
|
||||
/* Disabling VLAN filtering. */
|
||||
DEBUGOUT("Initializing the IEEE VLAN\n");
|
||||
HW_DEBUGOUT("Initializing the IEEE VLAN");
|
||||
E1000_WRITE_REG(hw, VET, 0);
|
||||
|
||||
em_clear_vfta(hw);
|
||||
|
||||
/* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
|
||||
if(hw->mac_type == em_82542_rev2_0) {
|
||||
DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
|
||||
HW_DEBUGOUT("Disabling MWI on 82542 rev 2.0");
|
||||
em_pci_clear_mwi(hw);
|
||||
E1000_WRITE_REG(hw, RCTL, E1000_RCTL_RST);
|
||||
E1000_WRITE_FLUSH(hw);
|
||||
@@ -517,7 +518,7 @@ em_init_hw(struct em_hw *hw)
|
||||
}
|
||||
|
||||
/* Zero out the Multicast HASH table */
|
||||
DEBUGOUT("Zeroing the MTA\n");
|
||||
HW_DEBUGOUT("Zeroing the MTA");
|
||||
for(i = 0; i < E1000_MC_TBL_SIZE; i++)
|
||||
E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
|
||||
|
||||
@@ -645,7 +646,7 @@ em_setup_link(struct em_hw *hw)
|
||||
* be initialized based on a value in the EEPROM.
|
||||
*/
|
||||
if(em_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
|
||||
@@ -671,7 +672,7 @@ em_setup_link(struct em_hw *hw)
|
||||
|
||||
hw->original_fc = hw->fc;
|
||||
|
||||
DEBUGOUT1("After fix-ups FlowControl is now = %x\n", hw->fc);
|
||||
HW_DEBUGOUT1("After fix-ups FlowControl is now = %x", hw->fc);
|
||||
|
||||
/* Take the 4 bits from EEPROM word 0x0F that determine the initial
|
||||
* polarity value for the SW controlled pins, and setup the
|
||||
@@ -696,7 +697,7 @@ em_setup_link(struct em_hw *hw)
|
||||
* control is disabled, because it does not hurt anything to
|
||||
* initialize these registers.
|
||||
*/
|
||||
DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
|
||||
HW_DEBUGOUT("Initializing the Flow Control address, type and timer regs");
|
||||
|
||||
E1000_WRITE_REG(hw, FCAL, FLOW_CONTROL_ADDRESS_LOW);
|
||||
E1000_WRITE_REG(hw, FCAH, FLOW_CONTROL_ADDRESS_HIGH);
|
||||
@@ -810,7 +811,7 @@ em_setup_fiber_serdes_link(struct em_hw *hw)
|
||||
txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
|
||||
break;
|
||||
default:
|
||||
DEBUGOUT("Flow control param set incorrectly\n");
|
||||
HW_DEBUGOUT("Flow control param set incorrectly");
|
||||
return -E1000_ERR_CONFIG;
|
||||
break;
|
||||
}
|
||||
@@ -821,7 +822,7 @@ em_setup_fiber_serdes_link(struct em_hw *hw)
|
||||
* link-up status bit will be set and the flow control enable bits (RFCE
|
||||
* and TFCE) will be set according to their negotiated value.
|
||||
*/
|
||||
DEBUGOUT("Auto-negotiation enabled\n");
|
||||
HW_DEBUGOUT("Auto-negotiation enabled");
|
||||
|
||||
E1000_WRITE_REG(hw, TXCW, txcw);
|
||||
E1000_WRITE_REG(hw, CTRL, ctrl);
|
||||
@@ -838,14 +839,14 @@ em_setup_fiber_serdes_link(struct em_hw *hw)
|
||||
*/
|
||||
if(hw->media_type == em_media_type_internal_serdes ||
|
||||
(E1000_READ_REG(hw, CTRL) & E1000_CTRL_SWDPIN1) == signal) {
|
||||
DEBUGOUT("Looking for Link\n");
|
||||
HW_DEBUGOUT("Looking for Link");
|
||||
for(i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
|
||||
msec_delay(10);
|
||||
status = E1000_READ_REG(hw, STATUS);
|
||||
if(status & E1000_STATUS_LU) break;
|
||||
}
|
||||
if(i == (LINK_UP_TIMEOUT / 10)) {
|
||||
DEBUGOUT("Never got a valid link from auto-neg!!!\n");
|
||||
HW_DEBUGOUT("Never got a valid link from auto-neg!!!");
|
||||
hw->autoneg_failed = 1;
|
||||
/* AutoNeg failed to achieve a link, so we'll call
|
||||
* em_check_for_link. This routine will force the link up if
|
||||
@@ -853,16 +854,16 @@ em_setup_fiber_serdes_link(struct em_hw *hw)
|
||||
* non-autonegotiating link partners.
|
||||
*/
|
||||
if((ret_val = em_check_for_link(hw))) {
|
||||
DEBUGOUT("Error while checking for link\n");
|
||||
HW_DEBUGOUT("Error while checking for link");
|
||||
return ret_val;
|
||||
}
|
||||
hw->autoneg_failed = 0;
|
||||
} else {
|
||||
hw->autoneg_failed = 0;
|
||||
DEBUGOUT("Valid Link Found\n");
|
||||
HW_DEBUGOUT("Valid Link Found");
|
||||
}
|
||||
} else {
|
||||
DEBUGOUT("No Signal Detected\n");
|
||||
HW_DEBUGOUT("No Signal Detected");
|
||||
}
|
||||
return E1000_SUCCESS;
|
||||
}
|
||||
@@ -900,10 +901,10 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
|
||||
/* Make sure we have a valid PHY */
|
||||
if((ret_val = em_detect_gig_phy(hw))) {
|
||||
DEBUGOUT("Error, did not detect valid phy.\n");
|
||||
HW_DEBUGOUT("Error, did not detect valid phy.");
|
||||
return ret_val;
|
||||
}
|
||||
DEBUGOUT1("Phy ID = %x \n", hw->phy_id);
|
||||
HW_DEBUGOUT1("Phy ID = %x ", hw->phy_id);
|
||||
|
||||
if(hw->mac_type <= em_82543 ||
|
||||
hw->mac_type == em_82541 || hw->mac_type == em_82547 ||
|
||||
@@ -914,7 +915,7 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
if (hw->phy_type == em_phy_igp) {
|
||||
|
||||
if((ret_val = em_phy_reset(hw))) {
|
||||
DEBUGOUT("Error Resetting the PHY\n");
|
||||
HW_DEBUGOUT("Error Resetting the PHY");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
@@ -929,7 +930,7 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
|
||||
/* disable lplu d3 during driver init */
|
||||
if((ret_val = em_set_d3_lplu_state(hw, FALSE))) {
|
||||
DEBUGOUT("Error Disabling LPLU D3\n");
|
||||
HW_DEBUGOUT("Error Disabling LPLU D3");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
@@ -1097,7 +1098,7 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
|
||||
/* SW Reset the PHY so all changes take effect */
|
||||
if((ret_val = em_phy_reset(hw))) {
|
||||
DEBUGOUT("Error Resetting the PHY\n");
|
||||
HW_DEBUGOUT("Error Resetting the PHY");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -1129,12 +1130,12 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
if(hw->autoneg_advertised == 0)
|
||||
hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
|
||||
|
||||
DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
|
||||
HW_DEBUGOUT("Reconfiguring auto-neg advertisement params");
|
||||
if((ret_val = em_phy_setup_autoneg(hw))) {
|
||||
DEBUGOUT("Error Setting up Auto-Negotiation\n");
|
||||
HW_DEBUGOUT("Error Setting up Auto-Negotiation");
|
||||
return ret_val;
|
||||
}
|
||||
DEBUGOUT("Restarting Auto-Neg\n");
|
||||
HW_DEBUGOUT("Restarting Auto-Neg");
|
||||
|
||||
/* Restart auto-negotiation by setting the Auto Neg Enable bit and
|
||||
* the Auto Neg Restart bit in the PHY control register.
|
||||
@@ -1151,15 +1152,15 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
*/
|
||||
if(hw->wait_autoneg_complete) {
|
||||
if((ret_val = em_wait_autoneg(hw))) {
|
||||
DEBUGOUT("Error while waiting for autoneg to complete\n");
|
||||
HW_DEBUGOUT("Error while waiting for autoneg to complete");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
hw->get_link_status = TRUE;
|
||||
} else {
|
||||
DEBUGOUT("Forcing speed and duplex\n");
|
||||
HW_DEBUGOUT("Forcing speed and duplex");
|
||||
if((ret_val = em_phy_force_speed_duplex(hw))) {
|
||||
DEBUGOUT("Error Forcing Speed and Duplex\n");
|
||||
HW_DEBUGOUT("Error Forcing Speed and Duplex");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -1187,29 +1188,29 @@ em_setup_copper_link(struct em_hw *hw)
|
||||
em_config_collision_dist(hw);
|
||||
} else {
|
||||
if((ret_val = em_config_mac_to_phy(hw))) {
|
||||
DEBUGOUT("Error configuring MAC to PHY settings\n");
|
||||
HW_DEBUGOUT("Error configuring MAC to PHY settings");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
if((ret_val = em_config_fc_after_link_up(hw))) {
|
||||
DEBUGOUT("Error Configuring Flow Control\n");
|
||||
HW_DEBUGOUT("Error Configuring Flow Control");
|
||||
return ret_val;
|
||||
}
|
||||
DEBUGOUT("Valid link established!!!\n");
|
||||
HW_DEBUGOUT("Valid link established!!!");
|
||||
|
||||
if(hw->phy_type == em_phy_igp) {
|
||||
if((ret_val = em_config_dsp_after_link_change(hw, TRUE))) {
|
||||
DEBUGOUT("Error Configuring DSP after link up\n");
|
||||
HW_DEBUGOUT("Error Configuring DSP after link up");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
DEBUGOUT("Valid link established!!!\n");
|
||||
HW_DEBUGOUT("Valid link established!!!");
|
||||
return E1000_SUCCESS;
|
||||
}
|
||||
usec_delay(10);
|
||||
}
|
||||
|
||||
DEBUGOUT("Unable to establish link!!!\n");
|
||||
HW_DEBUGOUT("Unable to establish link!!!");
|
||||
return E1000_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1250,40 +1251,40 @@ em_phy_setup_autoneg(struct em_hw *hw)
|
||||
mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
|
||||
mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
|
||||
|
||||
DEBUGOUT1("autoneg_advertised %x\n", hw->autoneg_advertised);
|
||||
HW_DEBUGOUT1("autoneg_advertised %x", hw->autoneg_advertised);
|
||||
|
||||
/* Do we want to advertise 10 Mb Half Duplex? */
|
||||
if(hw->autoneg_advertised & ADVERTISE_10_HALF) {
|
||||
DEBUGOUT("Advertise 10mb Half duplex\n");
|
||||
HW_DEBUGOUT("Advertise 10mb Half duplex");
|
||||
mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
|
||||
}
|
||||
|
||||
/* Do we want to advertise 10 Mb Full Duplex? */
|
||||
if(hw->autoneg_advertised & ADVERTISE_10_FULL) {
|
||||
DEBUGOUT("Advertise 10mb Full duplex\n");
|
||||
HW_DEBUGOUT("Advertise 10mb Full duplex");
|
||||
mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
|
||||
}
|
||||
|
||||
/* Do we want to advertise 100 Mb Half Duplex? */
|
||||
if(hw->autoneg_advertised & ADVERTISE_100_HALF) {
|
||||
DEBUGOUT("Advertise 100mb Half duplex\n");
|
||||
HW_DEBUGOUT("Advertise 100mb Half duplex");
|
||||
mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
|
||||
}
|
||||
|
||||
/* Do we want to advertise 100 Mb Full Duplex? */
|
||||
if(hw->autoneg_advertised & ADVERTISE_100_FULL) {
|
||||
DEBUGOUT("Advertise 100mb Full duplex\n");
|
||||
HW_DEBUGOUT("Advertise 100mb Full duplex");
|
||||
mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
|
||||
}
|
||||
|
||||
/* We do not allow the Phy to advertise 1000 Mb Half Duplex */
|
||||
if(hw->autoneg_advertised & ADVERTISE_1000_HALF) {
|
||||
DEBUGOUT("Advertise 1000mb Half duplex requested, request denied!\n");
|
||||
HW_DEBUGOUT("Advertise 1000mb Half duplex requested, request denied!");
|
||||
}
|
||||
|
||||
/* Do we want to advertise 1000 Mb Full Duplex? */
|
||||
if(hw->autoneg_advertised & ADVERTISE_1000_FULL) {
|
||||
DEBUGOUT("Advertise 1000mb Full duplex\n");
|
||||
HW_DEBUGOUT("Advertise 1000mb Full duplex");
|
||||
mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
|
||||
}
|
||||
|
||||
@@ -1336,7 +1337,7 @@ em_phy_setup_autoneg(struct em_hw *hw)
|
||||
mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
|
||||
break;
|
||||
default:
|
||||
DEBUGOUT("Flow control param set incorrectly\n");
|
||||
HW_DEBUGOUT("Flow control param set incorrectly");
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
|
||||
@@ -1344,7 +1345,7 @@ em_phy_setup_autoneg(struct em_hw *hw)
|
||||
mii_autoneg_adv_reg)))
|
||||
return ret_val;
|
||||
|
||||
DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
|
||||
HW_DEBUGOUT1("Auto-Neg Advertising %x", mii_autoneg_adv_reg);
|
||||
|
||||
if((ret_val = em_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg)))
|
||||
return ret_val;
|
||||
@@ -1372,7 +1373,7 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
/* Turn off Flow control if we are forcing speed and duplex. */
|
||||
hw->fc = em_fc_none;
|
||||
|
||||
DEBUGOUT1("hw->fc = %d\n", hw->fc);
|
||||
HW_DEBUGOUT1("hw->fc = %d", hw->fc);
|
||||
|
||||
/* Read the Device Control Register. */
|
||||
ctrl = E1000_READ_REG(hw, CTRL);
|
||||
@@ -1400,14 +1401,14 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
*/
|
||||
ctrl |= E1000_CTRL_FD;
|
||||
mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
|
||||
DEBUGOUT("Full Duplex\n");
|
||||
HW_DEBUGOUT("Full Duplex");
|
||||
} else {
|
||||
/* We want to force half duplex so we CLEAR the full duplex bits in
|
||||
* the Device and MII Control Registers.
|
||||
*/
|
||||
ctrl &= ~E1000_CTRL_FD;
|
||||
mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
|
||||
DEBUGOUT("Half Duplex\n");
|
||||
HW_DEBUGOUT("Half Duplex");
|
||||
}
|
||||
|
||||
/* Are we forcing 100Mbps??? */
|
||||
@@ -1417,13 +1418,13 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
ctrl |= E1000_CTRL_SPD_100;
|
||||
mii_ctrl_reg |= MII_CR_SPEED_100;
|
||||
mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
|
||||
DEBUGOUT("Forcing 100mb ");
|
||||
HW_DEBUGOUT("Forcing 100mb ");
|
||||
} else {
|
||||
/* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
|
||||
ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
|
||||
mii_ctrl_reg |= MII_CR_SPEED_10;
|
||||
mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
|
||||
DEBUGOUT("Forcing 10mb ");
|
||||
HW_DEBUGOUT("Forcing 10mb ");
|
||||
}
|
||||
|
||||
em_config_collision_dist(hw);
|
||||
@@ -1444,7 +1445,7 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
phy_data)))
|
||||
return ret_val;
|
||||
|
||||
DEBUGOUT1("M88E1000 PSCR: %x \n", phy_data);
|
||||
HW_DEBUGOUT1("M88E1000 PSCR: %x", phy_data);
|
||||
|
||||
/* Need to reset the PHY or these changes will be ignored */
|
||||
mii_ctrl_reg |= MII_CR_RESET;
|
||||
@@ -1479,7 +1480,7 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
*/
|
||||
if(hw->wait_autoneg_complete) {
|
||||
/* We will wait for autoneg to complete. */
|
||||
DEBUGOUT("Waiting for forced speed/duplex link.\n");
|
||||
HW_DEBUGOUT("Waiting for forced speed/duplex link.");
|
||||
mii_status_reg = 0;
|
||||
|
||||
/* We will wait for autoneg to complete or 4.5 seconds to expire. */
|
||||
@@ -1499,7 +1500,7 @@ em_phy_force_speed_duplex(struct em_hw *hw)
|
||||
if((i == 0) && (hw->phy_type == em_phy_m88)) {
|
||||
/* We didn't get link. Reset the DSP and wait again for link. */
|
||||
if((ret_val = em_phy_reset_dsp(hw))) {
|
||||
DEBUGOUT("Error Resetting PHY DSP\n");
|
||||
HW_DEBUGOUT("Error Resetting PHY DSP");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -1716,7 +1717,7 @@ em_force_mac_fc(struct em_hw *hw)
|
||||
ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
|
||||
break;
|
||||
default:
|
||||
DEBUGOUT("Flow control param set incorrectly\n");
|
||||
HW_DEBUGOUT("Flow control param set incorrectly");
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
|
||||
@@ -1759,7 +1760,7 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
((hw->media_type == em_media_type_internal_serdes) && (hw->autoneg_failed)) ||
|
||||
((hw->media_type == em_media_type_copper) && (!hw->autoneg))) {
|
||||
if((ret_val = em_force_mac_fc(hw))) {
|
||||
DEBUGOUT("Error forcing flow control settings\n");
|
||||
HW_DEBUGOUT("Error forcing flow control settings");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -1837,10 +1838,10 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
*/
|
||||
if(hw->original_fc == em_fc_full) {
|
||||
hw->fc = em_fc_full;
|
||||
DEBUGOUT("Flow Control = FULL.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = FULL.");
|
||||
} else {
|
||||
hw->fc = em_fc_rx_pause;
|
||||
DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = RX PAUSE frames only.");
|
||||
}
|
||||
}
|
||||
/* For receiving PAUSE frames ONLY.
|
||||
@@ -1856,7 +1857,7 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
|
||||
(mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
|
||||
hw->fc = em_fc_tx_pause;
|
||||
DEBUGOUT("Flow Control = TX PAUSE frames only.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = TX PAUSE frames only.");
|
||||
}
|
||||
/* For transmitting PAUSE frames ONLY.
|
||||
*
|
||||
@@ -1871,7 +1872,7 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
!(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
|
||||
(mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
|
||||
hw->fc = em_fc_rx_pause;
|
||||
DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = RX PAUSE frames only.");
|
||||
}
|
||||
/* Per the IEEE spec, at this point flow control should be
|
||||
* disabled. However, we want to consider that we could
|
||||
@@ -1897,10 +1898,10 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
hw->original_fc == em_fc_tx_pause) ||
|
||||
hw->fc_strict_ieee) {
|
||||
hw->fc = em_fc_none;
|
||||
DEBUGOUT("Flow Control = NONE.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = NONE.");
|
||||
} else {
|
||||
hw->fc = em_fc_rx_pause;
|
||||
DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
|
||||
HW_DEBUGOUT("Flow Control = RX PAUSE frames only.");
|
||||
}
|
||||
|
||||
/* Now we need to do one last check... If we auto-
|
||||
@@ -1908,7 +1909,7 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
* enabled per IEEE 802.3 spec.
|
||||
*/
|
||||
if((ret_val = em_get_speed_and_duplex(hw, &speed, &duplex))) {
|
||||
DEBUGOUT("Error getting link speed and duplex\n");
|
||||
HW_DEBUGOUT("Error getting link speed and duplex");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
@@ -1919,11 +1920,11 @@ em_config_fc_after_link_up(struct em_hw *hw)
|
||||
* controller to use the correct flow control settings.
|
||||
*/
|
||||
if((ret_val = em_force_mac_fc(hw))) {
|
||||
DEBUGOUT("Error forcing flow control settings\n");
|
||||
HW_DEBUGOUT("Error forcing flow control settings");
|
||||
return ret_val;
|
||||
}
|
||||
} else {
|
||||
DEBUGOUT("Copper PHY and Auto Neg has not completed.\r\n");
|
||||
HW_DEBUGOUT("Copper PHY and Auto Neg has not completed.");
|
||||
}
|
||||
}
|
||||
return E1000_SUCCESS;
|
||||
@@ -2009,7 +2010,7 @@ em_check_for_link(struct em_hw *hw)
|
||||
em_config_collision_dist(hw);
|
||||
else {
|
||||
if((ret_val = em_config_mac_to_phy(hw))) {
|
||||
DEBUGOUT("Error configuring MAC to PHY settings\n");
|
||||
HW_DEBUGOUT("Error configuring MAC to PHY settings");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -2019,7 +2020,7 @@ em_check_for_link(struct em_hw *hw)
|
||||
* have had to re-autoneg with a different link partner.
|
||||
*/
|
||||
if((ret_val = em_config_fc_after_link_up(hw))) {
|
||||
DEBUGOUT("Error configuring flow control\n");
|
||||
HW_DEBUGOUT("Error configuring flow control");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
@@ -2075,7 +2076,7 @@ em_check_for_link(struct em_hw *hw)
|
||||
hw->autoneg_failed = 1;
|
||||
return 0;
|
||||
}
|
||||
DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\r\n");
|
||||
HW_DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.");
|
||||
|
||||
/* Disable auto-negotiation in the TXCW register */
|
||||
E1000_WRITE_REG(hw, TXCW, (hw->txcw & ~E1000_TXCW_ANE));
|
||||
@@ -2087,7 +2088,7 @@ em_check_for_link(struct em_hw *hw)
|
||||
|
||||
/* Configure Flow Control after forcing link up. */
|
||||
if((ret_val = em_config_fc_after_link_up(hw))) {
|
||||
DEBUGOUT("Error configuring flow control\n");
|
||||
HW_DEBUGOUT("Error configuring flow control");
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
@@ -2100,7 +2101,7 @@ em_check_for_link(struct em_hw *hw)
|
||||
(hw->media_type == em_media_type_internal_serdes)) &&
|
||||
(ctrl & E1000_CTRL_SLU) &&
|
||||
(rxcw & E1000_RXCW_C)) {
|
||||
DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\r\n");
|
||||
HW_DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.");
|
||||
E1000_WRITE_REG(hw, TXCW, hw->txcw);
|
||||
E1000_WRITE_REG(hw, CTRL, (ctrl & ~E1000_CTRL_SLU));
|
||||
|
||||
@@ -2116,11 +2117,11 @@ em_check_for_link(struct em_hw *hw)
|
||||
if(E1000_RXCW_SYNCH & E1000_READ_REG(hw, RXCW)) {
|
||||
if(!(rxcw & E1000_RXCW_IV)) {
|
||||
hw->serdes_link_down = FALSE;
|
||||
DEBUGOUT("SERDES: Link is up.\n");
|
||||
HW_DEBUGOUT("SERDES: Link is up.");
|
||||
}
|
||||
} else {
|
||||
hw->serdes_link_down = TRUE;
|
||||
DEBUGOUT("SERDES: Link is down.\n");
|
||||
HW_DEBUGOUT("SERDES: Link is down.");
|
||||
}
|
||||
}
|
||||
if((hw->media_type == em_media_type_internal_serdes) &&
|
||||
@@ -2152,24 +2153,24 @@ em_get_speed_and_duplex(struct em_hw *hw,
|
||||
status = E1000_READ_REG(hw, STATUS);
|
||||
if(status & E1000_STATUS_SPEED_1000) {
|
||||
*speed = SPEED_1000;
|
||||
DEBUGOUT("1000 Mbs, ");
|
||||
HW_DEBUGOUT("1000 Mbs");
|
||||
} else if(status & E1000_STATUS_SPEED_100) {
|
||||
*speed = SPEED_100;
|
||||
DEBUGOUT("100 Mbs, ");
|
||||
HW_DEBUGOUT("100 Mbs");
|
||||
} else {
|
||||
*speed = SPEED_10;
|
||||
DEBUGOUT("10 Mbs, ");
|
||||
HW_DEBUGOUT("10 Mbs");
|
||||
}
|
||||
|
||||
if(status & E1000_STATUS_FD) {
|
||||
*duplex = FULL_DUPLEX;
|
||||
DEBUGOUT("Full Duplex\r\n");
|
||||
HW_DEBUGOUT("Full Duplex");
|
||||
} else {
|
||||
*duplex = HALF_DUPLEX;
|
||||
DEBUGOUT(" Half Duplex\r\n");
|
||||
HW_DEBUGOUT("Half Duplex");
|
||||
}
|
||||
} else {
|
||||
DEBUGOUT("1000 Mbs, Full Duplex\r\n");
|
||||
HW_DEBUGOUT("1000 Mbs, Full Duplex");
|
||||
*speed = SPEED_1000;
|
||||
*duplex = FULL_DUPLEX;
|
||||
}
|
||||
@@ -2209,7 +2210,7 @@ em_wait_autoneg(struct em_hw *hw)
|
||||
uint16_t phy_data;
|
||||
|
||||
DEBUGFUNC("em_wait_autoneg");
|
||||
DEBUGOUT("Waiting for Auto-Neg to complete.\n");
|
||||
HW_DEBUGOUT("Waiting for Auto-Neg to complete.");
|
||||
|
||||
/* We will wait for autoneg to complete or 4.5 seconds to expire. */
|
||||
for(i = PHY_AUTO_NEG_TIME; i > 0; i--) {
|
||||
@@ -2406,7 +2407,7 @@ em_read_phy_reg_ex(struct em_hw *hw,
|
||||
DEBUGFUNC("em_read_phy_reg_ex");
|
||||
|
||||
if(reg_addr > MAX_PHY_REG_ADDRESS) {
|
||||
DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
|
||||
HW_DEBUGOUT1("PHY Address %d is out of range", reg_addr);
|
||||
return -E1000_ERR_PARAM;
|
||||
}
|
||||
|
||||
@@ -2428,11 +2429,11 @@ em_read_phy_reg_ex(struct em_hw *hw,
|
||||
if(mdic & E1000_MDIC_READY) break;
|
||||
}
|
||||
if(!(mdic & E1000_MDIC_READY)) {
|
||||
DEBUGOUT("MDI Read did not complete\n");
|
||||
HW_DEBUGOUT("MDI Read did not complete");
|
||||
return -E1000_ERR_PHY;
|
||||
}
|
||||
if(mdic & E1000_MDIC_ERROR) {
|
||||
DEBUGOUT("MDI Error\n");
|
||||
HW_DEBUGOUT("MDI Error");
|
||||
return -E1000_ERR_PHY;
|
||||
}
|
||||
*phy_data = (uint16_t) mdic;
|
||||
@@ -2509,7 +2510,7 @@ em_write_phy_reg_ex(struct em_hw *hw,
|
||||
DEBUGFUNC("em_write_phy_reg_ex");
|
||||
|
||||
if(reg_addr > MAX_PHY_REG_ADDRESS) {
|
||||
DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
|
||||
HW_DEBUGOUT1("PHY Address %d is out of range", reg_addr);
|
||||
return -E1000_ERR_PARAM;
|
||||
}
|
||||
|
||||
@@ -2532,7 +2533,7 @@ em_write_phy_reg_ex(struct em_hw *hw,
|
||||
if(mdic & E1000_MDIC_READY) break;
|
||||
}
|
||||
if(!(mdic & E1000_MDIC_READY)) {
|
||||
DEBUGOUT("MDI Write did not complete\n");
|
||||
HW_DEBUGOUT("MDI Write did not complete");
|
||||
return -E1000_ERR_PHY;
|
||||
}
|
||||
} else {
|
||||
@@ -2573,7 +2574,7 @@ em_phy_hw_reset(struct em_hw *hw)
|
||||
|
||||
DEBUGFUNC("em_phy_hw_reset");
|
||||
|
||||
DEBUGOUT("Resetting Phy...\n");
|
||||
HW_DEBUGOUT("Resetting Phy...");
|
||||
|
||||
if(hw->mac_type > em_82543) {
|
||||
/* Read the device control register and assert the E1000_CTRL_PHY_RST
|
||||
@@ -2689,16 +2690,16 @@ em_detect_gig_phy(struct em_hw *hw)
|
||||
if(hw->phy_id == IGP01E1000_I_PHY_ID) match = TRUE;
|
||||
break;
|
||||
default:
|
||||
DEBUGOUT1("Invalid MAC type %d\n", hw->mac_type);
|
||||
HW_DEBUGOUT1("Invalid MAC type %d", hw->mac_type);
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
phy_init_status = em_set_phy_type(hw);
|
||||
|
||||
if ((match) && (phy_init_status == E1000_SUCCESS)) {
|
||||
DEBUGOUT1("PHY ID 0x%X detected\n", hw->phy_id);
|
||||
HW_DEBUGOUT1("PHY ID 0x%X detected", hw->phy_id);
|
||||
return E1000_SUCCESS;
|
||||
}
|
||||
DEBUGOUT1("Invalid PHY ID 0x%X\n", hw->phy_id);
|
||||
HW_DEBUGOUT1("Invalid PHY ID 0x%X", hw->phy_id);
|
||||
return -E1000_ERR_PHY;
|
||||
}
|
||||
|
||||
@@ -2880,7 +2881,7 @@ em_phy_get_info(struct em_hw *hw,
|
||||
phy_info->remote_rx = em_1000t_rx_status_undefined;
|
||||
|
||||
if(hw->media_type != em_media_type_copper) {
|
||||
DEBUGOUT("PHY info is only valid for copper media\n");
|
||||
HW_DEBUGOUT("PHY info is only valid for copper media");
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
|
||||
@@ -2891,7 +2892,7 @@ em_phy_get_info(struct em_hw *hw,
|
||||
return ret_val;
|
||||
|
||||
if((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
|
||||
DEBUGOUT("PHY info is only valid if link is up\n");
|
||||
HW_DEBUGOUT("PHY info is only valid if link is up");
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
|
||||
@@ -2907,7 +2908,7 @@ em_validate_mdi_setting(struct em_hw *hw)
|
||||
DEBUGFUNC("em_validate_mdi_settings");
|
||||
|
||||
if(!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
|
||||
DEBUGOUT("Invalid MDI setting detected\n");
|
||||
HW_DEBUGOUT("Invalid MDI setting detected");
|
||||
hw->mdix = 1;
|
||||
return -E1000_ERR_CONFIG;
|
||||
}
|
||||
@@ -3198,7 +3199,7 @@ em_acquire_eeprom(struct em_hw *hw)
|
||||
if(!(eecd & E1000_EECD_GNT)) {
|
||||
eecd &= ~E1000_EECD_REQ;
|
||||
E1000_WRITE_REG(hw, EECD, eecd);
|
||||
DEBUGOUT("Could not acquire EEPROM grant\n");
|
||||
HW_DEBUGOUT("Could not acquire EEPROM grant");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
}
|
||||
@@ -3356,7 +3357,7 @@ em_spi_eeprom_ready(struct em_hw *hw)
|
||||
* only 0-5mSec on 5V devices)
|
||||
*/
|
||||
if(retry_count >= EEPROM_MAX_RETRY_SPI) {
|
||||
DEBUGOUT("SPI EEPROM Status error\n");
|
||||
HW_DEBUGOUT("SPI EEPROM Status error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
|
||||
@@ -3387,7 +3388,7 @@ em_read_eeprom(struct em_hw *hw,
|
||||
*/
|
||||
if((offset > eeprom->word_size) || (words > eeprom->word_size - offset) ||
|
||||
(words == 0)) {
|
||||
DEBUGOUT("\"words\" parameter out of bounds\n");
|
||||
HW_DEBUGOUT("\"words\" parameter out of bounds");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
|
||||
@@ -3463,7 +3464,7 @@ em_validate_eeprom_checksum(struct em_hw *hw)
|
||||
|
||||
for(i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
|
||||
if(em_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
checksum += eeprom_data;
|
||||
@@ -3472,7 +3473,7 @@ em_validate_eeprom_checksum(struct em_hw *hw)
|
||||
if(checksum == (uint16_t) EEPROM_SUM)
|
||||
return E1000_SUCCESS;
|
||||
else {
|
||||
DEBUGOUT("EEPROM Checksum Invalid\n");
|
||||
HW_DEBUGOUT("EEPROM Checksum Invalid");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
}
|
||||
@@ -3495,14 +3496,14 @@ em_update_eeprom_checksum(struct em_hw *hw)
|
||||
|
||||
for(i = 0; i < EEPROM_CHECKSUM_REG; i++) {
|
||||
if(em_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
checksum += eeprom_data;
|
||||
}
|
||||
checksum = (uint16_t) EEPROM_SUM - checksum;
|
||||
if(em_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
|
||||
DEBUGOUT("EEPROM Write Error\n");
|
||||
HW_DEBUGOUT("EEPROM Write Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
return E1000_SUCCESS;
|
||||
@@ -3535,7 +3536,7 @@ em_write_eeprom(struct em_hw *hw,
|
||||
*/
|
||||
if((offset > eeprom->word_size) || (words > eeprom->word_size - offset) ||
|
||||
(words == 0)) {
|
||||
DEBUGOUT("\"words\" parameter out of bounds\n");
|
||||
HW_DEBUGOUT("\"words\" parameter out of bounds");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
|
||||
@@ -3684,7 +3685,7 @@ em_write_eeprom_microwire(struct em_hw *hw,
|
||||
usec_delay(50);
|
||||
}
|
||||
if(i == 200) {
|
||||
DEBUGOUT("EEPROM Write did not complete\n");
|
||||
HW_DEBUGOUT("EEPROM Write did not complete");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
|
||||
@@ -3725,7 +3726,7 @@ em_read_part_num(struct em_hw *hw,
|
||||
|
||||
/* Get word 0 from EEPROM */
|
||||
if(em_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
/* Save word 0 in upper half of part_num */
|
||||
@@ -3733,7 +3734,7 @@ em_read_part_num(struct em_hw *hw,
|
||||
|
||||
/* Get word 1 from EEPROM */
|
||||
if(em_read_eeprom(hw, ++offset, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
/* Save word 1 in lower half of part_num */
|
||||
@@ -3759,7 +3760,7 @@ em_read_mac_addr(struct em_hw * hw)
|
||||
for(i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
|
||||
offset = i >> 1;
|
||||
if(em_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
hw->perm_mac_addr[i] = (uint8_t) (eeprom_data & 0x00FF);
|
||||
@@ -3791,12 +3792,12 @@ em_init_rx_addrs(struct em_hw *hw)
|
||||
DEBUGFUNC("em_init_rx_addrs");
|
||||
|
||||
/* Setup the receive address. */
|
||||
DEBUGOUT("Programming MAC Address into RAR[0]\n");
|
||||
HW_DEBUGOUT("Programming MAC Address into RAR[0]");
|
||||
|
||||
em_rar_set(hw, hw->mac_addr, 0);
|
||||
|
||||
/* Zero out the other 15 receive addresses. */
|
||||
DEBUGOUT("Clearing RAR[1-15]\n");
|
||||
HW_DEBUGOUT("Clearing RAR[1-15]");
|
||||
for(i = 1; i < E1000_RAR_ENTRIES; i++) {
|
||||
E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
|
||||
E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
|
||||
@@ -3833,22 +3834,22 @@ em_mc_addr_list_update(struct em_hw *hw,
|
||||
hw->num_mc_addrs = mc_addr_count;
|
||||
|
||||
/* Clear RAR[1-15] */
|
||||
DEBUGOUT(" Clearing RAR[1-15]\n");
|
||||
HW_DEBUGOUT(" Clearing RAR[1-15]");
|
||||
for(i = rar_used_count; i < E1000_RAR_ENTRIES; i++) {
|
||||
E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
|
||||
E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
|
||||
}
|
||||
|
||||
/* Clear the MTA */
|
||||
DEBUGOUT(" Clearing MTA\n");
|
||||
HW_DEBUGOUT(" Clearing MTA");
|
||||
for(i = 0; i < E1000_NUM_MTA_REGISTERS; i++) {
|
||||
E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
|
||||
}
|
||||
|
||||
/* Add the new addresses */
|
||||
for(i = 0; i < mc_addr_count; i++) {
|
||||
DEBUGOUT(" Adding the multicast addresses:\n");
|
||||
DEBUGOUT7(" MC Addr #%d =%.2X %.2X %.2X %.2X %.2X %.2X\n", i,
|
||||
HW_DEBUGOUT(" Adding the multicast addresses:");
|
||||
HW_DEBUGOUT7(" MC Addr #%d =%.2X %.2X %.2X %.2X %.2X %.2X", i,
|
||||
mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad)],
|
||||
mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 1],
|
||||
mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 2],
|
||||
@@ -3860,7 +3861,7 @@ em_mc_addr_list_update(struct em_hw *hw,
|
||||
mc_addr_list +
|
||||
(i * (ETH_LENGTH_OF_ADDRESS + pad)));
|
||||
|
||||
DEBUGOUT1(" Hash value = 0x%03X\n", hash_value);
|
||||
HW_DEBUGOUT1(" Hash value = 0x%03X", hash_value);
|
||||
|
||||
/* Place this multicast address in the RAR if there is room, *
|
||||
* else put it in the MTA
|
||||
@@ -3874,7 +3875,7 @@ em_mc_addr_list_update(struct em_hw *hw,
|
||||
em_mta_set(hw, hash_value);
|
||||
}
|
||||
}
|
||||
DEBUGOUT("MC Update Complete\n");
|
||||
HW_DEBUGOUT("MC Update Complete");
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -4048,7 +4049,7 @@ em_id_led_init(struct em_hw * hw)
|
||||
hw->ledctl_mode2 = hw->ledctl_default;
|
||||
|
||||
if(em_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
|
||||
DEBUGOUT("EEPROM Read Error\n");
|
||||
HW_DEBUGOUT("EEPROM Read Error");
|
||||
return -E1000_ERR_EEPROM;
|
||||
}
|
||||
if((eeprom_data== ID_LED_RESERVED_0000) ||
|
||||
@@ -4381,7 +4382,7 @@ em_reset_adaptive(struct em_hw *hw)
|
||||
hw->in_ifs_mode = FALSE;
|
||||
E1000_WRITE_REG(hw, AIT, 0);
|
||||
} else {
|
||||
DEBUGOUT("Not in Adaptive IFS mode!\n");
|
||||
HW_DEBUGOUT("Not in Adaptive IFS mode!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4418,7 +4419,7 @@ em_update_adaptive(struct em_hw *hw)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DEBUGOUT("Not in Adaptive IFS mode!\n");
|
||||
HW_DEBUGOUT("Not in Adaptive IFS mode!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4830,7 +4831,7 @@ em_config_dsp_after_link_change(struct em_hw *hw,
|
||||
|
||||
if(link_up) {
|
||||
if((ret_val = em_get_speed_and_duplex(hw, &speed, &duplex))) {
|
||||
DEBUGOUT("Error getting link speed and duplex\n");
|
||||
HW_DEBUGOUT("Error getting link speed and duplex");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ bus_alloc_resource(device_t dev, int type, int *rid, int d, int e, int f, int g)
|
||||
case SYS_RES_IOPORT:
|
||||
{
|
||||
uint32 v = pci_read_config(dev, *rid, 4) & PCI_address_io_mask;
|
||||
TRACE("bus_alloc_resource SYS_RES_IOPORT, reg 0x%x, adr %p\n", *rid, (void *)v);
|
||||
INIT_DEBUGOUT2("bus_alloc_resource SYS_RES_IOPORT, reg 0x%x, adr %p\n", *rid, (void *)v);
|
||||
return (struct resource *) v;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ bus_alloc_resource(device_t dev, int type, int *rid, int d, int e, int f, int g)
|
||||
uint32 v = pci_read_config(dev, *rid, 4) & PCI_address_memory_32_mask;
|
||||
uint32 size = 128 * 1024; // XXX get size from BAR
|
||||
void *virt;
|
||||
TRACE("bus_alloc_resource SYS_RES_MEMORY, reg 0x%x, adr %p\n", *rid, (void *)v);
|
||||
INIT_DEBUGOUT2("bus_alloc_resource SYS_RES_MEMORY, reg 0x%x, adr %p\n", *rid, (void *)v);
|
||||
if (map_mem(&virt, (void *)v, size, 0, "SYS_RES_MEMORY") < 0)
|
||||
return 0;
|
||||
return (struct resource *) virt;
|
||||
@@ -96,14 +96,14 @@ bus_alloc_resource(device_t dev, int type, int *rid, int d, int e, int f, int g)
|
||||
{
|
||||
uint8 v = pci_read_config(dev, PCI_interrupt_line, 1);
|
||||
if (v == 0 || v == 0xff) {
|
||||
ERROR("bus_alloc_resource SYS_RES_IRQ: no irq\n");
|
||||
ERROROUT("bus_alloc_resource SYS_RES_IRQ: no irq");
|
||||
return 0;
|
||||
}
|
||||
return (struct resource *)(int)v;
|
||||
}
|
||||
|
||||
default:
|
||||
TRACE("bus_alloc_resource default!\n");
|
||||
INIT_DEBUGOUT("bus_alloc_resource default!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ bus_release_resource(device_t dev, int type, int reg, struct resource *res)
|
||||
return;
|
||||
|
||||
default:
|
||||
TRACE("bus_release_resource default!\n");
|
||||
INIT_DEBUGOUT("bus_release_resource default!\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,29 +42,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <string.h>
|
||||
#include "driver.h"
|
||||
#include "device.h"
|
||||
#include "debug.h"
|
||||
#include "timer.h"
|
||||
#include "debug.h"
|
||||
|
||||
#define usec_delay(x) snooze(x)
|
||||
#define msec_delay(x) snooze(1000*(x))
|
||||
|
||||
#define MSGOUT(S, A, B) dprintf("ipro1000: " S "\n", A, B)
|
||||
#define DEBUGFUNC(F) DEBUGOUT(F);
|
||||
|
||||
#if DEBUG_HW
|
||||
#define DEBUGOUT(S) dprintf("ipro1000: " S "\n")
|
||||
#define DEBUGOUT1(S,A) dprintf("ipro1000: " S "\n",A)
|
||||
#define DEBUGOUT2(S,A,B) dprintf("ipro1000: " S "\n",A,B)
|
||||
#define DEBUGOUT3(S,A,B,C) dprintf("ipro1000: " S "\n",A,B,C)
|
||||
#define DEBUGOUT7(S,A,B,C,D,E,F,G) dprintf("ipro1000: " S "\n",A,B,C,D,E,F,G)
|
||||
#else
|
||||
#define DEBUGOUT(S)
|
||||
#define DEBUGOUT1(S,A)
|
||||
#define DEBUGOUT2(S,A,B)
|
||||
#define DEBUGOUT3(S,A,B,C)
|
||||
#define DEBUGOUT7(S,A,B,C,D,E,F,G)
|
||||
#endif
|
||||
|
||||
// no longer used in FreeBSD
|
||||
#define splx(s)
|
||||
#define splimp() 0
|
||||
@@ -144,7 +127,7 @@ static inline unsigned long vtophys(unsigned long virtual_addr)
|
||||
{
|
||||
physical_entry pe;
|
||||
if (get_memory_map((void *)virtual_addr, 2048, &pe, 1) < 0) {
|
||||
TRACE("get_memory_map failed for %p\n", (void *)virtual_addr);
|
||||
ERROROUT1("get_memory_map failed for %p\n", (void *)virtual_addr);
|
||||
return 0;
|
||||
}
|
||||
return (unsigned long) pe.address;
|
||||
|
||||
@@ -46,17 +46,17 @@ mempool_init(int count)
|
||||
|
||||
int i;
|
||||
|
||||
TRACE("chunk_size %d, mbuf_size %d\n", chunk_size, mbuf_size);
|
||||
TRACE("chunk_alloc_size %d, mbuf_alloc_size %d\n", chunk_alloc_size, mbuf_alloc_size);
|
||||
INIT_DEBUGOUT2("chunk_size %d, mbuf_size %d", chunk_size, mbuf_size);
|
||||
INIT_DEBUGOUT2("chunk_alloc_size %d, mbuf_alloc_size %d", chunk_alloc_size, mbuf_alloc_size);
|
||||
|
||||
chunk_pool = area_malloc(chunk_alloc_size);
|
||||
if (!chunk_pool) {
|
||||
ERROR("failed to allocate chunk storage of %d bytes\n", chunk_alloc_size);
|
||||
ERROROUT1("failed to allocate chunk storage of %d bytes\n", chunk_alloc_size);
|
||||
return -1;
|
||||
}
|
||||
mbuf_pool = area_malloc(mbuf_alloc_size);
|
||||
if (!mbuf_pool) {
|
||||
ERROR("failed to allocate mbuf storage of %d bytes\n", mbuf_alloc_size);
|
||||
ERROROUT1("failed to allocate mbuf storage of %d bytes\n", mbuf_alloc_size);
|
||||
area_free(chunk_pool);
|
||||
return -1;
|
||||
}
|
||||
@@ -69,7 +69,7 @@ mempool_init(int count)
|
||||
mbuf_pool_put(mbuf_base + i * mbuf_size);
|
||||
}
|
||||
|
||||
TRACE("mempool init success\n");
|
||||
INIT_DEBUGOUT("mempool init success");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
#ifndef __SETUP_H
|
||||
#define __SETUP_H
|
||||
|
||||
#define VERSION "0.2"
|
||||
#define VERSION "0.3"
|
||||
|
||||
#define INFO1 "ipro1000: Intel PRO/1000 Family Driver. Version " VERSION " Build " __DATE__ " "__TIME__
|
||||
#define INFO2 "ipro1000: Copyright (c) 2001-2003, Intel Corporation. All rights reserved."
|
||||
#define INFO3 "ipro1000: Copyright (c) 2004 Marcus Overhagen. All rights reserved."
|
||||
#define INFO1 "Intel PRO/1000 Family Driver. Version " VERSION " Build " __DATE__ " "__TIME__
|
||||
#define INFO2 "Copyright (c) 2001-2003, Intel Corporation. All rights reserved."
|
||||
#define INFO3 "Copyright (c) 2004 Marcus Overhagen. All rights reserved."
|
||||
|
||||
#endif
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
#include <OS.h>
|
||||
#include <string.h>
|
||||
|
||||
//#define DEBUG
|
||||
|
||||
#include "debug.h"
|
||||
#include "util.h"
|
||||
|
||||
@@ -33,20 +31,20 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, const char *name
|
||||
void *mapadr;
|
||||
area_id area;
|
||||
|
||||
TRACE("mapping physical address %p with %ld bytes for %s\n", phy, size, name);
|
||||
INIT_DEBUGOUT3("mapping physical address %p with %ld bytes for %s\n", phy, size, name);
|
||||
|
||||
offset = (uint32)phy & (B_PAGE_SIZE - 1);
|
||||
phyadr = (char *)phy - offset;
|
||||
size = ROUNDUP(size + offset, B_PAGE_SIZE);
|
||||
area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr);
|
||||
if (area < B_OK) {
|
||||
ERROR("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area));
|
||||
ERROROUT3("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area));
|
||||
return area;
|
||||
}
|
||||
|
||||
*virt = (char *)mapadr + offset;
|
||||
|
||||
TRACE("physical = %p, virtual = %p, offset = %ld, phyadr = %p, mapadr = %p, size = %ld, area = 0x%08lx\n",
|
||||
INIT_DEBUGOUT7("physical = %p, virtual = %p, offset = %ld, phyadr = %p, mapadr = %p, size = %ld, area = 0x%08lx\n",
|
||||
phy, *virt, offset, phyadr, mapadr, size, area);
|
||||
|
||||
return area;
|
||||
|
||||
Reference in New Issue
Block a user