Revision 22e1170310ec6afa41e0dc7ac9dfac735d82dcab authored by Stephen Hemminger on 12 July 2006, 22:23:48 UTC, committed by Jeff Garzik on 12 July 2006, 22:39:22 UTC
When the driver handles multiple packets per NAPI poll, it is
better to reload the receive ring, then tell the hardware. Otherwise,
under packet storm with flow control, the driver/hardware will degrade
down to one packet getting through per pause-exchange.

Likewise on transmit, don't wakeup until a little more than minimum
ring space is available.

Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
1 parent afa195d
Raw File
rtc.h
/* $Id: rtc.h,v 1.7 2002/11/04 07:32:09 starvik Exp $ */

#ifndef __RTC_H__
#define __RTC_H__



#ifdef CONFIG_ETRAX_DS1302
   /* Dallas DS1302 clock/calendar register numbers. */
#  define RTC_SECONDS      0
#  define RTC_MINUTES      1
#  define RTC_HOURS        2
#  define RTC_DAY_OF_MONTH 3
#  define RTC_MONTH        4
#  define RTC_WEEKDAY      5
#  define RTC_YEAR         6
#  define RTC_CONTROL      7

   /* Bits in CONTROL register. */
#  define RTC_CONTROL_WRITEPROTECT 	0x80
#  define RTC_TRICKLECHARGER 		8
  
  /* Bits in TRICKLECHARGER register TCS TCS TCS TCS DS DS RS RS. */
#  define RTC_TCR_PATTERN 	0xA0	/* 1010xxxx */
#  define RTC_TCR_1DIOD 	0x04	/* xxxx01xx */
#  define RTC_TCR_2DIOD 	0x08	/* xxxx10xx */
#  define RTC_TCR_DISABLED 	0x00	/* xxxxxx00 Disabled */
#  define RTC_TCR_2KOHM 	0x01	/* xxxxxx01 2KOhm */
#  define RTC_TCR_4KOHM 	0x02	/* xxxxxx10 4kOhm */
#  define RTC_TCR_8KOHM 	0x03	/* xxxxxx11 8kOhm */

#elif defined(CONFIG_ETRAX_PCF8563)
   /* I2C bus slave registers. */
#  define RTC_I2C_READ		0xa3
#  define RTC_I2C_WRITE		0xa2

   /* Phillips PCF8563 registers. */
#  define RTC_CONTROL1		0x00		/* Control/Status register 1. */
#  define RTC_CONTROL2		0x01		/* Control/Status register 2. */
#  define RTC_CLOCKOUT_FREQ	0x0d		/* CLKOUT frequency. */
#  define RTC_TIMER_CONTROL	0x0e		/* Timer control. */
#  define RTC_TIMER_CNTDOWN	0x0f		/* Timer countdown. */

   /* BCD encoded clock registers. */
#  define RTC_SECONDS		0x02
#  define RTC_MINUTES		0x03
#  define RTC_HOURS		0x04
#  define RTC_DAY_OF_MONTH	0x05
#  define RTC_WEEKDAY		0x06	/* Not coded in BCD! */
#  define RTC_MONTH		0x07
#  define RTC_YEAR		0x08
#  define RTC_MINUTE_ALARM	0x09
#  define RTC_HOUR_ALARM	0x0a
#  define RTC_DAY_ALARM		0x0b
#  define RTC_WEEKDAY_ALARM 0x0c

#endif

#ifdef CONFIG_ETRAX_DS1302
extern unsigned char ds1302_readreg(int reg);
extern void ds1302_writereg(int reg, unsigned char val);
extern int ds1302_init(void);
#  define CMOS_READ(x) ds1302_readreg(x)
#  define CMOS_WRITE(val,reg) ds1302_writereg(reg,val)
#  define RTC_INIT() ds1302_init()
#elif defined(CONFIG_ETRAX_PCF8563)
extern unsigned char pcf8563_readreg(int reg);
extern void pcf8563_writereg(int reg, unsigned char val);
extern int pcf8563_init(void);
#  define CMOS_READ(x) pcf8563_readreg(x)
#  define CMOS_WRITE(val,reg) pcf8563_writereg(reg,val)
#  define RTC_INIT() pcf8563_init()
#else
  /* No RTC configured so we shouldn't try to access any. */
#  define CMOS_READ(x) 42
#  define CMOS_WRITE(x,y)
#  define RTC_INIT() (-1)
#endif

/*
 * The struct used to pass data via the following ioctl. Similar to the
 * struct tm in <time.h>, but it needs to be here so that the kernel 
 * source is self contained, allowing cross-compiles, etc. etc.
 */
struct rtc_time {
	int tm_sec;
	int tm_min;
	int tm_hour;
	int tm_mday;
	int tm_mon;
	int tm_year;
	int tm_wday;
	int tm_yday;
	int tm_isdst;
};

/* ioctl() calls that are permitted to the /dev/rtc interface. */
#define RTC_MAGIC 'p'
#define RTC_RD_TIME		_IOR(RTC_MAGIC, 0x09, struct rtc_time)	/* Read RTC time. */
#define RTC_SET_TIME		_IOW(RTC_MAGIC, 0x0a, struct rtc_time)	/* Set RTC time. */
#define RTC_SET_CHARGE  	_IOW(RTC_MAGIC, 0x0b, int) 		
#define RTC_VLOW_RD     _IOR(RTC_MAGIC, 0x11, int)  /* Voltage Low detector */
#define RTC_VLOW_SET    _IO(RTC_MAGIC, 0x12)        /* Clear voltage low information */
#define RTC_MAX_IOCTL 0x12

#endif /* __RTC_H__ */
back to top