diff -urN v2.4.6/include/asm-alpha/skbuff.h linux-skbhacks1/include/asm-alpha/skbuff.h --- v2.4.6/include/asm-alpha/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-alpha/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-arm/skbuff.h linux-skbhacks1/include/asm-arm/skbuff.h --- v2.4.6/include/asm-arm/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-arm/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-cris/skbuff.h linux-skbhacks1/include/asm-cris/skbuff.h --- v2.4.6/include/asm-cris/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-cris/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-generic/skbuff.h linux-skbhacks1/include/asm-generic/skbuff.h --- v2.4.6/include/asm-generic/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-generic/skbuff.h Sun Jul 15 10:54:15 2001 @@ -0,0 +1,16 @@ +#ifndef ASM_GENERIC__SKBUF_H +#define ASM_GENERIC__SKBUF_H + +#define arch_skb_under_check(skb, len) \ + do {\ + if(skb->datahead)\ + skb_under_panic(skb, len, current_text_addr());\ + } while(0) + +#define arch_skb_over_check(skb, len) \ + do {\ + if(skb->tail>skb->end)\ + skb_over_panic(skb, len, current_text_addr());\ + } while(0) + +#endif /*ASM_GENERIC__SKBUF_H*/ diff -urN v2.4.6/include/asm-i386/skbuff.h linux-skbhacks1/include/asm-i386/skbuff.h --- v2.4.6/include/asm-i386/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-i386/skbuff.h Sun Jul 15 21:58:01 2001 @@ -0,0 +1,24 @@ +#ifndef ASM_I386__SKBUF_H +#define ASM_I386__SKBUF_H + +#define __arch_skb_check(insn, left, right, skb, why, len) \ + __asm__ __volatile__( \ + " cmpl %1,%0\n" \ + "1: " insn " 2f\n" \ + ".section .text.lock,\"ax\"\n" \ + "2: pushl 1b\n" \ + " pushl %3\n" \ + " pushl %2\n" \ + " call skb_" why "_panic\n" \ + " ud2a\n" \ + ".previous\n" \ + : : "r" (left), "rm" (right), "rmi" (skb), "rmi" (len) \ + : "cc" ) + +#define arch_skb_under_check(skb, len) \ + __arch_skb_check("jl", skb->data, skb->head, skb, "under", len) + +#define arch_skb_over_check(skb, len) \ + __arch_skb_check("jg", skb->tail, skb->end, skb, "over", len) + +#endif /*ASM_I386__SKBUF_H*/ diff -urN v2.4.6/include/asm-ia64/skbuff.h linux-skbhacks1/include/asm-ia64/skbuff.h --- v2.4.6/include/asm-ia64/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-ia64/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-m68k/skbuff.h linux-skbhacks1/include/asm-m68k/skbuff.h --- v2.4.6/include/asm-m68k/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-m68k/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-mips/skbuff.h linux-skbhacks1/include/asm-mips/skbuff.h --- v2.4.6/include/asm-mips/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-mips/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-mips64/skbuff.h linux-skbhacks1/include/asm-mips64/skbuff.h --- v2.4.6/include/asm-mips64/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-mips64/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-parisc/skbuff.h linux-skbhacks1/include/asm-parisc/skbuff.h --- v2.4.6/include/asm-parisc/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-parisc/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-ppc/skbuff.h linux-skbhacks1/include/asm-ppc/skbuff.h --- v2.4.6/include/asm-ppc/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-ppc/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-s390/skbuff.h linux-skbhacks1/include/asm-s390/skbuff.h --- v2.4.6/include/asm-s390/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-s390/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-s390x/skbuff.h linux-skbhacks1/include/asm-s390x/skbuff.h --- v2.4.6/include/asm-s390x/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-s390x/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-sh/skbuff.h linux-skbhacks1/include/asm-sh/skbuff.h --- v2.4.6/include/asm-sh/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-sh/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-sparc/skbuff.h linux-skbhacks1/include/asm-sparc/skbuff.h --- v2.4.6/include/asm-sparc/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-sparc/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/asm-sparc64/skbuff.h linux-skbhacks1/include/asm-sparc64/skbuff.h --- v2.4.6/include/asm-sparc64/skbuff.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/asm-sparc64/skbuff.h Sun Jul 15 10:12:37 2001 @@ -0,0 +1 @@ +#include diff -urN v2.4.6/include/linux/eeprom.h linux-skbhacks1/include/linux/eeprom.h --- v2.4.6/include/linux/eeprom.h Wed Dec 31 19:00:00 1969 +++ linux-skbhacks1/include/linux/eeprom.h Mon Jun 25 17:53:27 2001 @@ -0,0 +1,135 @@ +/* credit winbond-840.c + */ +struct eeprom_ops { + void (*set_cs)(void *ee); + void (*clear_cs)(void *ee); +}; + +#define EEPOL_EEDI 0x01 +#define EEPOL_EEDO 0x02 +#define EEPOL_EECLK 0x04 +#define EEPOL_EESEL 0x08 + +struct eeprom { + void *dev; + struct eeprom_ops *ops; + + long addr; + + unsigned ee_addr_bits; + + unsigned eesel; + unsigned eeclk; + unsigned eedo; + unsigned eedi; + unsigned polarity; + unsigned ee_state; + + spinlock_t *lock; + u32 *cache; +}; + + +u8 eeprom_readb(struct eeprom *ee, unsigned address); +void eeprom_read(struct eeprom *ee, unsigned address, u8 *bytes, + unsigned count); +void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data); +void eeprom_write(struct eeprom *ee, unsigned address, u8 *bytes, + unsigned count); + +/* The EEPROM commands include the alway-set leading bit. */ +enum EEPROM_Cmds { + EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6), +}; + +void setup_ee_mem_bitbanger(struct eeprom *ee, long memaddr, int eesel_bit, int eeclk_bit, int eedo_bit, int eedi_bit, unsigned polarity) +{ + ee->addr = memaddr; + ee->eesel = 1 << eesel_bit; + ee->eeclk = 1 << eeclk_bit; + ee->eedo = 1 << eedo_bit; + ee->eedi = 1 << eedi_bit; + + ee->polarity = polarity; + + *ee->cache = readl(ee->addr); +} + +/* foo. put this in a .c file */ +static inline void eeprom_update(struct eeprom *ee, u32 mask, int pol) +{ + long flags; + u32 data; + + spin_lock_irqsave(ee->lock, flags); + data = *ee->cache; + + data &= ~mask; + if (pol) + data |= mask; + + *ee->cache = data; +//printk("update: %08x\n", data); + writel(data, ee->addr); + spin_unlock_irqrestore(ee->lock, flags); +} + +void eeprom_clk_lo(struct eeprom *ee) +{ + int pol = !!(ee->polarity & EEPOL_EECLK); + + eeprom_update(ee, ee->eeclk, pol); + udelay(2); +} + +void eeprom_clk_hi(struct eeprom *ee) +{ + int pol = !!(ee->polarity & EEPOL_EECLK); + + eeprom_update(ee, ee->eeclk, !pol); + udelay(2); +} + +void eeprom_send_addr(struct eeprom *ee, unsigned address) +{ + int pol = !!(ee->polarity & EEPOL_EEDI); + unsigned i; + address |= 6 << 6; + + /* Shift the read command bits out. */ + for (i=0; i<11; i++) { + eeprom_update(ee, ee->eedi, ((address >> 10) & 1) ^ pol); + address <<= 1; + eeprom_clk_hi(ee); + eeprom_clk_lo(ee); + } + eeprom_update(ee, ee->eedi, pol); +} + +u16 eeprom_readw(struct eeprom *ee, unsigned address) +{ + unsigned i; + u16 res = 0; + + eeprom_clk_lo(ee); + eeprom_update(ee, ee->eesel, 1 ^ !!(ee->polarity & EEPOL_EESEL)); + eeprom_send_addr(ee, address); + + for (i=0; i<16; i++) { + u32 data; + eeprom_clk_hi(ee); + res <<= 1; + data = readl(ee->addr); +//printk("eeprom_readw: %08x\n", data); + res |= !!(data & ee->eedo) ^ !!(ee->polarity & EEPOL_EEDO); + eeprom_clk_lo(ee); + } + eeprom_update(ee, ee->eesel, 0 ^ !!(ee->polarity & EEPOL_EESEL)); + + return res; +} + + +void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data) +{ +} diff -urN v2.4.6/include/linux/skbuff.h linux-skbhacks1/include/linux/skbuff.h --- v2.4.6/include/linux/skbuff.h Tue Jul 3 18:43:04 2001 +++ linux-skbhacks1/include/linux/skbuff.h Sun Jul 15 10:56:16 2001 @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -787,9 +788,7 @@ SKB_LINEAR_ASSERT(skb); skb->tail+=len; skb->len+=len; - if(skb->tail>skb->end) { - skb_over_panic(skb, len, current_text_addr()); - } + arch_skb_over_check(skb, len); return tmp; } @@ -814,9 +813,7 @@ { skb->data-=len; skb->len+=len; - if(skb->datahead) { - skb_under_panic(skb, len, current_text_addr()); - } + arch_skb_under_check(skb, len); return skb->data; }