#!/bin/sh # # Copyright (C) 2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # # Write image header followed by all specified files # The header is padded to 64k, format is: # CE magic word ("Combined Extended Image") (2 bytes) # file format version field (2 bytes) # short description of the target device (32 bytes) # number of files following the header (2 byte) # name of the first file (32 bytes) # length of the first file encoded as zero padded 8 digit hex (8 bytes) # md5 checksum of the first file (32 bytes) # name of the Nth file (32 bytes) # length of the Nth file encoded as zero padded 8 digit hex (8 bytes) # md5 checksum of the Nth file (32 bytes) ## version history # * version 1: initial file format with num files / name / length / md5 checksum set -e ME="${0##*/}" usage() { echo "Usage: $ME [ ]" [ "$IMG_OUT" ] && rm -f "$IMG_OUT" exit 1 } [ "$#" -lt 4 ] && usage CE_VERSION=1 IMG_TYPE=$1; shift IMG_OUT=$1; shift FILE_NUM=$(($# / 2)) FILES="" tmpdir="$( mktemp -d 2> /dev/null )" if [ -z "$tmpdir" ]; then # try OSX signature tmpdir="$( mktemp -t 'ubitmp' -d )" fi if [ -z "$tmpdir" ]; then exit 1 fi trap "rm -rf $tmpdir" EXIT IMG_TMP_OUT="${tmpdir}/out" printf "CE%02x%-32s%02x" $CE_VERSION "$IMG_TYPE" $FILE_NUM > "${IMG_TMP_OUT}" while [ "$#" -gt 1 ] do file=$1 filename=$2 [ ! -f "$file" ] && echo "$ME: Not a valid file: $file" && usage FILES="$FILES $file" md5=$(mkhash md5 "$file") printf "%-32s%08x%32s" "$filename" $(stat -c "%s" "$file") "${md5%% *}" >> "${IMG_TMP_OUT}" shift 2 done [ "$#" -eq 1 ] && echo "$ME: Filename not specified: $1" && usage mv "${IMG_TMP_OUT}" "${IMG_TMP_OUT}".tmp dd if="${IMG_TMP_OUT}.tmp" of="${IMG_TMP_OUT}" bs=65536 conv=sync 2>/dev/null rm "${IMG_TMP_OUT}".tmp cat $FILES >> "${IMG_TMP_OUT}" cp "${IMG_TMP_OUT}" "${IMG_OUT}" linux/generic/patches-2.6.30/601-phy-add-aneg-done-function.patch?h=v21.02.6&id=da1bb88a2b900f0392b731ec47c5e1bff956fd8f'>treecommitdiffstats
blob: aac38ff2e78cf7e8f30f63de9d40ef9d7583b62b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -393,9 +393,18 @@ struct phy_driver {
 	 */
 	int (*config_aneg)(struct phy_device *phydev);
 
+	/* Determine if autonegotiation is done */
+	int (*aneg_done)(struct phy_device *phydev);
+
 	/* Determines the negotiated speed and duplex */
 	int (*read_status)(struct phy_device *phydev);
 
+	/* 
+	 * Update the value in phydev->link to reflect the 
+	 * current link value
+	 */
+	int (*update_link)(struct phy_device *phydev);
+
 	/* Clears any pending interrupts */
 	int (*ack_interrupt)(struct phy_device *phydev);
 
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -695,6 +695,9 @@ int genphy_update_link(struct phy_device
 {
 	int status;
 
+	if (phydev->drv->update_link)
+		return phydev->drv->update_link(phydev);
+
 	/* Do a fake read */
 	status = phy_read(phydev, MII_BMSR);
 
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -107,6 +107,9 @@ static inline int phy_aneg_done(struct p
 {
 	int retval;
 
+	if (phydev->drv->aneg_done)
+		return phydev->drv->aneg_done(phydev);
+
 	retval = phy_read(phydev, MII_BMSR);
 
 	return (retval < 0) ? retval : (retval & BMSR_ANEGCOMPLETE);