Mailinglist Archive: opensuse-commit (1215 mails)

< Previous Next >
commit b43-fwcutter for openSUSE:Factory
  • From: root@xxxxxxxxxxxxxxx (h_root)
  • Date: Mon, 03 Aug 2009 18:24:51 +0200
  • Message-id: <20090803162451.7EFAA637C@xxxxxxxxxxxxxxx>

Hello community,

here is the log from the commit of package b43-fwcutter for openSUSE:Factory
checked in at Mon Aug 3 18:24:51 CEST 2009.


--------
--- b43-fwcutter/b43-fwcutter.changes 2009-02-09 13:55:22.000000000 +0100
+++ /mounts/work_src_done/STABLE/b43-fwcutter/b43-fwcutter.changes
2009-08-03 14:04:35.000000000 +0200
@@ -1,0 +2,6 @@
+Mon Aug 3 11:56:39 UTC 2009 - cstender@xxxxxxxxxx
+
+- updated to version 012
+ * don't extract core 4 firmware from V4 drivers
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


Old:
----
b43-fwcutter-011.tar.bz2

New:
----
b43-fwcutter-012.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ b43-fwcutter.spec ++++++
--- /var/tmp/diff_new_pack.yIiFSx/_old 2009-08-03 18:19:05.000000000 +0200
+++ /var/tmp/diff_new_pack.yIiFSx/_new 2009-08-03 18:19:05.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package b43-fwcutter (Version 011)
+# spec file for package b43-fwcutter (Version 012)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -22,13 +22,13 @@
Group: Hardware/Wifi
AutoReqProv: on
Summary: Tool for extracting firmware from newer Broadcom WLAN drivers
-Version: 011
-Release: 36
+Version: 012
+Release: 1
Source: %{name}-%{version}.tar.bz2
Patch0: %{name}.diff
Source1: install_bcm43xx_firmware
Url: http://linuxwireless.org/en/users/Drivers/b43
-License: BSD 3-Clause; BSD 4-Clause
+License: BSD 3-clause (or similar) ; BSD 4-clause (or similar)
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires: curl
Obsoletes: bcm43xx-fwcutter

++++++ b43-fwcutter-011.tar.bz2 -> b43-fwcutter-012.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/b43-fwcutter-011/Makefile
new/b43-fwcutter-012/Makefile
--- old/b43-fwcutter-011/Makefile 2008-02-13 18:46:26.000000000 +0100
+++ new/b43-fwcutter-012/Makefile 2009-06-02 17:52:55.000000000 +0200
@@ -1,4 +1,4 @@
-VERSION = 011
+VERSION = 012

CC ?= cc
PREFIX ?= /usr/local
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/b43-fwcutter-011/fwcutter_list.h
new/b43-fwcutter-012/fwcutter_list.h
--- old/b43-fwcutter-011/fwcutter_list.h 2008-02-13 18:46:26.000000000
+0100
+++ new/b43-fwcutter-012/fwcutter_list.h 2009-06-02 17:52:55.000000000
+0200
@@ -1,3 +1,10 @@
+/*
+ * Extraction of core 4 firmware from V4 drivers has been commented out as
these
+ * cores will not work with driver b43.
+ *
+ * In contrast, extraction of core 5 firmware from V3 drivers should be
retained
+ * as those devices will work with b43legacy and are useful for testing.
+ */

/* file member lists */
static struct extract _e08665c5c5b66beb9c3b2dd54aa80cb3[] =
@@ -23,16 +30,22 @@

static struct extract _9207bc565c2fc9fa1591f6c7911d3fc0[] =
{
- { .name = "ucode4", .offset = 0x66220 + 0x7ad8, .length = 0x4e68,
.type = EXT_UCODE_1, },
+/*
+ * { .name = "ucode4", .offset = 0x66220 + 0x7ad8, .length = 0x4e68,
.type = EXT_UCODE_1, },
+ */
{ .name = "ucode5", .offset = 0x66220 + 0xc944, .length = 0x5640,
.type = EXT_UCODE_2, },
{ .name = "ucode11", .offset = 0x66220 + 0x11f90, .length = 0x67e0,
.type = EXT_UCODE_2, },
{ .name = "ucode13", .offset = 0x66220 + 0x18774, .length = 0x5f60,
.type = EXT_UCODE_2, },
- { .name = "pcm4", .offset = 0x66220 + 0x1e6d8, .length = 0x520, .type =
EXT_PCM, },
+/*
+ * { .name = "pcm4", .offset = 0x66220 + 0x1e6d8, .length = 0x520, .type =
EXT_PCM, },
+ */
{ .name = "pcm5", .offset = 0x66220 + 0x1ebfc, .length = 0x520, .type =
EXT_PCM, },
- { .name = "b0g0initvals4", .offset = 0x66220 + 0x1710, .length =
0xe90 - 8, .type = EXT_IV, },
- { .name = "b0g0bsinitvals4", .offset = 0x66220 + 0x25a0, .length =
0x18 - 8, .type = EXT_IV, },
- { .name = "a0g0initvals4", .offset = 0x66220 + 0x25b8, .length =
0xe90 - 8, .type = EXT_IV, },
- { .name = "a0g0bsinitvals4", .offset = 0x66220 + 0x3448, .length =
0x18 - 8, .type = EXT_IV, },
+/*
+ * { .name = "b0g0initvals4", .offset = 0x66220 + 0x1710, .length =
0xe90 - 8, .type = EXT_IV, },
+ * { .name = "b0g0bsinitvals4", .offset = 0x66220 + 0x25a0, .length =
0x18 - 8, .type = EXT_IV, },
+ * { .name = "a0g0initvals4", .offset = 0x66220 + 0x25b8, .length =
0xe90 - 8, .type = EXT_IV, },
+ * { .name = "a0g0bsinitvals4", .offset = 0x66220 + 0x3448, .length =
0x18 - 8, .type = EXT_IV, },
+ */
{ .name = "b0g0initvals5", .offset = 0x66220 + 0x3460, .length =
0xa28 - 8, .type = EXT_IV, },
{ .name = "b0g0bsinitvals5", .offset = 0x66220 + 0x3e88, .length =
0x100 - 8, .type = EXT_IV, },
{ .name = "a0g0initvals5", .offset = 0x66220 + 0x3f88, .length =
0xa28 - 8, .type = EXT_IV, },
@@ -50,16 +63,22 @@

static struct extract _722e2e0d8cc04b8f118bb5afe6829ff9[] =
{
- { .name = "ucode4", .offset = 0x76a10 + 0x8960, .length = 0x4e68,
.type = EXT_UCODE_1, },
+/*
+ * { .name = "ucode4", .offset = 0x76a10 + 0x8960, .length = 0x4e68,
.type = EXT_UCODE_1, },
+ */
{ .name = "ucode5", .offset = 0x76a10 + 0xd7cc, .length = 0x5640,
.type = EXT_UCODE_2, },
{ .name = "ucode11", .offset = 0x76a10 + 0x12e18, .length = 0x67e0,
.type = EXT_UCODE_2, },
{ .name = "ucode13", .offset = 0x76a10 + 0x195fc, .length = 0x5f60,
.type = EXT_UCODE_2, },
- { .name = "pcm4", .offset = 0x76a10 + 0x1f560, .length = 0x520, .type =
EXT_PCM, },
+/*
+ * { .name = "pcm4", .offset = 0x76a10 + 0x1f560, .length = 0x520, .type =
EXT_PCM, },
+ */
{ .name = "pcm5", .offset = 0x76a10 + 0x1fa84, .length = 0x520, .type =
EXT_PCM, },
- { .name = "b0g0initvals4", .offset = 0x76a10 + 0x1840, .length =
0xe90 - 8, .type = EXT_IV, },
- { .name = "b0g0bsinitvals4", .offset = 0x76a10 + 0x26d0, .length =
0x18 - 8, .type = EXT_IV, },
- { .name = "a0g0initvals4", .offset = 0x76a10 + 0x26e8, .length =
0xe90 - 8, .type = EXT_IV, },
- { .name = "a0g0bsinitvals4", .offset = 0x76a10 + 0x3578, .length =
0x18 - 8, .type = EXT_IV, },
+/*
+ * { .name = "b0g0initvals4", .offset = 0x76a10 + 0x1840, .length =
0xe90 - 8, .type = EXT_IV, },
+ * { .name = "b0g0bsinitvals4", .offset = 0x76a10 + 0x26d0, .length =
0x18 - 8, .type = EXT_IV, },
+ * { .name = "a0g0initvals4", .offset = 0x76a10 + 0x26e8, .length =
0xe90 - 8, .type = EXT_IV, },
+ * { .name = "a0g0bsinitvals4", .offset = 0x76a10 + 0x3578, .length =
0x18 - 8, .type = EXT_IV, },
+ */
{ .name = "b0g0initvals5", .offset = 0x76a10 + 0x3590, .length =
0xa28 - 8, .type = EXT_IV, },
{ .name = "b0g0bsinitvals5", .offset = 0x76a10 + 0x3fb8, .length =
0x100 - 8, .type = EXT_IV, },
{ .name = "a0g0initvals5", .offset = 0x76a10 + 0x40b8, .length =
0xa28 - 8, .type = EXT_IV, },
@@ -116,14 +135,18 @@
static struct extract _cb8d70972b885b1f8883b943c0261a3c[] =
{
{ .name = "pcm5", .offset = 0x8e554, .type = EXT_PCM, .length = 0x520 },
- { .name = "pcm4", .offset = 0x8ea78, .type = EXT_PCM, .length = 0x520 },
+/*
+ * { .name = "pcm4", .offset = 0x8ea78, .type = EXT_PCM, .length = 0x520 },
+ */
{ .name = "ucode15", .offset = 0x8ef9c, .type = EXT_UCODE_3, .length =
0x7710 },
{ .name = "ucode14", .offset = 0x966b0, .type = EXT_UCODE_2, .length =
0x7a90 },
{ .name = "ucode13", .offset = 0x9e144, .type = EXT_UCODE_2, .length =
0x7de0 },
{ .name = "ucode11", .offset = 0xa5f28, .type = EXT_UCODE_2, .length =
0x74a0 },
{ .name = "ucode9", .offset = 0xad3cc, .type = EXT_UCODE_2, .length =
0x6240 },
{ .name = "ucode5", .offset = 0xb3610, .type = EXT_UCODE_2, .length =
0x5768 },
- { .name = "ucode4", .offset = 0xb8d7c, .type = EXT_UCODE_1, .length =
0x4ec8 },
+/*
+ * { .name = "ucode4", .offset = 0xb8d7c, .type = EXT_UCODE_1, .length =
0x4ec8 },
+ */
{ .name = "lp0bsinitvals15", .offset = 0xbdc44, .type = EXT_IV, .length
= 0xf8 },
{ .name = "lp0initvals15", .offset = 0xbdd44, .type = EXT_IV, .length =
0xb30 },
{ .name = "lp0bsinitvals14", .offset = 0xbe87c, .type = EXT_IV, .length
= 0xf8 },
@@ -149,13 +172,71 @@
{ .name = "a0g0initvals5", .offset = 0xc5f24, .type = EXT_IV, .length =
0xa08 },
{ .name = "b0g0bsinitvals5", .offset = 0xc6934, .type = EXT_IV, .length
= 0xf8 },
{ .name = "b0g0initvals5", .offset = 0xc6a34, .type = EXT_IV, .length =
0xa08 },
- { .name = "a0g0bsinitvals4", .offset = 0xc7444, .type = EXT_IV, .length
= 0x10 },
- { .name = "a0g0initvals4", .offset = 0xc745c, .type = EXT_IV, .length =
0xe88 },
- { .name = "b0g0bsinitvals4", .offset = 0xc82ec, .type = EXT_IV, .length
= 0x10 },
- { .name = "b0g0initvals4", .offset = 0xc8304, .type = EXT_IV, .length =
0xe8c },
+/*
+ * { .name = "a0g0bsinitvals4", .offset = 0xc7444, .type = EXT_IV, .length
= 0x10 },
+ * { .name = "a0g0initvals4", .offset = 0xc745c, .type = EXT_IV, .length =
0xe88 },
+ * { .name = "b0g0bsinitvals4", .offset = 0xc82ec, .type = EXT_IV, .length
= 0x10 },
+ * { .name = "b0g0initvals4", .offset = 0xc8304, .type = EXT_IV, .length =
0xe8c },
+ */
EXTRACT_LIST_END
};

+static struct extract _2dd738b8feb8b3559fd9d8fbaf3bfffc[] =
+{
+ { .name = "lp0initvals14", .offset = 0x982B0, .type = EXT_IV, .length =
0xB80 },
+ { .name = "lp0bsinitvals14", .offset = 0x98E38, .type = EXT_IV, .length
= 0x118 },
+ { .name = "b0g0initvals9", .offset = 0x92218, .type = EXT_IV, .length =
0xAF0 },
+ { .name = "a0g1bsinitvals9", .offset = 0x94540, .type = EXT_IV, .length
= 0x118 },
+ { .name = "b0g0bsinitvals13", .offset = 0x974D0, .type = EXT_IV,
.length = 0x118 },
+ { .name = "b0g0bsinitvals5", .offset = 0x90A78, .type = EXT_IV, .length
= 0x118 },
+ { .name = "ucode4", .offset = 0x9B868, .type = EXT_UCODE_1, .length =
0x4EA0 },
+ { .name = "b0g0initvals4", .offset = 0x8E2D8, .type = EXT_IV, .length =
0xE80 },
+ { .name = "b0g0initvals13", .offset = 0x96930, .type = EXT_IV, .length
= 0xB98 },
+ { .name = "ucode14", .offset = 0xBBB1C, .type = EXT_UCODE_2, .length =
0x7910 },
+ { .name = "a0g0initvals5", .offset = 0x90B98, .type = EXT_IV, .length =
0xA18 },
+ { .name = "lp0bsinitvals16", .offset = 0x9B748, .type = EXT_IV, .length
= 0x118 },
+ { .name = "pcm4", .offset = 0xD4A40, .type = EXT_PCM, .length = 0x520 },
+ { .name = "a0g1bsinitvals5", .offset = 0x920F8, .type = EXT_IV, .length
= 0x118 },
+ { .name = "n0bsinitvals11", .offset = 0x95230, .type = EXT_IV, .length
= 0x118 },
+ { .name = "n0absinitvals11", .offset = 0x95350, .type = EXT_IV, .length
= 0x118 },
+ /* ERROR: Could not guess data type for: ucode_bomminor */
+ { .name = "a0g1bsinitvals13", .offset = 0x98190, .type = EXT_IV,
.length = 0x118 },
+ { .name = "pcm5", .offset = 0xD4F64, .type = EXT_PCM, .length = 0x520 },
+ /* ERROR: Could not guess data type for: ucode_2w_bomminor */
+ { .name = "ucode9", .offset = 0xA5E00, .type = EXT_UCODE_2, .length =
0x6248 },
+ { .name = "a0g0bsinitvals9", .offset = 0x94420, .type = EXT_IV, .length
= 0x118 },
+ { .name = "a0g0bsinitvals4", .offset = 0x90020, .type = EXT_IV, .length
= 0x30 },
+ { .name = "a0g1initvals5", .offset = 0x915B8, .type = EXT_IV, .length =
0xA18 },
+ { .name = "n0bsinitvals16", .offset = 0x9A980, .type = EXT_IV, .length
= 0x118 },
+ { .name = "ucode16", .offset = 0xCBB9C, .type = EXT_UCODE_3, .length =
0x8EA0 },
+ { .name = "b0g0bsinitvals4", .offset = 0x8F160, .type = EXT_IV, .length
= 0x30 },
+ { .name = "lp0initvals15", .offset = 0x98F58, .type = EXT_IV, .length =
0xC68 },
+ { .name = "b0g0initvals5", .offset = 0x90058, .type = EXT_IV, .length =
0xA18 },
+ { .name = "a0g0initvals4", .offset = 0x8F198, .type = EXT_IV, .length =
0xE80 },
+ { .name = "sslpn0initvals16", .offset = 0x9AAA0, .type = EXT_IV,
.length = 0x0 },
+ { .name = "a0g1initvals13", .offset = 0x975F0, .type = EXT_IV, .length
= 0xB98 },
+ /* ERROR: Could not guess data type for: ucode_2w11 */
+ /* ERROR: Could not guess data type for: ucode_bommajor */
+ { .name = "a0g1initvals9", .offset = 0x93928, .type = EXT_IV, .length =
0xAF0 },
+ { .name = "ucode5", .offset = 0xA070C, .type = EXT_UCODE_2, .length =
0x56F0 },
+ { .name = "lp0bsinitvals13", .offset = 0x96810, .type = EXT_IV, .length
= 0x118 },
+ { .name = "n0initvals16", .offset = 0x99CE8, .type = EXT_IV, .length =
0xC90 },
+ /* ERROR: Could not guess data type for: ucode_2w_bommajor */
+ { .name = "b0g0bsinitvals9", .offset = 0x92D10, .type = EXT_IV, .length
= 0x118 },
+ { .name = "ucode11", .offset = 0xAC04C, .type = EXT_UCODE_2, .length =
0x8000 },
+ { .name = "lp0initvals16", .offset = 0x9AAB0, .type = EXT_IV, .length =
0xC90 },
+ /* ERROR: Could not guess data type for: ucode_2w15 */
+ { .name = "a0g0initvals9", .offset = 0x92E30, .type = EXT_IV, .length =
0xAF0 },
+ { .name = "lp0initvals13", .offset = 0x95470, .type = EXT_IV, .length =
0x1398 },
+ { .name = "a0g0bsinitvals5", .offset = 0x91FD8, .type = EXT_IV, .length
= 0x118 },
+ { .name = "ucode13", .offset = 0xB4050, .type = EXT_UCODE_2, .length =
0x7AC8 },
+ /* ERROR: Could not guess data type for: ucode_2w13 */
+ { .name = "ucode15", .offset = 0xC3430, .type = EXT_UCODE_3, .length =
0x8768 },
+ { .name = "lp0bsinitvals15", .offset = 0x99BC8, .type = EXT_IV, .length
= 0x118 },
+ { .name = "n0initvals11", .offset = 0x94660, .type = EXT_IV, .length =
0xBC8 },
+ { .name = "sslpn0bsinitvals16", .offset = 0x9AAA8, .type = EXT_IV,
.length = 0x0 },
+ EXTRACT_LIST_END
+};

/*
* Links change, so let's not put them into the README.
@@ -209,6 +290,16 @@
.flags = FW_FLAG_LE | FW_FLAG_V4,
.extract = _cb8d70972b885b1f8883b943c0261a3c,
},
+ {
+ /*
ftp://ftp.linksys.com/opensourcecode/wrt610n/1.00.00.018/wrt610n_v1.00.00.018_us.tgz
*/
+ .name = "wl.o",
+ .id = "FW14",
+ .ucode_version = "478.104",
+ .md5 = "2dd738b8feb8b3559fd9d8fbaf3bfffc",
+ .flags = FW_FLAG_LE | FW_FLAG_V4 | FW_FLAG_UNSUPPORTED,
+ .extract = _2dd738b8feb8b3559fd9d8fbaf3bfffc,
+ },
};

#define FILES (sizeof(files) / sizeof(files[0]))
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/b43-fwcutter-011/mklist.py
new/b43-fwcutter-012/mklist.py
--- old/b43-fwcutter-011/mklist.py 1970-01-01 01:00:00.000000000 +0100
+++ new/b43-fwcutter-012/mklist.py 2009-06-02 17:52:55.000000000 +0200
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+#
+# Script for creating a "struct extract" list for fwcutter_list.h
+#
+# Copyright (c) 2008 Michael Buesch <mb@xxxxxxxxx>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import sys
+import os
+import re
+import md5
+
+if len(sys.argv) != 2:
+ print "Usage: %s path/to/wl.o" % sys.argv[0]
+ sys.exit(1)
+fn = sys.argv[1]
+
+pipe = os.popen("objdump -t %s" % fn)
+syms = pipe.readlines()
+pipe = os.popen("objdump --headers %s" % fn)
+headers = pipe.readlines()
+
+# Get the .rodata fileoffset
+rodata_fileoffset = None
+rofileoff_re =
re.compile(r"\d+\s+\.rodata\s+[0-9a-fA-F]+\s+[0-9a-fA-F]+\s+[0-9a-fA-F]+\s+([0-9a-fA-F]+)\s+.")
+for line in headers:
+ line = line.strip()
+ m = rofileoff_re.match(line)
+ if m:
+ rodata_fileoffset = int(m.group(1), 16)
+ break
+if rodata_fileoffset == None:
+ print "ERROR: Could not find .rodata fileoffset"
+ sys.exit(1)
+
+md5sum = md5.md5(file(fn, "r").read())
+
+print "static struct extract _%s[] =" % md5sum.hexdigest()
+print "{"
+
+sym_re = re.compile(r"([0-9a-fA-F]+)\s+g\s+O\s+\.rodata\s+([0-9a-fA-F]+)
d11([-_\s\w0-9]+)")
+ucode_re = re.compile(r"ucode(\d+)")
+
+for sym in syms:
+ sym = sym.strip()
+ m = sym_re.match(sym)
+ if not m:
+ continue
+ pos = int(m.group(1), 16) + rodata_fileoffset
+ size = int(m.group(2), 16)
+ name = m.group(3)
+ if name[-2:] == "sz":
+ continue
+
+ type = None
+ if "initvals" in name:
+ type = "EXT_IV"
+ size -= 8
+ if "pcm" in name:
+ type = "EXT_PCM"
+ m = ucode_re.match(name)
+ if m:
+ corerev = int(m.group(1))
+ if corerev <= 4:
+ type = "EXT_UCODE_1"
+ elif corerev >= 5 and corerev <= 14:
+ type = "EXT_UCODE_2"
+ else:
+ type = "EXT_UCODE_3"
+ if not type:
+ print "\t/* ERROR: Could not guess data type for: %s */" % name
+ continue
+
+ print "\t{ .name = \"%s\", .offset = 0x%X, .type = %s, .length = 0x%X
}," % (name, pos, type, size)
+print "\tEXTRACT_LIST_END"
+print "};"


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-commit+help@xxxxxxxxxxxx

< Previous Next >
This Thread
  • No further messages