--- a/drivers/usb/net/usbnet.c	2005-06-14 20:44:17.000000000 -0700
+++ b/drivers/usb/net/usbnet.c	2005-06-29 13:02:01.000000000 -0700
@@ -1176,20 +1176,64 @@
 static const struct driver_info	cdc_info = {
 	.description =	"CDC Ethernet Device",
 	.flags =	FLAG_ETHER,
 	// .check_connect = cdc_check_connect,
 	.bind =		cdc_bind,
 	.unbind =	cdc_unbind,
 };
 
 #endif	/* CONFIG_USB_CDCETHER */
 
+#ifdef        CONFIG_USB_CENTILLIUM
+/*-------------------------------------------------------------------------
+ *
+ * Centillium Palladia P300, P400, A100. 
+ *
+ *-------------------------------------------------------------------------*/
+int a;
+struct ctlm_tx_header_s {
+	__le16 id;
+	__le16 len;
+} __attribute__((__packed__));
+
+static struct sk_buff *
+ctlm_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
+{
+	struct sk_buff *skb2;
+	struct ctlm_tx_header_s  *ctlm_tx_header_p;
+	int            headroom;
+	int            len;
+
+	len = skb->len;
+	headroom = skb_headroom (skb);
+
+	if (headroom < 4) {
+		skb2 = skb_copy_expand (skb, 0x10, 0, flags);
+		dev_kfree_skb_any (skb);
+		skb = skb2;
+		if (skb2 == NULL)
+			return NULL;
+	}
+	ctlm_tx_header_p = (struct ctlm_tx_header_s *)skb_push(skb, 4);
+	ctlm_tx_header_p->id = 0;
+	ctlm_tx_header_p->len = cpu_to_le16(len);
+
+	return skb;
+}
+
+
+static const struct driver_info       ctlm_p300_info = {
+	.description =  "Centillium Palladia P300, P400, A100",
+	.tx_fixup =     ctlm_tx_fixup,
+	.in = 2, .out = 2,
+};
+#endif /* CONFIG_USB_CENTILLIUM */
 
 
 #ifdef	CONFIG_USB_EPSON2888
 #define	HAVE_HARDWARE
 
 /*-------------------------------------------------------------------------
  *
  * EPSON USB clients
  *
  * This is the same idea as Linux PDAs (below) except the firmware in the
@@ -3378,20 +3422,28 @@
 	 * CDC ether.
 	 *
 	 * NOTE:  this match must come AFTER entries working around
 	 * bugs/quirks in a given product (like Zaurus, above).
 	 */
 	USB_INTERFACE_INFO (USB_CLASS_COMM, 6 /* Ethernet model */, 0),
 	.driver_info = (unsigned long) &cdc_info,
 },
 #endif
 
+#ifdef CONFIG_USB_CENTILLIUM
+{
+	USB_DEVICE (0x0723, 0x0002), 	   // Centillium Palladia
+	.driver_info =  (unsigned long) &ctlm_p300_info,
+},
+#endif        /* CONFIG_USB_CENTILLIUM */
+
+
 	{ },		// END
 };
 MODULE_DEVICE_TABLE (usb, products);
 
 static struct usb_driver usbnet_driver = {
 	.owner =	THIS_MODULE,
 	.name =		driver_name,
 	.id_table =	products,
 	.probe =	usbnet_probe,
 	.disconnect =	usbnet_disconnect,
--- a/drivers/usb/net/Kconfig	2005-06-14 20:45:26.000000000 -0700
+++ b/drivers/usb/net/Kconfig	2005-06-23 03:58:03.000000000 -0700
@@ -241,20 +241,28 @@
  	    * Motorola (DM100 and SB4100)
  	    * Broadcom Cable Modem (reference design)
  	    * Toshiba PCX1100U
 	    * ...
 
 	  This driver creates an interface named "ethX", where X depends on
 	  what other networking devices you have in use.  However, if the
 	  IEEE 802 "local assignment" bit is set in the address, a "usbX"
 	  name is used instead.
 
+config USB_CENTILLIUM
+	boolean "Centillium P300, P400, A100 Chipset support"
+	depends on USB_USBNET
+	default y
+	help
+	  Support the USB-to-USB Network connection P300 P400 and A100 Chipset. These
+	  are used in various DSL modem/routers and internet telephony devices.
+
 comment "USB Network Adapters"
 	depends on USB_USBNET
 
 config USB_AX8817X
 	boolean "ASIX AX88172 Based USB 2.0 Ethernet Devices"
 	depends on USB_USBNET && NET_ETHERNET
 	select CRC32
 	select MII
 	default y
 	help
