On Fri, Mar 09, 2012 at 10:24:09AM +0100, Jan Weitzel wrote:
> Add support for KS8851 16bit MLL chip from Micrel Inc.
>
> Signed-off-by: Jan Weitzel
Applied, thanks
Sascha
> ---
> v2: use dev_* for messages
>
> drivers/base/resource.c | 33 ++
> drivers/net/Kconfig |7 +
> drivers/net/Makefile |1 +
> drivers/net/ks8851_mll.c | 892
> ++
> include/driver.h | 11 +
> 5 files changed, 944 insertions(+), 0 deletions(-)
> create mode 100644 drivers/net/ks8851_mll.c
>
> diff --git a/drivers/base/resource.c b/drivers/base/resource.c
> index d2f7a07..b31c7d7 100644
> --- a/drivers/base/resource.c
> +++ b/drivers/base/resource.c
> @@ -121,3 +121,36 @@ struct device_d *add_usb_ehci_device(int id,
> resource_size_t hccr,
> }
> EXPORT_SYMBOL(add_usb_ehci_device);
> #endif
> +
> +#ifdef CONFIG_DRIVER_NET_KS8851_MLL
> +struct device_d *add_ks8851_device(int id, resource_size_t addr,
> + resource_size_t addr_cmd, int flags, void *pdata)
> +{
> + struct resource *res;
> + resource_size_t size;
> +
> + switch (flags) {
> + case IORESOURCE_MEM_16BIT:
> + size = 2;
> + break;
> + case IORESOURCE_MEM_8BIT:
> + size = 1;
> + break;
> + default:
> + printf("ks8851: memory width flag missing\n");
> + return NULL;
> + }
> +
> + res = xzalloc(sizeof(struct resource) * 2);
> +
> + res[0].start = addr;
> + res[0].size = size;
> + res[0].flags = IORESOURCE_MEM | flags;
> + res[1].start = addr_cmd;
> + res[1].size = size;
> + res[1].flags = IORESOURCE_MEM | flags;
> +
> + return add_generic_device_res("ks8851_mll", id, res, 2, pdata);
> +}
> +EXPORT_SYMBOL(add_ks8851_device);
> +#endif
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index b236d17..4cdb37b 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -100,6 +100,13 @@ config TSE_USE_DEDICATED_DESC_MEM
> reserved with a malloc but directly mapped to the memory
> address (defined in config.h)
>
> +config DRIVER_NET_KS8851_MLL
> + bool "ks8851 mll ethernet driver"
> + select MIIDEV
> + help
> + This option enables support for the Micrel KS8851 MLL
> + ethernet chip.
> +
> source "drivers/net/usb/Kconfig"
>
> endmenu
> diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> index a84d3dc..34dbee9 100644
> --- a/drivers/net/Makefile
> +++ b/drivers/net/Makefile
> @@ -12,3 +12,4 @@ obj-$(CONFIG_DRIVER_NET_TAP)+= tap.o
> obj-$(CONFIG_MIIDEV) += miidev.o
> obj-$(CONFIG_NET_USB)+= usb/
> obj-$(CONFIG_DRIVER_NET_TSE) += altera_tse.o
> +obj-$(CONFIG_DRIVER_NET_KS8851_MLL) += ks8851_mll.o
> diff --git a/drivers/net/ks8851_mll.c b/drivers/net/ks8851_mll.c
> new file mode 100644
> index 000..aaaf099
> --- /dev/null
> +++ b/drivers/net/ks8851_mll.c
> @@ -0,0 +1,892 @@
> +/**
> + * Copyright (c) 2012 Jan Weitzel
> + * based on kernel driver drivers/net/ks8851_mll.c
> + * Copyright (c) 2009 Micrel Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/**
> + * Supports:
> + * KS8851 16bit MLL chip from Micrel Inc.
> + */
> +#include
> +#include
> +
> +#include
> +#include
> +#include
> +#include
> +#include
> +#include
> +#include
> +#include
> +#include
> +
> +#define MAX_RECV_FRAMES 32
> +#define MAX_BUF_SIZE 2048
> +#define TX_BUF_SIZE 2000
> +#define RX_BUF_SIZE 2000
> +
> +#define KS_CCR 0x08
> +#define CCR_EEPROM (1 << 9)
> +#define CCR_SPI (1 << 8)
> +#define CCR_8BIT (1 << 7)
> +#define CCR_16BIT(1 << 6)
> +#define CCR_32BIT(1 << 5)
> +#define CCR_SHARED (1 << 4)
> +#define CCR_32PIN(1 << 0)
> +
> +/* MAC address registers */
> +#define KS_MARL 0x10
> +#define KS_MARM 0x12
> +#define KS_MARH 0x14
> +
> +#define KS_OBCR 0x20
> +#define OBCR_ODS_16MA(1 << 6)
> +
> +#define KS_EEPCR