2010.07.13. 19:26 keltezéssel, daniel.go...@gmail.com írta:
> This adds ath_platform.h to mac80211 and patches ath5k to respect MAC 
> addresses and eeprom content from platform_data, if supplied.
> 
> Signed-off-by: Daniel Golle <daniel.go...@gmail.com>
> 
> Index: package/mac80211/patches/450-add-ath-platform.patch
> ===================================================================
> --- package/mac80211/patches/450-add-ath-platform.patch       (revision 0)
> +++ package/mac80211/patches/450-add-ath-platform.patch       (revision 0)
> @@ -0,0 +1,35 @@
> +diff -Nur a/include/linux/ath_platform.h b/include/linux/ath_platform.h
> +--- a/include/linux/ath_platform.h   1970-01-01 01:00:00.000000000 +0100
> ++++ b/include/linux/ath_platform.h   2010-06-21 00:19:52.000000000 +0200
> +@@ -0,0 +1,30 @@
> ++/*
> ++ * Copyright (c) 2008 Atheros Communications Inc.
> ++ * Copyright (c) 2009 Gabor Juhos <juh...@openwrt.org>
> ++ * Copyright (c) 2009 Imre Kaloz <ka...@openwrt.org>
> ++ * Copyright (c) 2010 Daniel Golle <daniel.go...@gmail.com>
> ++ *
> ++ * Permission to use, copy, modify, and/or distribute this software for any
> ++ * purpose with or without fee is hereby granted, provided that the above
> ++ * copyright notice and this permission notice appear in all copies.
> ++ *
> ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> ++ */
> ++
> ++#ifndef _LINUX_ATH_PLATFORM_H
> ++#define _LINUX_ATH_PLATFORM_H
> ++
> ++#define ATH_PLAT_EEP_MAX_WORDS      2048
> ++
> ++struct ath_platform_data {
> ++    u16 *eeprom_data;
> ++    u8 *macaddr;
> ++};
> ++
> ++#endif /* _LINUX_ATH_PLATFORM_H */
> +
> Index: package/mac80211/patches/451-add-platform-eeprom-support-to-ath5k.patch
> ===================================================================
> --- package/mac80211/patches/451-add-platform-eeprom-support-to-ath5k.patch   
> (revision 0)
> +++ package/mac80211/patches/451-add-platform-eeprom-support-to-ath5k.patch   
> (revision 0)
> @@ -0,0 +1,57 @@
> +--- a/drivers/net/wireless/ath/ath5k/eeprom.c        2010-06-23 
> 03:08:32.000000000 +0200
> ++++ b/drivers/net/wireless/ath/ath5k/eeprom.c        2010-06-23 
> 05:59:30.000000000 +0200
> +@@ -22,6 +23,8 @@
> + \*************************************/
> + 
> + #include <linux/slab.h>
> ++#include <linux/ath_platform.h>
> ++#include <linux/pci.h>
> + 
> + #include "ath5k.h"
> + #include "reg.h"
> +@@ -34,6 +37,18 @@
> + static int ath5k_hw_eeprom_read(struct ath5k_hw *ah, u32 offset, u16 *data)
> + {
> +     u32 status, timeout;
> ++    struct ath_platform_data *pdata = NULL;
> ++
> ++    if (ah->ah_sc->pdev) // we only got pdev with PCI bus, right?
> ++            pdata = (struct ath_platform_data *) 
> ah->ah_sc->pdev->dev.platform_data;

The cast is not needed.

> ++
> ++    if (pdata && ((__u16)(pdata->eeprom_data) == AR5K_EEPROM_MAGIC_VALUE))

You are checking the address of the eeprom_data instead of the first word of the
actual data.

> ++    {
> ++            ATH5K_INFO(ah->ah_sc, "using eeprom-content from 
> platform_data\n");
> ++            if (offset >= ATH_PLAT_EEP_MAX_WORDS) return -EIO;
> ++            *data = pdata->eeprom_data[offset];
> ++            return 0;
> ++    }
> + 
> +     /*
> +      * Initialize EEPROM access
> +@@ -1788,7 +1802,7 @@
> + }
> + 
> + /*
> +- * Read the MAC address from eeprom
> ++ * Read the MAC address from eeprom or platform_data
> +  */
> + int ath5k_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac)
> + {
> +@@ -1796,6 +1810,16 @@
> +     u32 total, offset;
> +     u16 data;
> +     int octet, ret;
> ++    struct ath_platform_data *pdata = NULL;
> ++
> ++    if (ah->ah_sc->pdev)
> ++            pdata = (struct ath_platform_data *) 
> ah->ah_sc->pdev->dev.platform_data;

The cast is not needed.

> ++
> ++    if (pdata && pdata->macaddr)
> ++    {
> ++            memcpy(mac, pdata->macaddr, ETH_ALEN);
> ++            return 0;
> ++    }
> + 
> +     ret = ath5k_hw_eeprom_read(ah, 0x20, &data);
> +     if (ret)
> +
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> 

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to