sync to 2.6.34-rc6
disabled arm feature patches, nuked merged stuff, disabled aufs, fixed orig generation. svn path=/dists/trunk/linux-2.6/; revision=15628
This commit is contained in:
parent
8a8135921d
commit
45aa9bb8cb
|
@ -1,3 +1,9 @@
|
|||
linux-2.6 (2.6.34~rc6-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream release
|
||||
|
||||
-- maximilian attems <maks@debian.org> Wed, 05 May 2010 22:57:24 +0200
|
||||
|
||||
linux-2.6 (2.6.33-1~experimental.5) experimental; urgency=low
|
||||
|
||||
[ Ian Campbell ]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[abi]
|
||||
abiname: 2
|
||||
abiname: 1
|
||||
|
||||
[base]
|
||||
arches:
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
From: Tejun Heo <teheo@suse.de>
|
||||
Subject: libata/SCSI: fix locking around blk_abort_request()
|
||||
References: bnc#585927
|
||||
Patch-mainline: submitted for 2.6.34-rc5 and stable (as two patches)
|
||||
|
||||
blk_abort_request() expects queue lock to be held by the caller.
|
||||
Grab it before calling the function.
|
||||
|
||||
Lack of this synchronization led to infinite loop on corrupt
|
||||
q->timeout_list.
|
||||
|
||||
Signed-off-by: Tejun Heo <teheo@suse.de>
|
||||
---
|
||||
drivers/ata/libata-eh.c | 4 ++++
|
||||
drivers/scsi/libsas/sas_ata.c | 4 ++++
|
||||
drivers/scsi/libsas/sas_scsi_host.c | 4 ++++
|
||||
3 files changed, 12 insertions(+)
|
||||
|
||||
Index: linux-2.6.32-SLE11-SP1/drivers/ata/libata-eh.c
|
||||
===================================================================
|
||||
--- linux-2.6.32-SLE11-SP1.orig/drivers/ata/libata-eh.c
|
||||
+++ linux-2.6.32-SLE11-SP1/drivers/ata/libata-eh.c
|
||||
@@ -870,6 +870,8 @@ static void ata_eh_set_pending(struct at
|
||||
void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
+ struct request_queue *q = qc->scsicmd->device->request_queue;
|
||||
+ unsigned long flags;
|
||||
|
||||
WARN_ON(!ap->ops->error_handler);
|
||||
|
||||
@@ -881,7 +883,9 @@ void ata_qc_schedule_eh(struct ata_queue
|
||||
* Note that ATA_QCFLAG_FAILED is unconditionally set after
|
||||
* this function completes.
|
||||
*/
|
||||
+ spin_lock_irqsave(q->queue_lock, flags);
|
||||
blk_abort_request(qc->scsicmd->request);
|
||||
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
Index: linux-2.6.32-SLE11-SP1/drivers/scsi/libsas/sas_ata.c
|
||||
===================================================================
|
||||
--- linux-2.6.32-SLE11-SP1.orig/drivers/scsi/libsas/sas_ata.c
|
||||
+++ linux-2.6.32-SLE11-SP1/drivers/scsi/libsas/sas_ata.c
|
||||
@@ -394,11 +394,15 @@ int sas_ata_init_host_and_port(struct do
|
||||
void sas_ata_task_abort(struct sas_task *task)
|
||||
{
|
||||
struct ata_queued_cmd *qc = task->uldd_task;
|
||||
+ struct request_queue *q = qc->scsicmd->device->request_queue;
|
||||
struct completion *waiting;
|
||||
+ unsigned long flags;
|
||||
|
||||
/* Bounce SCSI-initiated commands to the SCSI EH */
|
||||
if (qc->scsicmd) {
|
||||
+ spin_lock_irqsave(q->queue_lock, flags);
|
||||
blk_abort_request(qc->scsicmd->request);
|
||||
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
||||
scsi_schedule_eh(qc->scsicmd->device->host);
|
||||
return;
|
||||
}
|
||||
Index: linux-2.6.32-SLE11-SP1/drivers/scsi/libsas/sas_scsi_host.c
|
||||
===================================================================
|
||||
--- linux-2.6.32-SLE11-SP1.orig/drivers/scsi/libsas/sas_scsi_host.c
|
||||
+++ linux-2.6.32-SLE11-SP1/drivers/scsi/libsas/sas_scsi_host.c
|
||||
@@ -1029,6 +1029,8 @@ int __sas_task_abort(struct sas_task *ta
|
||||
void sas_task_abort(struct sas_task *task)
|
||||
{
|
||||
struct scsi_cmnd *sc = task->uldd_task;
|
||||
+ struct request_queue *q = sc->device->request_queue;
|
||||
+ unsigned long flags;
|
||||
|
||||
/* Escape for libsas internal commands */
|
||||
if (!sc) {
|
||||
@@ -1043,7 +1045,9 @@ void sas_task_abort(struct sas_task *tas
|
||||
return;
|
||||
}
|
||||
|
||||
+ spin_lock_irqsave(q->queue_lock, flags);
|
||||
blk_abort_request(sc->request);
|
||||
+ spin_unlock_irqrestore(q->queue_lock, flags);
|
||||
scsi_schedule_eh(sc->device->host);
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
From 088ea189c4c75cdf211146faa4b341a0f7476be6 Mon Sep 17 00:00:00 2001
|
||||
From: Darren Jenkins <darrenrjenkins@gmail.com>
|
||||
Date: Wed, 17 Feb 2010 23:40:15 +1100
|
||||
Subject: [PATCH] drivers/net/wireless/p54/txrx.c Fix off by one error
|
||||
|
||||
fix off by one error in the queue size check of p54_tx_qos_accounting_alloc()
|
||||
|
||||
Coverity CID: 13314
|
||||
|
||||
Signed-off-by: Darren Jenkins <darrenrjenkins@gmail.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/p54/txrx.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c
|
||||
index 0e8f694..6605799 100644
|
||||
--- a/drivers/net/wireless/p54/txrx.c
|
||||
+++ b/drivers/net/wireless/p54/txrx.c
|
||||
@@ -186,7 +186,7 @@ static int p54_tx_qos_accounting_alloc(struct p54_common *priv,
|
||||
struct p54_tx_queue_stats *queue;
|
||||
unsigned long flags;
|
||||
|
||||
- if (WARN_ON(p54_queue > P54_QUEUE_NUM))
|
||||
+ if (WARN_ON(p54_queue >= P54_QUEUE_NUM))
|
||||
return -EINVAL;
|
||||
|
||||
queue = &priv->tx_stats[p54_queue];
|
||||
--
|
||||
1.6.5
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Wed, 17 Mar 2010 13:48:06 -0700
|
||||
Subject: [PATCH] drm/i915: Stop trying to use ACPI lid status to determine LVDS connection.
|
||||
|
||||
I've been getting more and more quirk reports about this. It seems
|
||||
clear at this point that other OSes are not using this for determining
|
||||
whether the integrated panel should be turned on, and it is not
|
||||
reliable for doing so. Better to light up an unintended panel than to
|
||||
not light up the only usable output on the system.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
[bwh: Backport to drm-2.6.33]
|
||||
|
||||
--- a/drivers/gpu/drm/i915/i915_drv.h
|
||||
+++ b/drivers/gpu/drm/i915/i915_drv.h
|
||||
@@ -1045,6 +1045,13 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
|
||||
#define IS_I9XX(dev) (INTEL_INFO(dev)->is_i9xx)
|
||||
#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
|
||||
|
||||
+#define IS_GEN3(dev) (IS_I915G(dev) || \
|
||||
+ IS_I915GM(dev) || \
|
||||
+ IS_I945G(dev) || \
|
||||
+ IS_I945GM(dev) || \
|
||||
+ IS_G33(dev) || \
|
||||
+ IS_PINEVIEW(dev))
|
||||
+
|
||||
#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
|
||||
|
||||
/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
|
||||
--- a/drivers/gpu/drm/i915/intel_lvds.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lvds.c
|
||||
@@ -599,53 +599,6 @@ static void intel_lvds_mode_set(struct drm_encoder *encoder,
|
||||
I915_WRITE(PFIT_CONTROL, lvds_priv->pfit_control);
|
||||
}
|
||||
|
||||
-/* Some lid devices report incorrect lid status, assume they're connected */
|
||||
-static const struct dmi_system_id bad_lid_status[] = {
|
||||
- {
|
||||
- .ident = "Compaq nx9020",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "3084"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- .ident = "Samsung SX20S",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Samsung Electronics"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "SX20S"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- .ident = "Aspire One",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire one"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- .ident = "Aspire 1810T",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1810T"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- .ident = "PC-81005",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "MALATA"),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "PC-81005"),
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- .ident = "Clevo M5x0N",
|
||||
- .matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "M5x0N"),
|
||||
- },
|
||||
- },
|
||||
- { }
|
||||
-};
|
||||
-
|
||||
/**
|
||||
* Detect the LVDS connection.
|
||||
*
|
||||
@@ -661,12 +614,9 @@ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connect
|
||||
/* ACPI lid methods were generally unreliable in this generation, so
|
||||
* don't even bother.
|
||||
*/
|
||||
- if (IS_I8XX(dev))
|
||||
+ if (IS_I8XX(dev) || IS_GEN3(dev))
|
||||
return connector_status_connected;
|
||||
|
||||
- if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())
|
||||
- status = connector_status_disconnected;
|
||||
-
|
||||
return status;
|
||||
}
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
From 7aac5b711ff4c64bad5a6027cf6d38f1bbd53efe Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Tue, 20 Apr 2010 18:30:37 +1000
|
||||
Subject: [PATCH] drm/radeon/kms: further spread spectrum fixes
|
||||
|
||||
Adjust modeset ordering to fix spread spectrum.
|
||||
The spread spectrum command table relies on the
|
||||
crtc routing to already be set in order to work
|
||||
properly on some asics.
|
||||
|
||||
Should fix fdo bug 25741.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
|
||||
Conflicts:
|
||||
|
||||
drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
---
|
||||
drivers/gpu/drm/radeon/atombios_crtc.c | 5 +++++
|
||||
drivers/gpu/drm/radeon/radeon_encoders.c | 25 +++++++++++++++----------
|
||||
2 files changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
index c076eac..e70b575 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
@@ -1115,6 +1115,11 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||
|
||||
static void atombios_crtc_prepare(struct drm_crtc *crtc)
|
||||
{
|
||||
+ struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
||||
+
|
||||
+ /* pick pll */
|
||||
+ radeon_crtc->pll_id = radeon_atom_pick_pll(crtc);
|
||||
+
|
||||
atombios_lock_crtc(crtc, ATOM_ENABLE);
|
||||
atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
index cac9e06..ff28ad8 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
@@ -1207,6 +1207,9 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
|
||||
}
|
||||
|
||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
+
|
||||
+ /* update scratch regs with new routing */
|
||||
+ radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1317,19 +1320,9 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
- struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);
|
||||
|
||||
- if (radeon_encoder->active_device &
|
||||
- (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) {
|
||||
- struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
- if (dig)
|
||||
- dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);
|
||||
- }
|
||||
radeon_encoder->pixel_clock = adjusted_mode->clock;
|
||||
|
||||
- radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id);
|
||||
- atombios_set_encoder_crtc_source(encoder);
|
||||
-
|
||||
if (ASIC_IS_AVIVO(rdev)) {
|
||||
if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT))
|
||||
atombios_yuv_setup(encoder, true);
|
||||
@@ -1483,8 +1476,20 @@ radeon_atom_dac_detect(struct drm_encoder *encoder, struct drm_connector *connec
|
||||
|
||||
static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
+
|
||||
+ if (radeon_encoder->active_device &
|
||||
+ (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) {
|
||||
+ struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||
+ if (dig)
|
||||
+ dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);
|
||||
+ }
|
||||
+
|
||||
radeon_atom_output_lock(encoder, true);
|
||||
radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||
+
|
||||
+ /* this is needed for the pll/ss setup to work correctly in some cases */
|
||||
+ atombios_set_encoder_crtc_source(encoder);
|
||||
}
|
||||
|
||||
static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
|
||||
--
|
||||
1.6.5.2
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
From: Theodore Ts'o <tytso@mit.edu>
|
||||
Date: Tue, 20 Apr 2010 20:51:59 +0000 (-0400)
|
||||
Subject: ext4: Issue the discard operation *before* releasing the blocks to be reused
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=b90f687018e6d6c77d981b09203780f7001407e5
|
||||
|
||||
ext4: Issue the discard operation *before* releasing the blocks to be reused
|
||||
|
||||
[ backported to 2.6.3[23] ]
|
||||
|
||||
Otherwise, we can end up having data corruption because the blocks
|
||||
could get reused and then discarded!
|
||||
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=15579
|
||||
|
||||
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
|
||||
---
|
||||
|
||||
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
|
||||
index 54df209..e5ab41b 100644
|
||||
--- a/fs/ext4/mballoc.c
|
||||
+++ b/fs/ext4/mballoc.c
|
||||
@@ -2534,6 +2534,20 @@ static void release_blocks_on_commit(journal_t *journal, transaction_t *txn)
|
||||
mb_debug(1, "gonna free %u blocks in group %u (0x%p):",
|
||||
entry->count, entry->group, entry);
|
||||
|
||||
+ if (test_opt(sb, DISCARD)) {
|
||||
+ ext4_fsblk_t discard_block;
|
||||
+ struct ext4_super_block *es = EXT4_SB(sb)->s_es;
|
||||
+
|
||||
+ discard_block = (ext4_fsblk_t)entry->group *
|
||||
+ EXT4_BLOCKS_PER_GROUP(sb)
|
||||
+ + entry->start_blk
|
||||
+ + le32_to_cpu(es->s_first_data_block);
|
||||
+ trace_ext4_discard_blocks(sb,
|
||||
+ (unsigned long long)discard_block,
|
||||
+ entry->count);
|
||||
+ sb_issue_discard(sb, discard_block, entry->count);
|
||||
+ }
|
||||
+
|
||||
err = ext4_mb_load_buddy(sb, entry->group, &e4b);
|
||||
/* we expect to find existing buddy because it's pinned */
|
||||
BUG_ON(err != 0);
|
||||
@@ -2555,19 +2566,6 @@ static void release_blocks_on_commit(journal_t *journal, transaction_t *txn)
|
||||
page_cache_release(e4b.bd_bitmap_page);
|
||||
}
|
||||
ext4_unlock_group(sb, entry->group);
|
||||
- if (test_opt(sb, DISCARD)) {
|
||||
- ext4_fsblk_t discard_block;
|
||||
- struct ext4_super_block *es = EXT4_SB(sb)->s_es;
|
||||
-
|
||||
- discard_block = (ext4_fsblk_t)entry->group *
|
||||
- EXT4_BLOCKS_PER_GROUP(sb)
|
||||
- + entry->start_blk
|
||||
- + le32_to_cpu(es->s_first_data_block);
|
||||
- trace_ext4_discard_blocks(sb,
|
||||
- (unsigned long long)discard_block,
|
||||
- entry->count);
|
||||
- sb_issue_discard(sb, discard_block, entry->count);
|
||||
- }
|
||||
kmem_cache_free(ext4_free_ext_cachep, entry);
|
||||
ext4_mb_release_desc(&e4b);
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
From 5c659322a904a7cc0265e7b183372b9bdebec6db Mon Sep 17 00:00:00 2001
|
||||
From: Ayaz Abdulla <aabdulla@nvidia.com>
|
||||
Date: Tue, 13 Apr 2010 18:49:51 -0700
|
||||
Subject: [PATCH] forcedeth: fix tx limit2 flag check
|
||||
|
||||
This is a fix for bug 572201 @ bugs.debian.org
|
||||
|
||||
This patch fixes the TX_LIMIT feature flag. The previous logic check
|
||||
for TX_LIMIT2 also took into account a device that only had TX_LIMIT
|
||||
set.
|
||||
|
||||
Reported-by: Stephen Mulcahu <stephen.mulcahy@deri.org>
|
||||
Reported-by: Ben Huchings <ben@decadent.org.uk>
|
||||
Signed-off-by: Ayaz Abdulla <aabdulla@nvidia.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/forcedeth.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
|
||||
index 73b260c..5c98f7c 100644
|
||||
--- a/drivers/net/forcedeth.c
|
||||
+++ b/drivers/net/forcedeth.c
|
||||
@@ -5899,7 +5899,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
|
||||
/* Limit the number of tx's outstanding for hw bug */
|
||||
if (id->driver_data & DEV_NEED_TX_LIMIT) {
|
||||
np->tx_limit = 1;
|
||||
- if ((id->driver_data & DEV_NEED_TX_LIMIT2) &&
|
||||
+ if (((id->driver_data & DEV_NEED_TX_LIMIT2) == DEV_NEED_TX_LIMIT2) &&
|
||||
pci_dev->revision >= 0xA2)
|
||||
np->tx_limit = 0;
|
||||
}
|
||||
--
|
||||
1.7.0.3
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
From 23be7468e8802a2ac1de6ee3eecb3ec7f14dc703 Mon Sep 17 00:00:00 2001
|
||||
From: Mel Gorman <mel@csn.ul.ie>
|
||||
Date: Fri, 23 Apr 2010 13:17:56 -0400
|
||||
Subject: hugetlb: fix infinite loop in get_futex_key() when backed by huge pages
|
||||
|
||||
From: Mel Gorman <mel@csn.ul.ie>
|
||||
|
||||
commit 23be7468e8802a2ac1de6ee3eecb3ec7f14dc703 upstream.
|
||||
|
||||
If a futex key happens to be located within a huge page mapped
|
||||
MAP_PRIVATE, get_futex_key() can go into an infinite loop waiting for a
|
||||
page->mapping that will never exist.
|
||||
|
||||
See https://bugzilla.redhat.com/show_bug.cgi?id=552257 for more details
|
||||
about the problem.
|
||||
|
||||
This patch makes page->mapping a poisoned value that includes
|
||||
PAGE_MAPPING_ANON mapped MAP_PRIVATE. This is enough for futex to
|
||||
continue but because of PAGE_MAPPING_ANON, the poisoned value is not
|
||||
dereferenced or used by futex. No other part of the VM should be
|
||||
dereferencing the page->mapping of a hugetlbfs page as its page cache is
|
||||
not on the LRU.
|
||||
|
||||
This patch fixes the problem with the test case described in the bugzilla.
|
||||
|
||||
[akpm@linux-foundation.org: mel cant spel]
|
||||
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
|
||||
Acked-by: Peter Zijlstra <peterz@infradead.org>
|
||||
Acked-by: Darren Hart <darren@dvhart.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---
|
||||
include/linux/poison.h | 9 +++++++++
|
||||
mm/hugetlb.c | 5 ++++-
|
||||
2 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/linux/poison.h
|
||||
+++ b/include/linux/poison.h
|
||||
@@ -48,6 +48,15 @@
|
||||
#define POISON_FREE 0x6b /* for use-after-free poisoning */
|
||||
#define POISON_END 0xa5 /* end-byte of poisoning */
|
||||
|
||||
+/********** mm/hugetlb.c **********/
|
||||
+/*
|
||||
+ * Private mappings of hugetlb pages use this poisoned value for
|
||||
+ * page->mapping. The core VM should not be doing anything with this mapping
|
||||
+ * but futex requires the existence of some page->mapping value even though it
|
||||
+ * is unused if PAGE_MAPPING_ANON is set.
|
||||
+ */
|
||||
+#define HUGETLB_POISON ((void *)(0x00300300 + POISON_POINTER_DELTA + PAGE_MAPPING_ANON))
|
||||
+
|
||||
/********** arch/$ARCH/mm/init.c **********/
|
||||
#define POISON_FREE_INITMEM 0xcc
|
||||
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -545,6 +545,7 @@ static void free_huge_page(struct page *
|
||||
|
||||
mapping = (struct address_space *) page_private(page);
|
||||
set_page_private(page, 0);
|
||||
+ page->mapping = NULL;
|
||||
BUG_ON(page_count(page));
|
||||
INIT_LIST_HEAD(&page->lru);
|
||||
|
||||
@@ -2095,8 +2096,10 @@ retry:
|
||||
spin_lock(&inode->i_lock);
|
||||
inode->i_blocks += blocks_per_huge_page(h);
|
||||
spin_unlock(&inode->i_lock);
|
||||
- } else
|
||||
+ } else {
|
||||
lock_page(page);
|
||||
+ page->mapping = HUGETLB_POISON;
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
|
@ -1,73 +0,0 @@
|
|||
From d87ff58fda926fe5cb01214cccf1c72422ac776d Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <error27@gmail.com>
|
||||
Date: Mon, 26 Apr 2010 23:20:12 +0000
|
||||
Subject: [PATCH] ipheth: potential null dereferences on error path
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The calls to usb_free_buffer() dereference rx_urb and tx_urb in the
|
||||
parameter list but those could be NULL.
|
||||
|
||||
Signed-off-by: Dan Carpenter <error27@gmail.com>
|
||||
Acked-by: L. Alberto Giménez <agimenez@sysvalve.es>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/ipheth.c | 15 ++++++++-------
|
||||
1 files changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
|
||||
index fd10331..418825d 100644
|
||||
--- a/drivers/net/usb/ipheth.c
|
||||
+++ b/drivers/net/usb/ipheth.c
|
||||
@@ -122,25 +122,25 @@ static int ipheth_alloc_urbs(struct ipheth_device *iphone)
|
||||
|
||||
tx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (tx_urb == NULL)
|
||||
- goto error;
|
||||
+ goto error_nomem;
|
||||
|
||||
rx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (rx_urb == NULL)
|
||||
- goto error;
|
||||
+ goto free_tx_urb;
|
||||
|
||||
tx_buf = usb_buffer_alloc(iphone->udev,
|
||||
IPHETH_BUF_SIZE,
|
||||
GFP_KERNEL,
|
||||
&tx_urb->transfer_dma);
|
||||
if (tx_buf == NULL)
|
||||
- goto error;
|
||||
+ goto free_rx_urb;
|
||||
|
||||
rx_buf = usb_buffer_alloc(iphone->udev,
|
||||
IPHETH_BUF_SIZE,
|
||||
GFP_KERNEL,
|
||||
&rx_urb->transfer_dma);
|
||||
if (rx_buf == NULL)
|
||||
- goto error;
|
||||
+ goto free_tx_buf;
|
||||
|
||||
|
||||
iphone->tx_urb = tx_urb;
|
||||
@@ -149,13 +149,14 @@ static int ipheth_alloc_urbs(struct ipheth_device *iphone)
|
||||
iphone->rx_buf = rx_buf;
|
||||
return 0;
|
||||
|
||||
-error:
|
||||
- usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, rx_buf,
|
||||
- rx_urb->transfer_dma);
|
||||
+free_tx_buf:
|
||||
usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, tx_buf,
|
||||
tx_urb->transfer_dma);
|
||||
+free_rx_urb:
|
||||
usb_free_urb(rx_urb);
|
||||
+free_tx_urb:
|
||||
usb_free_urb(tx_urb);
|
||||
+error_nomem:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.0.3
|
||||
|
|
@ -1,148 +0,0 @@
|
|||
From: Tejun Heo <tj@kernel.org>
|
||||
Subject: libata,ata_piix: detect and clear spurious IRQs
|
||||
Patch-Mainline: Backported from changes pending for 2.6.34
|
||||
References: bnc#445872, bnc#589449
|
||||
|
||||
Backport spurious IRQ handling from 2.6.34. It isn't exactly the same
|
||||
form in that it doesn't use callbacks but implements custom
|
||||
piix_interrupt() but should function the same. This protects ata_piix
|
||||
against nobody-cared which gets reported not so rarely.
|
||||
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Signed-off-by: Tejun Heo <teheo@suse.de>
|
||||
---
|
||||
drivers/ata/ata_piix.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
drivers/ata/libata-sff.c | 12 ++++++-
|
||||
2 files changed, 85 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: linux-2.6.32-SLE11-SP1/drivers/ata/ata_piix.c
|
||||
===================================================================
|
||||
--- linux-2.6.32-SLE11-SP1.orig/drivers/ata/ata_piix.c
|
||||
+++ linux-2.6.32-SLE11-SP1/drivers/ata/ata_piix.c
|
||||
@@ -949,6 +949,80 @@ static int piix_sidpr_scr_read(struct at
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static irqreturn_t piix_interrupt(int irq, void *dev_instance)
|
||||
+{
|
||||
+ struct ata_host *host = dev_instance;
|
||||
+ bool retried = false;
|
||||
+ unsigned int i;
|
||||
+ unsigned int handled = 0, polling = 0, idle = 0;
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&host->lock, flags);
|
||||
+retry:
|
||||
+ handled = idle = polling = 0;
|
||||
+ for (i = 0; i < host->n_ports; i++) {
|
||||
+ struct ata_port *ap = host->ports[i];
|
||||
+ struct ata_queued_cmd *qc;
|
||||
+
|
||||
+ if (ata_port_is_dummy(ap))
|
||||
+ continue;
|
||||
+
|
||||
+ qc = ata_qc_from_tag(ap, ap->link.active_tag);
|
||||
+ if (qc) {
|
||||
+ if (!(qc->tf.flags & ATA_TFLAG_POLLING))
|
||||
+ handled |= ata_sff_host_intr(ap, qc);
|
||||
+ else
|
||||
+ polling |= 1 << i;
|
||||
+ } else
|
||||
+ idle |= 1 << i;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * If no port was expecting IRQ but the controller is actually
|
||||
+ * asserting IRQ line, nobody cared will ensue. Check IRQ
|
||||
+ * pending status if available and clear spurious IRQ.
|
||||
+ */
|
||||
+ if (!handled && !retried) {
|
||||
+ bool retry = false;
|
||||
+
|
||||
+ for (i = 0; i < host->n_ports; i++) {
|
||||
+ struct ata_port *ap = host->ports[i];
|
||||
+ u8 host_stat;
|
||||
+
|
||||
+ if (polling & (1 << i))
|
||||
+ continue;
|
||||
+
|
||||
+ if (unlikely(!ap->ioaddr.bmdma_addr))
|
||||
+ continue;
|
||||
+
|
||||
+ host_stat = ap->ops->bmdma_status(ap);
|
||||
+ if (!(host_stat & ATA_DMA_INTR))
|
||||
+ continue;
|
||||
+
|
||||
+ if (idle & (1 << i)) {
|
||||
+ ap->ops->sff_check_status(ap);
|
||||
+ ap->ops->sff_irq_clear(ap);
|
||||
+ } else {
|
||||
+ /* clear INTRQ and check if BUSY cleared */
|
||||
+ if (!(ap->ops->sff_check_status(ap) & ATA_BUSY))
|
||||
+ retry |= true;
|
||||
+ /*
|
||||
+ * With command in flight, we can't do
|
||||
+ * sff_irq_clear() w/o racing with completion.
|
||||
+ */
|
||||
+ }
|
||||
+ }
|
||||
+ if (retry) {
|
||||
+ retried = true;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ spin_unlock_irqrestore(&host->lock, flags);
|
||||
+
|
||||
+ return IRQ_RETVAL(handled);
|
||||
+}
|
||||
+
|
||||
static int piix_sidpr_scr_write(struct ata_link *link,
|
||||
unsigned int reg, u32 val)
|
||||
{
|
||||
@@ -1607,7 +1681,7 @@ static int __devinit piix_init_one(struc
|
||||
host->flags |= ATA_HOST_PARALLEL_SCAN;
|
||||
|
||||
pci_set_master(pdev);
|
||||
- return ata_pci_sff_activate_host(host, ata_sff_interrupt, &piix_sht);
|
||||
+ return ata_pci_sff_activate_host(host, piix_interrupt, &piix_sht);
|
||||
}
|
||||
|
||||
static void piix_remove_one(struct pci_dev *pdev)
|
||||
Index: linux-2.6.32-SLE11-SP1/drivers/ata/libata-sff.c
|
||||
===================================================================
|
||||
--- linux-2.6.32-SLE11-SP1.orig/drivers/ata/libata-sff.c
|
||||
+++ linux-2.6.32-SLE11-SP1/drivers/ata/libata-sff.c
|
||||
@@ -1667,6 +1667,7 @@ unsigned int ata_sff_host_intr(struct at
|
||||
{
|
||||
struct ata_eh_info *ehi = &ap->link.eh_info;
|
||||
u8 status, host_stat = 0;
|
||||
+ bool bmdma_stopped = false;
|
||||
|
||||
VPRINTK("ata%u: protocol %d task_state %d\n",
|
||||
ap->print_id, qc->tf.protocol, ap->hsm_task_state);
|
||||
@@ -1699,6 +1700,7 @@ unsigned int ata_sff_host_intr(struct at
|
||||
|
||||
/* before we do anything else, clear DMA-Start bit */
|
||||
ap->ops->bmdma_stop(qc);
|
||||
+ bmdma_stopped = true;
|
||||
|
||||
if (unlikely(host_stat & ATA_DMA_ERR)) {
|
||||
/* error when transfering data to/from memory */
|
||||
@@ -1716,8 +1718,14 @@ unsigned int ata_sff_host_intr(struct at
|
||||
|
||||
/* check main status, clearing INTRQ if needed */
|
||||
status = ata_sff_irq_status(ap);
|
||||
- if (status & ATA_BUSY)
|
||||
- goto idle_irq;
|
||||
+ if (status & ATA_BUSY) {
|
||||
+ if (bmdma_stopped) {
|
||||
+ /* BMDMA engine is already stopped, we're screwed */
|
||||
+ qc->err_mask |= AC_ERR_HSM;
|
||||
+ ap->hsm_task_state = HSM_ST_ERR;
|
||||
+ } else
|
||||
+ goto idle_irq;
|
||||
+ }
|
||||
|
||||
/* ack bmdma irq events */
|
||||
ap->ops->sff_irq_clear(ap);
|
|
@ -1,35 +0,0 @@
|
|||
From: Mark Lord <kernel@teksavvy.com>
|
||||
Date: Wed, 7 Apr 2010 17:52:08 +0000 (-0400)
|
||||
Subject: libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2)
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=45c4d015a92f72ec47acd0c7557abdc0c8a6499d
|
||||
|
||||
libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2)
|
||||
|
||||
Most drives from Seagate, Hitachi, and possibly other brands,
|
||||
do not allow LBA28 access to sector number 0x0fffffff (2^28 - 1).
|
||||
So instead use LBA48 for such accesses.
|
||||
|
||||
This bug could bite a lot of systems, especially when the user has
|
||||
taken care to align partitions to 4KB boundaries. On misaligned systems,
|
||||
it is less likely to be encountered, since a 4KB read would end at
|
||||
0x10000000 rather than at 0x0fffffff.
|
||||
|
||||
Signed-off-by: Mark Lord <mlord@pobox.com>
|
||||
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
|
||||
---
|
||||
|
||||
diff --git a/include/linux/ata.h b/include/linux/ata.h
|
||||
index b4c85e2..700c5b9 100644
|
||||
--- a/include/linux/ata.h
|
||||
+++ b/include/linux/ata.h
|
||||
@@ -1025,8 +1025,8 @@ static inline int ata_ok(u8 status)
|
||||
|
||||
static inline int lba_28_ok(u64 block, u32 n_block)
|
||||
{
|
||||
- /* check the ending block number */
|
||||
- return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256);
|
||||
+ /* check the ending block number: must be LESS THAN 0x0fffffff */
|
||||
+ return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);
|
||||
}
|
||||
|
||||
static inline int lba_48_ok(u64 block, u32 n_block)
|
|
@ -1,180 +0,0 @@
|
|||
From d713804c6032b95cd3035014e16fadebb9655c6f Mon Sep 17 00:00:00 2001
|
||||
From: Christian Lamparter <chunkeey@googlemail.com>
|
||||
Date: Sun, 17 Jan 2010 23:19:25 +0100
|
||||
Subject: [PATCH] p54pci: move tx cleanup into tasklet
|
||||
|
||||
This patch moves the tx cleanup routines out of the critical
|
||||
interrupt context and into the (previously known as rx) tasklet.
|
||||
|
||||
The main goal of this operation is to remove the extensive
|
||||
usage of spin_lock_irqsaves in the generic p54common library.
|
||||
|
||||
The next step would be to modify p54usb to do the
|
||||
rx processing inside a tasklet (just like usbnet).
|
||||
|
||||
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/p54/p54pci.c | 56 +++++++++++++++++++------------------
|
||||
drivers/net/wireless/p54/p54pci.h | 6 ++--
|
||||
2 files changed, 32 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
|
||||
index 4bf4c21..48cae48 100644
|
||||
--- a/drivers/net/wireless/p54/p54pci.c
|
||||
+++ b/drivers/net/wireless/p54/p54pci.c
|
||||
@@ -234,25 +234,26 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
p54p_refill_rx_ring(dev, ring_index, ring, ring_limit, rx_buf);
|
||||
}
|
||||
|
||||
-/* caller must hold priv->lock */
|
||||
static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
int ring_index, struct p54p_desc *ring, u32 ring_limit,
|
||||
- void **tx_buf)
|
||||
+ struct sk_buff **tx_buf)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
struct p54p_ring_control *ring_control = priv->ring_control;
|
||||
struct p54p_desc *desc;
|
||||
+ struct sk_buff *skb;
|
||||
u32 idx, i;
|
||||
|
||||
i = (*index) % ring_limit;
|
||||
(*index) = idx = le32_to_cpu(ring_control->device_idx[1]);
|
||||
idx %= ring_limit;
|
||||
|
||||
+ spin_lock_irqsave(&priv->lock, flags);
|
||||
while (i != idx) {
|
||||
desc = &ring[i];
|
||||
- if (tx_buf[i])
|
||||
- if (FREE_AFTER_TX((struct sk_buff *) tx_buf[i]))
|
||||
- p54_free_skb(dev, tx_buf[i]);
|
||||
+
|
||||
+ skb = tx_buf[i];
|
||||
tx_buf[i] = NULL;
|
||||
|
||||
pci_unmap_single(priv->pdev, le32_to_cpu(desc->host_addr),
|
||||
@@ -263,17 +264,32 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
desc->len = 0;
|
||||
desc->flags = 0;
|
||||
|
||||
+ if (skb && FREE_AFTER_TX(skb)) {
|
||||
+ spin_unlock_irqrestore(&priv->lock, flags);
|
||||
+ p54_free_skb(dev, skb);
|
||||
+ spin_lock_irqsave(&priv->lock, flags);
|
||||
+ }
|
||||
+
|
||||
i++;
|
||||
i %= ring_limit;
|
||||
}
|
||||
+ spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
-static void p54p_rx_tasklet(unsigned long dev_id)
|
||||
+static void p54p_tasklet(unsigned long dev_id)
|
||||
{
|
||||
struct ieee80211_hw *dev = (struct ieee80211_hw *)dev_id;
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
struct p54p_ring_control *ring_control = priv->ring_control;
|
||||
|
||||
+ p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
|
||||
+ ARRAY_SIZE(ring_control->tx_mgmt),
|
||||
+ priv->tx_buf_mgmt);
|
||||
+
|
||||
+ p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
|
||||
+ ARRAY_SIZE(ring_control->tx_data),
|
||||
+ priv->tx_buf_data);
|
||||
+
|
||||
p54p_check_rx_ring(dev, &priv->rx_idx_mgmt, 2, ring_control->rx_mgmt,
|
||||
ARRAY_SIZE(ring_control->rx_mgmt), priv->rx_buf_mgmt);
|
||||
|
||||
@@ -288,38 +304,24 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct ieee80211_hw *dev = dev_id;
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
- struct p54p_ring_control *ring_control = priv->ring_control;
|
||||
__le32 reg;
|
||||
|
||||
spin_lock(&priv->lock);
|
||||
reg = P54P_READ(int_ident);
|
||||
if (unlikely(reg == cpu_to_le32(0xFFFFFFFF))) {
|
||||
- spin_unlock(&priv->lock);
|
||||
- return IRQ_HANDLED;
|
||||
+ goto out;
|
||||
}
|
||||
-
|
||||
P54P_WRITE(int_ack, reg);
|
||||
|
||||
reg &= P54P_READ(int_enable);
|
||||
|
||||
- if (reg & cpu_to_le32(ISL38XX_INT_IDENT_UPDATE)) {
|
||||
- p54p_check_tx_ring(dev, &priv->tx_idx_mgmt,
|
||||
- 3, ring_control->tx_mgmt,
|
||||
- ARRAY_SIZE(ring_control->tx_mgmt),
|
||||
- priv->tx_buf_mgmt);
|
||||
-
|
||||
- p54p_check_tx_ring(dev, &priv->tx_idx_data,
|
||||
- 1, ring_control->tx_data,
|
||||
- ARRAY_SIZE(ring_control->tx_data),
|
||||
- priv->tx_buf_data);
|
||||
-
|
||||
- tasklet_schedule(&priv->rx_tasklet);
|
||||
-
|
||||
- } else if (reg & cpu_to_le32(ISL38XX_INT_IDENT_INIT))
|
||||
+ if (reg & cpu_to_le32(ISL38XX_INT_IDENT_UPDATE))
|
||||
+ tasklet_schedule(&priv->tasklet);
|
||||
+ else if (reg & cpu_to_le32(ISL38XX_INT_IDENT_INIT))
|
||||
complete(&priv->boot_comp);
|
||||
|
||||
+out:
|
||||
spin_unlock(&priv->lock);
|
||||
-
|
||||
return reg ? IRQ_HANDLED : IRQ_NONE;
|
||||
}
|
||||
|
||||
@@ -368,7 +370,7 @@ static void p54p_stop(struct ieee80211_hw *dev)
|
||||
unsigned int i;
|
||||
struct p54p_desc *desc;
|
||||
|
||||
- tasklet_kill(&priv->rx_tasklet);
|
||||
+ tasklet_kill(&priv->tasklet);
|
||||
|
||||
P54P_WRITE(int_enable, cpu_to_le32(0));
|
||||
P54P_READ(int_enable);
|
||||
@@ -559,7 +561,7 @@ static int __devinit p54p_probe(struct pci_dev *pdev,
|
||||
priv->common.tx = p54p_tx;
|
||||
|
||||
spin_lock_init(&priv->lock);
|
||||
- tasklet_init(&priv->rx_tasklet, p54p_rx_tasklet, (unsigned long)dev);
|
||||
+ tasklet_init(&priv->tasklet, p54p_tasklet, (unsigned long)dev);
|
||||
|
||||
err = request_firmware(&priv->firmware, "isl3886pci",
|
||||
&priv->pdev->dev);
|
||||
diff --git a/drivers/net/wireless/p54/p54pci.h b/drivers/net/wireless/p54/p54pci.h
|
||||
index fbb6839..2feead6 100644
|
||||
--- a/drivers/net/wireless/p54/p54pci.h
|
||||
+++ b/drivers/net/wireless/p54/p54pci.h
|
||||
@@ -92,7 +92,7 @@ struct p54p_priv {
|
||||
struct p54_common common;
|
||||
struct pci_dev *pdev;
|
||||
struct p54p_csr __iomem *map;
|
||||
- struct tasklet_struct rx_tasklet;
|
||||
+ struct tasklet_struct tasklet;
|
||||
const struct firmware *firmware;
|
||||
spinlock_t lock;
|
||||
struct p54p_ring_control *ring_control;
|
||||
@@ -101,8 +101,8 @@ struct p54p_priv {
|
||||
u32 rx_idx_mgmt, tx_idx_mgmt;
|
||||
struct sk_buff *rx_buf_data[8];
|
||||
struct sk_buff *rx_buf_mgmt[4];
|
||||
- void *tx_buf_data[32];
|
||||
- void *tx_buf_mgmt[4];
|
||||
+ struct sk_buff *tx_buf_data[32];
|
||||
+ struct sk_buff *tx_buf_mgmt[4];
|
||||
struct completion boot_comp;
|
||||
};
|
||||
|
||||
--
|
||||
1.6.5
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From b92f7d30830a319148df2943b7565989494e5ad1 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Lamparter <chunkeey@googlemail.com>
|
||||
Date: Fri, 22 Jan 2010 08:01:11 +0100
|
||||
Subject: [PATCH] p54pci: revise tx locking
|
||||
|
||||
This patch continues the effort which began with:
|
||||
"[PATCH] p54pci: move tx cleanup into tasklet".
|
||||
|
||||
Thanks to these changes, p54pci's interrupt & tx
|
||||
cleanup routines can be made lock-less.
|
||||
|
||||
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/p54/p54pci.c | 16 ++++------------
|
||||
1 files changed, 4 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
|
||||
index 48cae48..bda29c0 100644
|
||||
--- a/drivers/net/wireless/p54/p54pci.c
|
||||
+++ b/drivers/net/wireless/p54/p54pci.c
|
||||
@@ -238,7 +238,6 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
int ring_index, struct p54p_desc *ring, u32 ring_limit,
|
||||
struct sk_buff **tx_buf)
|
||||
{
|
||||
- unsigned long flags;
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
struct p54p_ring_control *ring_control = priv->ring_control;
|
||||
struct p54p_desc *desc;
|
||||
@@ -249,7 +248,6 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
(*index) = idx = le32_to_cpu(ring_control->device_idx[1]);
|
||||
idx %= ring_limit;
|
||||
|
||||
- spin_lock_irqsave(&priv->lock, flags);
|
||||
while (i != idx) {
|
||||
desc = &ring[i];
|
||||
|
||||
@@ -264,16 +262,12 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
|
||||
desc->len = 0;
|
||||
desc->flags = 0;
|
||||
|
||||
- if (skb && FREE_AFTER_TX(skb)) {
|
||||
- spin_unlock_irqrestore(&priv->lock, flags);
|
||||
+ if (skb && FREE_AFTER_TX(skb))
|
||||
p54_free_skb(dev, skb);
|
||||
- spin_lock_irqsave(&priv->lock, flags);
|
||||
- }
|
||||
|
||||
i++;
|
||||
i %= ring_limit;
|
||||
}
|
||||
- spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
static void p54p_tasklet(unsigned long dev_id)
|
||||
@@ -306,7 +300,6 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
__le32 reg;
|
||||
|
||||
- spin_lock(&priv->lock);
|
||||
reg = P54P_READ(int_ident);
|
||||
if (unlikely(reg == cpu_to_le32(0xFFFFFFFF))) {
|
||||
goto out;
|
||||
@@ -321,15 +314,14 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
|
||||
complete(&priv->boot_comp);
|
||||
|
||||
out:
|
||||
- spin_unlock(&priv->lock);
|
||||
return reg ? IRQ_HANDLED : IRQ_NONE;
|
||||
}
|
||||
|
||||
static void p54p_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
struct p54p_priv *priv = dev->priv;
|
||||
struct p54p_ring_control *ring_control = priv->ring_control;
|
||||
- unsigned long flags;
|
||||
struct p54p_desc *desc;
|
||||
dma_addr_t mapping;
|
||||
u32 device_idx, idx, i;
|
||||
@@ -370,14 +362,14 @@ static void p54p_stop(struct ieee80211_hw *dev)
|
||||
unsigned int i;
|
||||
struct p54p_desc *desc;
|
||||
|
||||
- tasklet_kill(&priv->tasklet);
|
||||
-
|
||||
P54P_WRITE(int_enable, cpu_to_le32(0));
|
||||
P54P_READ(int_enable);
|
||||
udelay(10);
|
||||
|
||||
free_irq(priv->pdev->irq, dev);
|
||||
|
||||
+ tasklet_kill(&priv->tasklet);
|
||||
+
|
||||
P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_RESET));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(priv->rx_buf_data); i++) {
|
||||
--
|
||||
1.6.5
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 15a69a81731d337a3d9db51692ff8704c1114f43 Mon Sep 17 00:00:00 2001
|
||||
From: Shimada Hirofumi <hirofumi@flycat.org>
|
||||
Date: Sun, 14 Feb 2010 04:16:16 +0900
|
||||
Subject: [PATCH] p54usb: Add usbid for Corega CG-WLUSB2GT.
|
||||
|
||||
Signed-off-by: Shimada Hirofumi <hirofumi@flycat.org>
|
||||
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/p54/p54usb.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c
|
||||
index 92af9b9..dcb484b 100644
|
||||
--- a/drivers/net/wireless/p54/p54usb.c
|
||||
+++ b/drivers/net/wireless/p54/p54usb.c
|
||||
@@ -36,6 +36,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
|
||||
/* Version 1 devices (pci chip + net2280) */
|
||||
{USB_DEVICE(0x0506, 0x0a11)}, /* 3COM 3CRWE254G72 */
|
||||
{USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */
|
||||
+ {USB_DEVICE(0x07aa, 0x001c)}, /* Corega CG-WLUSB2GT */
|
||||
{USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */
|
||||
{USB_DEVICE(0x083a, 0x4502)}, /* Siemens Gigaset USB Adapter */
|
||||
{USB_DEVICE(0x083a, 0x5501)}, /* Phillips CPWUA054 */
|
||||
--
|
||||
1.6.5
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
From: Jeff Mahoney <jeffm@suse.com>
|
||||
Subject: [PATCH] reiserfs: Fix permissions on .reiserfs_priv
|
||||
References: bnc#593906 CVE-2010-1146
|
||||
Patch-mainline: Submitted 8 Apr 2010
|
||||
|
||||
Commit 677c9b2e393a0cd203bd54e9c18b012b2c73305a removed the magic
|
||||
from the lookup code to hide the .reiserfs_priv directory since it
|
||||
was getting loaded at mount-time instead. The intent was that the
|
||||
entry would be hidden from the user via a poisoned d_compare, but
|
||||
this was faulty.
|
||||
|
||||
This introduced a security issue where unpriviledged users could
|
||||
access and modify extended attributes or ACLs belonging to other
|
||||
users, including root.
|
||||
|
||||
This patch resolves the issue by properly hiding .reiserfs_priv. This
|
||||
was the intent of the xattr poisoning code, but it appears to have
|
||||
never worked as expected. This is fixed by using d_revalidate instead
|
||||
of d_compare.
|
||||
|
||||
This patch makes -oexpose_privroot a no-op. I'm fine leaving it this
|
||||
way. The effort involved in working out the corner cases wrt permissions
|
||||
and caching outweigh the benefit of the feature.
|
||||
|
||||
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
|
||||
---
|
||||
|
||||
fs/reiserfs/dir.c | 2 --
|
||||
fs/reiserfs/xattr.c | 17 ++++-------------
|
||||
2 files changed, 4 insertions(+), 15 deletions(-)
|
||||
|
||||
--- a/fs/reiserfs/dir.c
|
||||
+++ b/fs/reiserfs/dir.c
|
||||
@@ -45,8 +45,6 @@ static inline bool is_privroot_deh(struc
|
||||
struct reiserfs_de_head *deh)
|
||||
{
|
||||
struct dentry *privroot = REISERFS_SB(dir->d_sb)->priv_root;
|
||||
- if (reiserfs_expose_privroot(dir->d_sb))
|
||||
- return 0;
|
||||
return (dir == dir->d_parent && privroot->d_inode &&
|
||||
deh->deh_objectid == INODE_PKEY(privroot->d_inode)->k_objectid);
|
||||
}
|
||||
--- a/fs/reiserfs/xattr.c
|
||||
+++ b/fs/reiserfs/xattr.c
|
||||
@@ -972,21 +972,13 @@ int reiserfs_permission(struct inode *in
|
||||
return generic_permission(inode, mask, NULL);
|
||||
}
|
||||
|
||||
-/* This will catch lookups from the fs root to .reiserfs_priv */
|
||||
-static int
|
||||
-xattr_lookup_poison(struct dentry *dentry, struct qstr *q1, struct qstr *name)
|
||||
+static int xattr_hide_revalidate(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
- struct dentry *priv_root = REISERFS_SB(dentry->d_sb)->priv_root;
|
||||
- if (container_of(q1, struct dentry, d_name) == priv_root)
|
||||
- return -ENOENT;
|
||||
- if (q1->len == name->len &&
|
||||
- !memcmp(q1->name, name->name, name->len))
|
||||
- return 0;
|
||||
- return 1;
|
||||
+ return -EPERM;
|
||||
}
|
||||
|
||||
static const struct dentry_operations xattr_lookup_poison_ops = {
|
||||
- .d_compare = xattr_lookup_poison,
|
||||
+ .d_revalidate = xattr_hide_revalidate,
|
||||
};
|
||||
|
||||
int reiserfs_lookup_privroot(struct super_block *s)
|
||||
@@ -1000,8 +992,7 @@ int reiserfs_lookup_privroot(struct supe
|
||||
strlen(PRIVROOT_NAME));
|
||||
if (!IS_ERR(dentry)) {
|
||||
REISERFS_SB(s)->priv_root = dentry;
|
||||
- if (!reiserfs_expose_privroot(s))
|
||||
- s->s_root->d_op = &xattr_lookup_poison_ops;
|
||||
+ dentry->d_op = &xattr_lookup_poison_ops;
|
||||
if (dentry->d_inode)
|
||||
dentry->d_inode->i_flags |= S_PRIVATE;
|
||||
} else
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,209 +0,0 @@
|
|||
commit d0021b252eaf65ca07ed14f0d66425dd9ccab9a6
|
||||
Author: Neil Horman <nhorman@tuxdriver.com>
|
||||
Date: Wed Mar 3 08:31:23 2010 +0000
|
||||
|
||||
tipc: Fix oops on send prior to entering networked mode (v3)
|
||||
|
||||
Fix TIPC to disallow sending to remote addresses prior to entering NET_MODE
|
||||
|
||||
user programs can oops the kernel by sending datagrams via AF_TIPC prior to
|
||||
entering networked mode. The following backtrace has been observed:
|
||||
|
||||
ID: 13459 TASK: ffff810014640040 CPU: 0 COMMAND: "tipc-client"
|
||||
[exception RIP: tipc_node_select_next_hop+90]
|
||||
RIP: ffffffff8869d3c3 RSP: ffff81002d9a5ab8 RFLAGS: 00010202
|
||||
RAX: 0000000000000001 RBX: 0000000000000001 RCX: 0000000000000001
|
||||
RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000001001001
|
||||
RBP: 0000000001001001 R8: 0074736575716552 R9: 0000000000000000
|
||||
R10: ffff81003fbd0680 R11: 00000000000000c8 R12: 0000000000000008
|
||||
R13: 0000000000000001 R14: 0000000000000001 R15: ffff810015c6ca00
|
||||
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
|
||||
RIP: 0000003cbd8d49a3 RSP: 00007fffc84e0be8 RFLAGS: 00010206
|
||||
RAX: 000000000000002c RBX: ffffffff8005d116 RCX: 0000000000000000
|
||||
RDX: 0000000000000008 RSI: 00007fffc84e0c00 RDI: 0000000000000003
|
||||
RBP: 0000000000000000 R8: 00007fffc84e0c10 R9: 0000000000000010
|
||||
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
|
||||
R13: 00007fffc84e0d10 R14: 0000000000000000 R15: 00007fffc84e0c30
|
||||
ORIG_RAX: 000000000000002c CS: 0033 SS: 002b
|
||||
|
||||
What happens is that, when the tipc module in inserted it enters a standalone
|
||||
node mode in which communication to its own address is allowed <0.0.0> but not
|
||||
to other addresses, since the appropriate data structures have not been
|
||||
allocated yet (specifically the tipc_net pointer). There is nothing stopping a
|
||||
client from trying to send such a message however, and if that happens, we
|
||||
attempt to dereference tipc_net.zones while the pointer is still NULL, and
|
||||
explode. The fix is pretty straightforward. Since these oopses all arise from
|
||||
the dereference of global pointers prior to their assignment to allocated
|
||||
values, and since these allocations are small (about 2k total), lets convert
|
||||
these pointers to static arrays of the appropriate size. All the accesses to
|
||||
these bits consider 0/NULL to be a non match when searching, so all the lookups
|
||||
still work properly, and there is no longer a chance of a bad dererence
|
||||
anywhere. As a bonus, this lets us eliminate the setup/teardown routines for
|
||||
those pointers, and elimnates the need to preform any locking around them to
|
||||
prevent access while their being allocated/freed.
|
||||
|
||||
I've updated the tipc_net structure to behave this way to fix the exact reported
|
||||
problem, and also fixed up the tipc_bearers and media_list arrays to fix an
|
||||
obvious simmilar problem that arises from issuing tipc-config commands to
|
||||
manipulate bearers/links prior to entering networked mode
|
||||
|
||||
I've tested this for a few hours by running the sanity tests and stress test
|
||||
with the tipcutils suite, and nothing has fallen over. There have been a few
|
||||
lockdep warnings, but those were there before, and can be addressed later, as
|
||||
they didn't actually result in any deadlock.
|
||||
|
||||
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
|
||||
CC: Allan Stephens <allan.stephens@windriver.com>
|
||||
CC: David S. Miller <davem@davemloft.net>
|
||||
CC: tipc-discussion@lists.sourceforge.net
|
||||
|
||||
bearer.c | 37 ++++++-------------------------------
|
||||
bearer.h | 2 +-
|
||||
net.c | 25 ++++---------------------
|
||||
3 files changed, 11 insertions(+), 53 deletions(-)
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
|
||||
index 327011f..7809137 100644
|
||||
--- a/net/tipc/bearer.c
|
||||
+++ b/net/tipc/bearer.c
|
||||
@@ -45,10 +45,10 @@
|
||||
|
||||
#define MAX_ADDR_STR 32
|
||||
|
||||
-static struct media *media_list = NULL;
|
||||
+static struct media media_list[MAX_MEDIA];
|
||||
static u32 media_count = 0;
|
||||
|
||||
-struct bearer *tipc_bearers = NULL;
|
||||
+struct bearer tipc_bearers[MAX_BEARERS];
|
||||
|
||||
/**
|
||||
* media_name_valid - validate media name
|
||||
@@ -108,9 +108,11 @@ int tipc_register_media(u32 media_type,
|
||||
int res = -EINVAL;
|
||||
|
||||
write_lock_bh(&tipc_net_lock);
|
||||
- if (!media_list)
|
||||
- goto exit;
|
||||
|
||||
+ if (tipc_mode != TIPC_NET_MODE) {
|
||||
+ warn("Media <%s> rejected, not in networked mode yet\n", name);
|
||||
+ goto exit;
|
||||
+ }
|
||||
if (!media_name_valid(name)) {
|
||||
warn("Media <%s> rejected, illegal name\n", name);
|
||||
goto exit;
|
||||
@@ -660,33 +662,10 @@ int tipc_disable_bearer(const char *name)
|
||||
|
||||
|
||||
|
||||
-int tipc_bearer_init(void)
|
||||
-{
|
||||
- int res;
|
||||
-
|
||||
- write_lock_bh(&tipc_net_lock);
|
||||
- tipc_bearers = kcalloc(MAX_BEARERS, sizeof(struct bearer), GFP_ATOMIC);
|
||||
- media_list = kcalloc(MAX_MEDIA, sizeof(struct media), GFP_ATOMIC);
|
||||
- if (tipc_bearers && media_list) {
|
||||
- res = 0;
|
||||
- } else {
|
||||
- kfree(tipc_bearers);
|
||||
- kfree(media_list);
|
||||
- tipc_bearers = NULL;
|
||||
- media_list = NULL;
|
||||
- res = -ENOMEM;
|
||||
- }
|
||||
- write_unlock_bh(&tipc_net_lock);
|
||||
- return res;
|
||||
-}
|
||||
-
|
||||
void tipc_bearer_stop(void)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
- if (!tipc_bearers)
|
||||
- return;
|
||||
-
|
||||
for (i = 0; i < MAX_BEARERS; i++) {
|
||||
if (tipc_bearers[i].active)
|
||||
tipc_bearers[i].publ.blocked = 1;
|
||||
@@ -695,10 +674,6 @@ void tipc_bearer_stop(void)
|
||||
if (tipc_bearers[i].active)
|
||||
bearer_disable(tipc_bearers[i].publ.name);
|
||||
}
|
||||
- kfree(tipc_bearers);
|
||||
- kfree(media_list);
|
||||
- tipc_bearers = NULL;
|
||||
- media_list = NULL;
|
||||
media_count = 0;
|
||||
}
|
||||
|
||||
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h
|
||||
index ca57348..000228e 100644
|
||||
--- a/net/tipc/bearer.h
|
||||
+++ b/net/tipc/bearer.h
|
||||
@@ -114,7 +114,7 @@ struct bearer_name {
|
||||
|
||||
struct link;
|
||||
|
||||
-extern struct bearer *tipc_bearers;
|
||||
+extern struct bearer tipc_bearers[];
|
||||
|
||||
void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a);
|
||||
struct sk_buff *tipc_media_get_names(void);
|
||||
diff --git a/net/tipc/net.c b/net/tipc/net.c
|
||||
index 7906608..f25b1cd 100644
|
||||
--- a/net/tipc/net.c
|
||||
+++ b/net/tipc/net.c
|
||||
@@ -116,7 +116,8 @@
|
||||
*/
|
||||
|
||||
DEFINE_RWLOCK(tipc_net_lock);
|
||||
-struct network tipc_net = { NULL };
|
||||
+struct _zone *tipc_zones[256] = { NULL, };
|
||||
+struct network tipc_net = { tipc_zones };
|
||||
|
||||
struct tipc_node *tipc_net_select_remote_node(u32 addr, u32 ref)
|
||||
{
|
||||
@@ -158,28 +159,12 @@ void tipc_net_send_external_routes(u32 dest)
|
||||
}
|
||||
}
|
||||
|
||||
-static int net_init(void)
|
||||
-{
|
||||
- memset(&tipc_net, 0, sizeof(tipc_net));
|
||||
- tipc_net.zones = kcalloc(tipc_max_zones + 1, sizeof(struct _zone *), GFP_ATOMIC);
|
||||
- if (!tipc_net.zones) {
|
||||
- return -ENOMEM;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static void net_stop(void)
|
||||
{
|
||||
u32 z_num;
|
||||
|
||||
- if (!tipc_net.zones)
|
||||
- return;
|
||||
-
|
||||
- for (z_num = 1; z_num <= tipc_max_zones; z_num++) {
|
||||
+ for (z_num = 1; z_num <= tipc_max_zones; z_num++)
|
||||
tipc_zone_delete(tipc_net.zones[z_num]);
|
||||
- }
|
||||
- kfree(tipc_net.zones);
|
||||
- tipc_net.zones = NULL;
|
||||
}
|
||||
|
||||
static void net_route_named_msg(struct sk_buff *buf)
|
||||
@@ -282,9 +267,7 @@ int tipc_net_start(u32 addr)
|
||||
tipc_named_reinit();
|
||||
tipc_port_reinit();
|
||||
|
||||
- if ((res = tipc_bearer_init()) ||
|
||||
- (res = net_init()) ||
|
||||
- (res = tipc_cltr_init()) ||
|
||||
+ if ((res = tipc_cltr_init()) ||
|
||||
(res = tipc_bclink_init())) {
|
||||
return res;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
From 56151e753468e34aeb322af4b0309ab727c97d2e Mon Sep 17 00:00:00 2001
|
||||
From: Wufei <fei.wu@windriver.com>
|
||||
Date: Wed, 28 Apr 2010 17:42:32 -0400
|
||||
Subject: [PATCH] kgdb: don't needlessly skip PAGE_USER test for Fsl booke
|
||||
|
||||
The bypassing of this test is a leftover from 2.4 vintage
|
||||
kernels, and is no longer appropriate, or even used by KGDB.
|
||||
Currently KGDB uses probe_kernel_write() for all access to
|
||||
memory via the KGDB core, so it can simply be deleted.
|
||||
|
||||
This fixes CVE-2010-1446.
|
||||
|
||||
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
CC: Paul Mackerras <paulus@samba.org>
|
||||
CC: Kumar Gala <galak@kernel.crashing.org>
|
||||
Signed-off-by: Wufei <fei.wu@windriver.com>
|
||||
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
|
||||
---
|
||||
arch/powerpc/mm/fsl_booke_mmu.c | 5 -----
|
||||
1 files changed, 0 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c
|
||||
index c539472..1ce9dd5 100644
|
||||
--- a/arch/powerpc/mm/fsl_booke_mmu.c
|
||||
+++ b/arch/powerpc/mm/fsl_booke_mmu.c
|
||||
@@ -155,15 +155,10 @@ static void settlbcam(int index, unsigned long virt, phys_addr_t phys,
|
||||
if (cur_cpu_spec->cpu_features & MMU_FTR_BIG_PHYS)
|
||||
TLBCAM[index].MAS7 = (u64)phys >> 32;
|
||||
|
||||
-#ifndef CONFIG_KGDB /* want user access for breakpoints */
|
||||
if (flags & _PAGE_USER) {
|
||||
TLBCAM[index].MAS3 |= MAS3_UX | MAS3_UR;
|
||||
TLBCAM[index].MAS3 |= ((flags & _PAGE_RW) ? MAS3_UW : 0);
|
||||
}
|
||||
-#else
|
||||
- TLBCAM[index].MAS3 |= MAS3_UX | MAS3_UR;
|
||||
- TLBCAM[index].MAS3 |= ((flags & _PAGE_RW) ? MAS3_UW : 0);
|
||||
-#endif
|
||||
|
||||
tlbcam_addrs[index].start = virt;
|
||||
tlbcam_addrs[index].limit = virt + size - 1;
|
||||
--
|
||||
1.7.0.3
|
||||
|
|
@ -5,5 +5,5 @@
|
|||
tristate "Atheros OTUS 802.11n USB wireless support"
|
||||
+ depends on BROKEN
|
||||
depends on USB && WLAN && MAC80211
|
||||
default N
|
||||
---help---
|
||||
select WIRELESS_EXT
|
||||
select WEXT_PRIV
|
||||
|
|
|
@ -5,7 +5,6 @@ index 123fa6d..5e081b1 100644
|
|||
@@ -2,5 +2,6 @@ config RTL8192SU
|
||||
tristate "RealTek RTL8192SU Wireless LAN NIC driver"
|
||||
depends on PCI && WLAN && USB
|
||||
depends on WIRELESS_EXT
|
||||
+ depends on BROKEN
|
||||
default N
|
||||
---help---
|
||||
select WIRELESS_EXT
|
||||
select WEXT_PRIV
|
||||
|
|
|
@ -18,11 +18,11 @@ index 1c00d05..3bf888d 100644
|
|||
- adaptec/starfire_tx.bin
|
||||
fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin
|
||||
-fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw
|
||||
-fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-5.2.7.0.fw bnx2x-e1h-5.2.7.0.fw
|
||||
-fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-5.0.0.j3.fw \
|
||||
- bnx2/bnx2-rv2p-09-5.0.0.j3.fw \
|
||||
- bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw \
|
||||
- bnx2/bnx2-mips-06-5.0.0.j3.fw \
|
||||
-fw-shipped-$(CONFIG_BNX2X) += bnx2x-e1-5.2.13.0.fw bnx2x-e1h-5.2.13.0.fw
|
||||
-fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-5.0.0.j9.fw \
|
||||
- bnx2/bnx2-rv2p-09-5.0.0.j10.fw \
|
||||
- bnx2/bnx2-rv2p-09ax-5.0.0.j10.fw \
|
||||
- bnx2/bnx2-mips-06-5.0.0.j6.fw \
|
||||
- bnx2/bnx2-rv2p-06-5.0.0.j3.fw
|
||||
-fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
|
||||
-fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
From ef75f31784181c33ee7d42e361ad8d04947a2153 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexdeucher@gmail.com>
|
||||
Date: Mon, 2 Nov 2009 19:51:42 -0500
|
||||
Subject: [PATCH] drm/radeon/r600: add clarifying comment to r600 blit code
|
||||
|
||||
R6xx+ cards need to use the 3D engine to blit data which requires
|
||||
quite a bit of hw state setup. Rather than pull the whole 3D driver
|
||||
(which normally generates the 3D state) into the DRM, we opt to use
|
||||
statically generated state tables. The regsiter state and shaders
|
||||
were hand generated to support blitting functionality. See the 3D
|
||||
driver or documentation for descriptions of the registers and
|
||||
shader instructions.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_blit_shaders.c | 10 ++++++++++
|
||||
1 files changed, 10 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c b/drivers/gpu/drm/radeon/r600_blit_shaders.c
|
||||
index d745e81..5d479cf 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_blit_shaders.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c
|
||||
@@ -2,6 +2,16 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
+/*
|
||||
+ * R6xx+ cards need to use the 3D engine to blit data which requires
|
||||
+ * quite a bit of hw state setup. Rather than pull the whole 3D driver
|
||||
+ * (which normally generates the 3D state) into the DRM, we opt to use
|
||||
+ * statically generated state tables. The regsiter state and shaders
|
||||
+ * were hand generated to support blitting functionality. See the 3D
|
||||
+ * driver or documentation for descriptions of the registers and
|
||||
+ * shader instructions.
|
||||
+ */
|
||||
+
|
||||
const u32 r6xx_default_state[] =
|
||||
{
|
||||
0xc0002400,
|
||||
--
|
||||
1.5.6.3
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,638 +0,0 @@
|
|||
Subject: drivers/net/usb: Add new driver ipheth
|
||||
Date: Sun, 18 Apr 2010 08:35:16 -0000
|
||||
From: Diego Giagio <diego@giagio.com>
|
||||
|
||||
Add new driver to use tethering with an iPhone device. After initial submission,
|
||||
apply fixes to fit the new driver into the kernel standards.
|
||||
|
||||
There are still a couple of minor (almost cosmetic-level) issues, but the driver
|
||||
is fully functional right now.
|
||||
|
||||
Signed-off-by: L. Alberto Giménez <agimenez@sysvalve.es>
|
||||
Signed-off-by: Diego Giagio <diego@giagio.com>
|
||||
|
||||
---
|
||||
drivers/net/Makefile | 1 +
|
||||
drivers/net/usb/Kconfig | 12 +
|
||||
drivers/net/usb/Makefile | 1 +
|
||||
drivers/net/usb/ipheth.c | 568 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 582 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/net/usb/ipheth.c
|
||||
|
||||
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
|
||||
index a583b50..12b280a 100644
|
||||
--- a/drivers/net/Makefile
|
||||
+++ b/drivers/net/Makefile
|
||||
@@ -273,6 +273,7 @@ obj-$(CONFIG_USB_RTL8150) += usb/
|
||||
obj-$(CONFIG_USB_HSO) += usb/
|
||||
obj-$(CONFIG_USB_USBNET) += usb/
|
||||
obj-$(CONFIG_USB_ZD1201) += usb/
|
||||
+obj-$(CONFIG_USB_IPHETH) += usb/
|
||||
|
||||
obj-y += wireless/
|
||||
obj-$(CONFIG_NET_TULIP) += tulip/
|
||||
diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig
|
||||
index ba56ce4..63be4ca 100644
|
||||
--- a/drivers/net/usb/Kconfig
|
||||
+++ b/drivers/net/usb/Kconfig
|
||||
@@ -385,4 +385,16 @@ config USB_CDC_PHONET
|
||||
cellular modem, as found on most Nokia handsets with the
|
||||
"PC suite" USB profile.
|
||||
|
||||
+config USB_IPHETH
|
||||
+ tristate "Apple iPhone USB Ethernet driver"
|
||||
+ default n
|
||||
+ ---help---
|
||||
+ Module used to share Internet connection (tethering) from your
|
||||
+ iPhone (Original, 3G and 3GS) to your system.
|
||||
+ Note that you need userspace libraries and programs that are needed
|
||||
+ to pair your device with your system and that understand the iPhone
|
||||
+ protocol.
|
||||
+
|
||||
+ For more information: http://giagio.com/wiki/moin.cgi/iPhoneEthernetDriver
|
||||
+
|
||||
endmenu
|
||||
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
|
||||
index 82ea629..edb09c0 100644
|
||||
--- a/drivers/net/usb/Makefile
|
||||
+++ b/drivers/net/usb/Makefile
|
||||
@@ -23,4 +23,5 @@ obj-$(CONFIG_USB_NET_MCS7830) += mcs7830.o
|
||||
obj-$(CONFIG_USB_USBNET) += usbnet.o
|
||||
obj-$(CONFIG_USB_NET_INT51X1) += int51x1.o
|
||||
obj-$(CONFIG_USB_CDC_PHONET) += cdc-phonet.o
|
||||
+obj-$(CONFIG_USB_IPHETH) += ipheth.o
|
||||
|
||||
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
|
||||
new file mode 100644
|
||||
index 0000000..fd10331
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/usb/ipheth.c
|
||||
@@ -0,0 +1,568 @@
|
||||
+/*
|
||||
+ * ipheth.c - Apple iPhone USB Ethernet driver
|
||||
+ *
|
||||
+ * Copyright (c) 2009 Diego Giagio <diego@giagio.com>
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * 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.
|
||||
+ * 3. Neither the name of GIAGIO.COM nor the names of its contributors
|
||||
+ * may be used to endorse or promote products derived from this software
|
||||
+ * without specific prior written permission.
|
||||
+ *
|
||||
+ * Alternatively, provided that this notice is retained in full, this
|
||||
+ * software may be distributed under the terms of the GNU General
|
||||
+ * Public License ("GPL") version 2, in which case the provisions of the
|
||||
+ * GPL apply INSTEAD OF those given above.
|
||||
+ *
|
||||
+ * The provided data structures and external interfaces from this code
|
||||
+ * are not restricted to be used by modules with a GPL compatible license.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
+ * "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 COPYRIGHT
|
||||
+ * OWNER OR 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.
|
||||
+ *
|
||||
+ *
|
||||
+ * Attention: iPhone device must be paired, otherwise it won't respond to our
|
||||
+ * driver. For more info: http://giagio.com/wiki/moin.cgi/iPhoneEthernetDriver
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/errno.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/netdevice.h>
|
||||
+#include <linux/etherdevice.h>
|
||||
+#include <linux/ethtool.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include <linux/workqueue.h>
|
||||
+
|
||||
+#define USB_VENDOR_APPLE 0x05ac
|
||||
+#define USB_PRODUCT_IPHONE 0x1290
|
||||
+#define USB_PRODUCT_IPHONE_3G 0x1292
|
||||
+#define USB_PRODUCT_IPHONE_3GS 0x1294
|
||||
+
|
||||
+#define IPHETH_USBINTF_CLASS 255
|
||||
+#define IPHETH_USBINTF_SUBCLASS 253
|
||||
+#define IPHETH_USBINTF_PROTO 1
|
||||
+
|
||||
+#define IPHETH_BUF_SIZE 1516
|
||||
+#define IPHETH_TX_TIMEOUT (5 * HZ)
|
||||
+
|
||||
+#define IPHETH_INTFNUM 2
|
||||
+#define IPHETH_ALT_INTFNUM 1
|
||||
+
|
||||
+#define IPHETH_CTRL_ENDP 0x00
|
||||
+#define IPHETH_CTRL_BUF_SIZE 0x40
|
||||
+#define IPHETH_CTRL_TIMEOUT (5 * HZ)
|
||||
+
|
||||
+#define IPHETH_CMD_GET_MACADDR 0x00
|
||||
+#define IPHETH_CMD_CARRIER_CHECK 0x45
|
||||
+
|
||||
+#define IPHETH_CARRIER_CHECK_TIMEOUT round_jiffies_relative(1 * HZ)
|
||||
+#define IPHETH_CARRIER_ON 0x04
|
||||
+
|
||||
+static struct usb_device_id ipheth_table[] = {
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(
|
||||
+ USB_VENDOR_APPLE, USB_PRODUCT_IPHONE,
|
||||
+ IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
+ IPHETH_USBINTF_PROTO) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(
|
||||
+ USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3G,
|
||||
+ IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
+ IPHETH_USBINTF_PROTO) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(
|
||||
+ USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_3GS,
|
||||
+ IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS,
|
||||
+ IPHETH_USBINTF_PROTO) },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, ipheth_table);
|
||||
+
|
||||
+struct ipheth_device {
|
||||
+ struct usb_device *udev;
|
||||
+ struct usb_interface *intf;
|
||||
+ struct net_device *net;
|
||||
+ struct sk_buff *tx_skb;
|
||||
+ struct urb *tx_urb;
|
||||
+ struct urb *rx_urb;
|
||||
+ unsigned char *tx_buf;
|
||||
+ unsigned char *rx_buf;
|
||||
+ unsigned char *ctrl_buf;
|
||||
+ u8 bulk_in;
|
||||
+ u8 bulk_out;
|
||||
+ struct delayed_work carrier_work;
|
||||
+};
|
||||
+
|
||||
+static int ipheth_rx_submit(struct ipheth_device *dev, gfp_t mem_flags);
|
||||
+
|
||||
+static int ipheth_alloc_urbs(struct ipheth_device *iphone)
|
||||
+{
|
||||
+ struct urb *tx_urb = NULL;
|
||||
+ struct urb *rx_urb = NULL;
|
||||
+ u8 *tx_buf = NULL;
|
||||
+ u8 *rx_buf = NULL;
|
||||
+
|
||||
+ tx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
+ if (tx_urb == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
+ rx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
+ if (rx_urb == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
+ tx_buf = usb_buffer_alloc(iphone->udev,
|
||||
+ IPHETH_BUF_SIZE,
|
||||
+ GFP_KERNEL,
|
||||
+ &tx_urb->transfer_dma);
|
||||
+ if (tx_buf == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
+ rx_buf = usb_buffer_alloc(iphone->udev,
|
||||
+ IPHETH_BUF_SIZE,
|
||||
+ GFP_KERNEL,
|
||||
+ &rx_urb->transfer_dma);
|
||||
+ if (rx_buf == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
+
|
||||
+ iphone->tx_urb = tx_urb;
|
||||
+ iphone->rx_urb = rx_urb;
|
||||
+ iphone->tx_buf = tx_buf;
|
||||
+ iphone->rx_buf = rx_buf;
|
||||
+ return 0;
|
||||
+
|
||||
+error:
|
||||
+ usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, rx_buf,
|
||||
+ rx_urb->transfer_dma);
|
||||
+ usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, tx_buf,
|
||||
+ tx_urb->transfer_dma);
|
||||
+ usb_free_urb(rx_urb);
|
||||
+ usb_free_urb(tx_urb);
|
||||
+ return -ENOMEM;
|
||||
+}
|
||||
+
|
||||
+static void ipheth_free_urbs(struct ipheth_device *iphone)
|
||||
+{
|
||||
+ usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, iphone->rx_buf,
|
||||
+ iphone->rx_urb->transfer_dma);
|
||||
+ usb_buffer_free(iphone->udev, IPHETH_BUF_SIZE, iphone->tx_buf,
|
||||
+ iphone->tx_urb->transfer_dma);
|
||||
+ usb_free_urb(iphone->rx_urb);
|
||||
+ usb_free_urb(iphone->tx_urb);
|
||||
+}
|
||||
+
|
||||
+static void ipheth_kill_urbs(struct ipheth_device *dev)
|
||||
+{
|
||||
+ usb_kill_urb(dev->tx_urb);
|
||||
+ usb_kill_urb(dev->rx_urb);
|
||||
+}
|
||||
+
|
||||
+static void ipheth_rcvbulk_callback(struct urb *urb)
|
||||
+{
|
||||
+ struct ipheth_device *dev;
|
||||
+ struct sk_buff *skb;
|
||||
+ int status;
|
||||
+ char *buf;
|
||||
+ int len;
|
||||
+
|
||||
+ dev = urb->context;
|
||||
+ if (dev == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ status = urb->status;
|
||||
+ switch (status) {
|
||||
+ case -ENOENT:
|
||||
+ case -ECONNRESET:
|
||||
+ case -ESHUTDOWN:
|
||||
+ return;
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ default:
|
||||
+ err("%s: urb status: %d", __func__, urb->status);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ len = urb->actual_length;
|
||||
+ buf = urb->transfer_buffer;
|
||||
+
|
||||
+ skb = dev_alloc_skb(NET_IP_ALIGN + len);
|
||||
+ if (!skb) {
|
||||
+ err("%s: dev_alloc_skb: -ENOMEM", __func__);
|
||||
+ dev->net->stats.rx_dropped++;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ skb_reserve(skb, NET_IP_ALIGN);
|
||||
+ memcpy(skb_put(skb, len), buf + NET_IP_ALIGN, len - NET_IP_ALIGN);
|
||||
+ skb->dev = dev->net;
|
||||
+ skb->protocol = eth_type_trans(skb, dev->net);
|
||||
+
|
||||
+ dev->net->stats.rx_packets++;
|
||||
+ dev->net->stats.rx_bytes += len;
|
||||
+
|
||||
+ netif_rx(skb);
|
||||
+ ipheth_rx_submit(dev, GFP_ATOMIC);
|
||||
+}
|
||||
+
|
||||
+static void ipheth_sndbulk_callback(struct urb *urb)
|
||||
+{
|
||||
+ struct ipheth_device *dev;
|
||||
+
|
||||
+ dev = urb->context;
|
||||
+ if (dev == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ if (urb->status != 0 &&
|
||||
+ urb->status != -ENOENT &&
|
||||
+ urb->status != -ECONNRESET &&
|
||||
+ urb->status != -ESHUTDOWN)
|
||||
+ err("%s: urb status: %d", __func__, urb->status);
|
||||
+
|
||||
+ dev_kfree_skb_irq(dev->tx_skb);
|
||||
+ netif_wake_queue(dev->net);
|
||||
+}
|
||||
+
|
||||
+static int ipheth_carrier_set(struct ipheth_device *dev)
|
||||
+{
|
||||
+ struct usb_device *udev = dev->udev;
|
||||
+ int retval;
|
||||
+
|
||||
+ retval = usb_control_msg(udev,
|
||||
+ usb_rcvctrlpipe(udev, IPHETH_CTRL_ENDP),
|
||||
+ IPHETH_CMD_CARRIER_CHECK, /* request */
|
||||
+ 0xc0, /* request type */
|
||||
+ 0x00, /* value */
|
||||
+ 0x02, /* index */
|
||||
+ dev->ctrl_buf, IPHETH_CTRL_BUF_SIZE,
|
||||
+ IPHETH_CTRL_TIMEOUT);
|
||||
+ if (retval < 0) {
|
||||
+ err("%s: usb_control_msg: %d", __func__, retval);
|
||||
+ return retval;
|
||||
+ }
|
||||
+
|
||||
+ if (dev->ctrl_buf[0] == IPHETH_CARRIER_ON)
|
||||
+ netif_carrier_on(dev->net);
|
||||
+ else
|
||||
+ netif_carrier_off(dev->net);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void ipheth_carrier_check_work(struct work_struct *work)
|
||||
+{
|
||||
+ struct ipheth_device *dev = container_of(work, struct ipheth_device,
|
||||
+ carrier_work.work);
|
||||
+
|
||||
+ ipheth_carrier_set(dev);
|
||||
+ schedule_delayed_work(&dev->carrier_work, IPHETH_CARRIER_CHECK_TIMEOUT);
|
||||
+}
|
||||
+
|
||||
+static int ipheth_get_macaddr(struct ipheth_device *dev)
|
||||
+{
|
||||
+ struct usb_device *udev = dev->udev;
|
||||
+ struct net_device *net = dev->net;
|
||||
+ int retval;
|
||||
+
|
||||
+ retval = usb_control_msg(udev,
|
||||
+ usb_rcvctrlpipe(udev, IPHETH_CTRL_ENDP),
|
||||
+ IPHETH_CMD_GET_MACADDR, /* request */
|
||||
+ 0xc0, /* request type */
|
||||
+ 0x00, /* value */
|
||||
+ 0x02, /* index */
|
||||
+ dev->ctrl_buf,
|
||||
+ IPHETH_CTRL_BUF_SIZE,
|
||||
+ IPHETH_CTRL_TIMEOUT);
|
||||
+ if (retval < 0) {
|
||||
+ err("%s: usb_control_msg: %d", __func__, retval);
|
||||
+ } else if (retval < ETH_ALEN) {
|
||||
+ err("%s: usb_control_msg: short packet: %d bytes",
|
||||
+ __func__, retval);
|
||||
+ retval = -EINVAL;
|
||||
+ } else {
|
||||
+ memcpy(net->dev_addr, dev->ctrl_buf, ETH_ALEN);
|
||||
+ retval = 0;
|
||||
+ }
|
||||
+
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static int ipheth_rx_submit(struct ipheth_device *dev, gfp_t mem_flags)
|
||||
+{
|
||||
+ struct usb_device *udev = dev->udev;
|
||||
+ int retval;
|
||||
+
|
||||
+ usb_fill_bulk_urb(dev->rx_urb, udev,
|
||||
+ usb_rcvbulkpipe(udev, dev->bulk_in),
|
||||
+ dev->rx_buf, IPHETH_BUF_SIZE,
|
||||
+ ipheth_rcvbulk_callback,
|
||||
+ dev);
|
||||
+ dev->rx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
+
|
||||
+ retval = usb_submit_urb(dev->rx_urb, mem_flags);
|
||||
+ if (retval)
|
||||
+ err("%s: usb_submit_urb: %d", __func__, retval);
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static int ipheth_open(struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+ struct usb_device *udev = dev->udev;
|
||||
+ int retval = 0;
|
||||
+
|
||||
+ usb_set_interface(udev, IPHETH_INTFNUM, IPHETH_ALT_INTFNUM);
|
||||
+
|
||||
+ retval = ipheth_carrier_set(dev);
|
||||
+ if (retval)
|
||||
+ return retval;
|
||||
+
|
||||
+ retval = ipheth_rx_submit(dev, GFP_KERNEL);
|
||||
+ if (retval)
|
||||
+ return retval;
|
||||
+
|
||||
+ schedule_delayed_work(&dev->carrier_work, IPHETH_CARRIER_CHECK_TIMEOUT);
|
||||
+ netif_start_queue(net);
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static int ipheth_close(struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+
|
||||
+ cancel_delayed_work_sync(&dev->carrier_work);
|
||||
+ netif_stop_queue(net);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+ struct usb_device *udev = dev->udev;
|
||||
+ int retval;
|
||||
+
|
||||
+ /* Paranoid */
|
||||
+ if (skb->len > IPHETH_BUF_SIZE) {
|
||||
+ WARN(1, "%s: skb too large: %d bytes", __func__, skb->len);
|
||||
+ dev->net->stats.tx_dropped++;
|
||||
+ dev_kfree_skb_irq(skb);
|
||||
+ return NETDEV_TX_OK;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(dev->tx_buf, skb->data, skb->len);
|
||||
+ if (skb->len < IPHETH_BUF_SIZE)
|
||||
+ memset(dev->tx_buf + skb->len, 0, IPHETH_BUF_SIZE - skb->len);
|
||||
+
|
||||
+ usb_fill_bulk_urb(dev->tx_urb, udev,
|
||||
+ usb_sndbulkpipe(udev, dev->bulk_out),
|
||||
+ dev->tx_buf, IPHETH_BUF_SIZE,
|
||||
+ ipheth_sndbulk_callback,
|
||||
+ dev);
|
||||
+ dev->tx_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
+
|
||||
+ retval = usb_submit_urb(dev->tx_urb, GFP_ATOMIC);
|
||||
+ if (retval) {
|
||||
+ err("%s: usb_submit_urb: %d", __func__, retval);
|
||||
+ dev->net->stats.tx_errors++;
|
||||
+ dev_kfree_skb_irq(skb);
|
||||
+ } else {
|
||||
+ dev->tx_skb = skb;
|
||||
+
|
||||
+ dev->net->stats.tx_packets++;
|
||||
+ dev->net->stats.tx_bytes += skb->len;
|
||||
+ netif_stop_queue(net);
|
||||
+ }
|
||||
+
|
||||
+ return NETDEV_TX_OK;
|
||||
+}
|
||||
+
|
||||
+static void ipheth_tx_timeout(struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+
|
||||
+ err("%s: TX timeout", __func__);
|
||||
+ dev->net->stats.tx_errors++;
|
||||
+ usb_unlink_urb(dev->tx_urb);
|
||||
+}
|
||||
+
|
||||
+static struct net_device_stats *ipheth_stats(struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+ return &dev->net->stats;
|
||||
+}
|
||||
+
|
||||
+static u32 ipheth_ethtool_op_get_link(struct net_device *net)
|
||||
+{
|
||||
+ struct ipheth_device *dev = netdev_priv(net);
|
||||
+ return netif_carrier_ok(dev->net);
|
||||
+}
|
||||
+
|
||||
+static struct ethtool_ops ops = {
|
||||
+ .get_link = ipheth_ethtool_op_get_link
|
||||
+};
|
||||
+
|
||||
+static const struct net_device_ops ipheth_netdev_ops = {
|
||||
+ .ndo_open = &ipheth_open,
|
||||
+ .ndo_stop = &ipheth_close,
|
||||
+ .ndo_start_xmit = &ipheth_tx,
|
||||
+ .ndo_tx_timeout = &ipheth_tx_timeout,
|
||||
+ .ndo_get_stats = &ipheth_stats,
|
||||
+};
|
||||
+
|
||||
+static struct device_type ipheth_type = {
|
||||
+ .name = "wwan",
|
||||
+};
|
||||
+
|
||||
+static int ipheth_probe(struct usb_interface *intf,
|
||||
+ const struct usb_device_id *id)
|
||||
+{
|
||||
+ struct usb_device *udev = interface_to_usbdev(intf);
|
||||
+ struct usb_host_interface *hintf;
|
||||
+ struct usb_endpoint_descriptor *endp;
|
||||
+ struct ipheth_device *dev;
|
||||
+ struct net_device *netdev;
|
||||
+ int i;
|
||||
+ int retval;
|
||||
+
|
||||
+ netdev = alloc_etherdev(sizeof(struct ipheth_device));
|
||||
+ if (!netdev)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ netdev->netdev_ops = &ipheth_netdev_ops;
|
||||
+ netdev->watchdog_timeo = IPHETH_TX_TIMEOUT;
|
||||
+ strcpy(netdev->name, "wwan%d");
|
||||
+
|
||||
+ dev = netdev_priv(netdev);
|
||||
+ dev->udev = udev;
|
||||
+ dev->net = netdev;
|
||||
+ dev->intf = intf;
|
||||
+
|
||||
+ /* Set up endpoints */
|
||||
+ hintf = usb_altnum_to_altsetting(intf, IPHETH_ALT_INTFNUM);
|
||||
+ if (hintf == NULL) {
|
||||
+ retval = -ENODEV;
|
||||
+ err("Unable to find alternate settings interface");
|
||||
+ goto err_endpoints;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < hintf->desc.bNumEndpoints; i++) {
|
||||
+ endp = &hintf->endpoint[i].desc;
|
||||
+ if (usb_endpoint_is_bulk_in(endp))
|
||||
+ dev->bulk_in = endp->bEndpointAddress;
|
||||
+ else if (usb_endpoint_is_bulk_out(endp))
|
||||
+ dev->bulk_out = endp->bEndpointAddress;
|
||||
+ }
|
||||
+ if (!(dev->bulk_in && dev->bulk_out)) {
|
||||
+ retval = -ENODEV;
|
||||
+ err("Unable to find endpoints");
|
||||
+ goto err_endpoints;
|
||||
+ }
|
||||
+
|
||||
+ dev->ctrl_buf = kmalloc(IPHETH_CTRL_BUF_SIZE, GFP_KERNEL);
|
||||
+ if (dev->ctrl_buf == NULL) {
|
||||
+ retval = -ENOMEM;
|
||||
+ goto err_alloc_ctrl_buf;
|
||||
+ }
|
||||
+
|
||||
+ retval = ipheth_get_macaddr(dev);
|
||||
+ if (retval)
|
||||
+ goto err_get_macaddr;
|
||||
+
|
||||
+ INIT_DELAYED_WORK(&dev->carrier_work, ipheth_carrier_check_work);
|
||||
+
|
||||
+ retval = ipheth_alloc_urbs(dev);
|
||||
+ if (retval) {
|
||||
+ err("error allocating urbs: %d", retval);
|
||||
+ goto err_alloc_urbs;
|
||||
+ }
|
||||
+
|
||||
+ usb_set_intfdata(intf, dev);
|
||||
+
|
||||
+ SET_NETDEV_DEV(netdev, &intf->dev);
|
||||
+ SET_ETHTOOL_OPS(netdev, &ops);
|
||||
+ SET_NETDEV_DEVTYPE(netdev, &ipheth_type);
|
||||
+
|
||||
+ retval = register_netdev(netdev);
|
||||
+ if (retval) {
|
||||
+ err("error registering netdev: %d", retval);
|
||||
+ retval = -EIO;
|
||||
+ goto err_register_netdev;
|
||||
+ }
|
||||
+
|
||||
+ dev_info(&intf->dev, "Apple iPhone USB Ethernet device attached\n");
|
||||
+ return 0;
|
||||
+
|
||||
+err_register_netdev:
|
||||
+ ipheth_free_urbs(dev);
|
||||
+err_alloc_urbs:
|
||||
+err_get_macaddr:
|
||||
+err_alloc_ctrl_buf:
|
||||
+ kfree(dev->ctrl_buf);
|
||||
+err_endpoints:
|
||||
+ free_netdev(netdev);
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static void ipheth_disconnect(struct usb_interface *intf)
|
||||
+{
|
||||
+ struct ipheth_device *dev;
|
||||
+
|
||||
+ dev = usb_get_intfdata(intf);
|
||||
+ if (dev != NULL) {
|
||||
+ unregister_netdev(dev->net);
|
||||
+ ipheth_kill_urbs(dev);
|
||||
+ ipheth_free_urbs(dev);
|
||||
+ kfree(dev->ctrl_buf);
|
||||
+ free_netdev(dev->net);
|
||||
+ }
|
||||
+ usb_set_intfdata(intf, NULL);
|
||||
+ dev_info(&intf->dev, "Apple iPhone USB Ethernet now disconnected\n");
|
||||
+}
|
||||
+
|
||||
+static struct usb_driver ipheth_driver = {
|
||||
+ .name = "ipheth",
|
||||
+ .probe = ipheth_probe,
|
||||
+ .disconnect = ipheth_disconnect,
|
||||
+ .id_table = ipheth_table,
|
||||
+};
|
||||
+
|
||||
+static int __init ipheth_init(void)
|
||||
+{
|
||||
+ int retval;
|
||||
+
|
||||
+ retval = usb_register(&ipheth_driver);
|
||||
+ if (retval) {
|
||||
+ err("usb_register failed: %d", retval);
|
||||
+ return retval;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void __exit ipheth_exit(void)
|
||||
+{
|
||||
+ usb_deregister(&ipheth_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(ipheth_init);
|
||||
+module_exit(ipheth_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Diego Giagio <diego@giagio.com>");
|
||||
+MODULE_DESCRIPTION("Apple iPhone USB Ethernet driver");
|
||||
+MODULE_LICENSE("Dual BSD/GPL");
|
|
@ -1,69 +0,0 @@
|
|||
Based on:
|
||||
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: [PATCH] tty: declare MODULE_FIRMWARE in various drivers
|
||||
|
||||
--- a/drivers/char/cyclades.c
|
||||
+++ b/drivers/char/cyclades.c
|
||||
@@ -4195,3 +4195,4 @@ module_exit(cy_cleanup_module);
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION(CY_VERSION);
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(CYCLADES_MAJOR);
|
||||
+MODULE_FIRMWARE("cyzfirm.bin");
|
||||
--- a/drivers/char/ip2/ip2main.c
|
||||
+++ b/drivers/char/ip2/ip2main.c
|
||||
@@ -3196,3 +3196,5 @@ static struct pci_device_id ip2main_pci_tbl[] __devinitdata = {
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, ip2main_pci_tbl);
|
||||
+
|
||||
+MODULE_FIRMWARE("intelliport2.bin");
|
||||
--- a/drivers/char/isicom.c
|
||||
+++ b/drivers/char/isicom.c
|
||||
@@ -1720,3 +1720,8 @@ module_exit(isicom_exit);
|
||||
MODULE_AUTHOR("MultiTech");
|
||||
MODULE_DESCRIPTION("Driver for the ISI series of cards by MultiTech");
|
||||
MODULE_LICENSE("GPL");
|
||||
+MODULE_FIRMWARE("isi608.bin");
|
||||
+MODULE_FIRMWARE("isi608em.bin");
|
||||
+MODULE_FIRMWARE("isi616em.bin");
|
||||
+MODULE_FIRMWARE("isi4608.bin");
|
||||
+MODULE_FIRMWARE("isi4616.bin");
|
||||
--- a/drivers/char/moxa.c
|
||||
+++ b/drivers/char/moxa.c
|
||||
@@ -172,6 +172,9 @@ static unsigned int numports[MAX_BOARDS];
|
||||
MODULE_AUTHOR("William Chen");
|
||||
MODULE_DESCRIPTION("MOXA Intellio Family Multiport Board Device Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
+MODULE_FIRMWARE("c218tunx.cod");
|
||||
+MODULE_FIRMWARE("cp204unx.cod");
|
||||
+MODULE_FIRMWARE("c320tunx.cod");
|
||||
#ifdef MODULE
|
||||
module_param_array(type, uint, NULL, 0);
|
||||
MODULE_PARM_DESC(type, "card type: C218=2, C320=4");
|
||||
--- a/drivers/serial/icom.c
|
||||
+++ b/drivers/serial/icom.c
|
||||
@@ -1654,4 +1654,6 @@ MODULE_DESCRIPTION("IBM iSeries Serial IOA driver");
|
||||
MODULE_SUPPORTED_DEVICE
|
||||
("IBM iSeries 2745, 2771, 2772, 2742, 2793 and 2805 Communications adapters");
|
||||
MODULE_LICENSE("GPL");
|
||||
-
|
||||
+MODULE_FIRMWARE("icom_call_setup.bin");
|
||||
+MODULE_FIRMWARE("icom_res_dce.bin");
|
||||
+MODULE_FIRMWARE("icom_asc.bin");
|
||||
--- a/drivers/usb/serial/keyspan_pda.c
|
||||
+++ b/drivers/usb/serial/keyspan_pda.c
|
||||
@@ -789,6 +789,13 @@ static int keyspan_pda_fake_startup(struct usb_serial *serial)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+#ifdef KEYSPAN
|
||||
+MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
|
||||
+#endif
|
||||
+#ifdef XIRCOM
|
||||
+MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
|
||||
+#endif
|
||||
+
|
||||
static int keyspan_pda_startup(struct usb_serial *serial)
|
||||
{
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
Based on:
|
||||
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: [PATCH] staging: declare MODULE_FIRMWARE in various drivers
|
||||
|
||||
--- a/drivers/staging/comedi/drivers/jr3_pci.c
|
||||
+++ b/drivers/staging/comedi/drivers/jr3_pci.c
|
||||
@@ -954,6 +954,8 @@ out:
|
||||
return result;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("comedi/jr3pci.idm");
|
||||
+
|
||||
static int jr3_pci_detach(struct comedi_device *dev)
|
||||
{
|
||||
int i;
|
||||
--- a/drivers/staging/go7007/go7007-driver.c
|
||||
+++ b/drivers/staging/go7007/go7007-driver.c
|
||||
@@ -128,6 +128,8 @@ static int go7007_load_encoder(struct go7007 *go)
|
||||
return rv;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("go7007fw.bin");
|
||||
+
|
||||
/*
|
||||
* Boot the encoder and register the I2C adapter if requested. Do the
|
||||
* minimum initialization necessary, since the board-specific code may
|
||||
--- a/drivers/staging/go7007/go7007-usb.c
|
||||
+++ b/drivers/staging/go7007/go7007-usb.c
|
||||
@@ -444,6 +444,8 @@ static struct go7007_usb_board board_sensoray_2250 = {
|
||||
},
|
||||
};
|
||||
|
||||
+MODULE_FIRMWARE("go7007tv.bin");
|
||||
+
|
||||
static struct usb_device_id go7007_usb_id_table[] = {
|
||||
{
|
||||
.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION |
|
||||
--- a/drivers/staging/go7007/saa7134-go7007.c
|
||||
+++ b/drivers/staging/go7007/saa7134-go7007.c
|
||||
@@ -84,6 +84,7 @@ static struct go7007_board_info board_voyager = {
|
||||
},
|
||||
},
|
||||
};
|
||||
+MODULE_FIRMWARE("go7007tv.bin");
|
||||
|
||||
/********************* Driver for GPIO HPI interface *********************/
|
||||
|
||||
--- a/drivers/staging/rtl8192e/r819xE_firmware.c
|
||||
+++ b/drivers/staging/rtl8192e/r819xE_firmware.c
|
||||
@@ -365,3 +365,7 @@ download_firmware_fail:
|
||||
return rt_status;
|
||||
|
||||
}
|
||||
+
|
||||
+MODULE_FIRMWARE("RTL8192E/boot.img");
|
||||
+MODULE_FIRMWARE("RTL8192E/main.img");
|
||||
+MODULE_FIRMWARE("RTL8192E/data.img");
|
||||
--- a/drivers/staging/rtl8192su/r8192S_firmware.c
|
||||
+++ b/drivers/staging/rtl8192su/r8192S_firmware.c
|
||||
@@ -538,3 +538,4 @@ bool FirmwareDownload92S(struct net_device *dev)
|
||||
return rtStatus;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("RTL8192SU/rtl8192sfw.bin");
|
||||
--- a/drivers/staging/slicoss/slicoss.c
|
||||
+++ b/drivers/staging/slicoss/slicoss.c
|
||||
@@ -1866,6 +1866,9 @@ static int slic_card_download_gbrcv(struct adapter *adapter)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("slicoss/oasisrcvucode.sys");
|
||||
+MODULE_FIRMWARE("slicoss/gbrcvucode.sys");
|
||||
+
|
||||
static int slic_card_download(struct adapter *adapter)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
@@ -1977,6 +1980,9 @@ static int slic_card_download(struct adapter *adapter)
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("slicoss/oasisdownload.sys");
|
||||
+MODULE_FIRMWARE("slicoss/gbdownload.sys");
|
||||
+
|
||||
static void slic_adapter_set_hwaddr(struct adapter *adapter)
|
||||
{
|
||||
struct sliccard *card = adapter->card;
|
||||
--- a/drivers/staging/wlan-ng/prism2fw.c
|
||||
+++ b/drivers/staging/wlan-ng/prism2fw.c
|
||||
@@ -53,6 +53,7 @@
|
||||
/* Local Constants */
|
||||
|
||||
#define PRISM2_USB_FWFILE "prism2_ru.fw"
|
||||
+MODULE_FIRMWARE(PRISM2_USB_FWFILE);
|
||||
|
||||
#define S3DATA_MAX 5000
|
||||
#define S3PLUG_MAX 200
|
|
@ -1,29 +0,0 @@
|
|||
From 9210aeb3bd3ad862f2063b7128ba4b33799b4092 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 7 Nov 2009 20:09:26 +0000
|
||||
Subject: [PATCH] sep: include driver name in firmware filenames
|
||||
|
||||
The current names "cache.image.bin" and "resident.image.bin" are far
|
||||
too generic.
|
||||
---
|
||||
drivers/staging/sep/sep_driver.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c
|
||||
index e7bc9ec..6b763b7 100644
|
||||
--- a/drivers/staging/sep/sep_driver.c
|
||||
+++ b/drivers/staging/sep/sep_driver.c
|
||||
@@ -182,8 +182,8 @@ static DECLARE_WAIT_QUEUE_HEAD(sep_event);
|
||||
static int sep_load_firmware(struct sep_device *sep)
|
||||
{
|
||||
const struct firmware *fw;
|
||||
- char *cache_name = "cache.image.bin";
|
||||
- char *res_name = "resident.image.bin";
|
||||
+ char *cache_name = "sep/cache.image.bin";
|
||||
+ char *res_name = "sep/resident.image.bin";
|
||||
int error;
|
||||
|
||||
edbg("SEP Driver:rar_virtual is %p\n", sep->rar_addr);
|
||||
--
|
||||
1.6.6
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
From 94820c94108bf46801939d3e342e9a07a81da64e Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 7 Nov 2009 20:10:23 +0000
|
||||
Subject: [PATCH] sep: declare MODULE_FIRMWARE
|
||||
|
||||
---
|
||||
drivers/staging/sep/sep_driver.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c
|
||||
index 6b763b7..916a9c1 100644
|
||||
--- a/drivers/staging/sep/sep_driver.c
|
||||
+++ b/drivers/staging/sep/sep_driver.c
|
||||
@@ -222,6 +222,9 @@ static int sep_load_firmware(struct sep_device *sep)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("sep/cache.image.bin");
|
||||
+MODULE_FIRMWARE("sep/resident.image.bin");
|
||||
+
|
||||
/**
|
||||
* sep_map_and_alloc_shared_area - allocate shared block
|
||||
* @sep: security processor
|
||||
--
|
||||
1.6.6
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From 34e37eaacc94a27d50151d1ab4fae67f1c3ffda5 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 7 Nov 2009 20:21:37 +0000
|
||||
Subject: [PATCH] isight-firmware: declare MODULE_FIRMWARE
|
||||
|
||||
---
|
||||
drivers/usb/misc/isight_firmware.c | 2 ++
|
||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c
|
||||
index b897f65..1a88e27 100644
|
||||
--- a/drivers/usb/misc/isight_firmware.c
|
||||
+++ b/drivers/usb/misc/isight_firmware.c
|
||||
@@ -112,6 +112,8 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+MODULE_FIRMWARE("isight.fw");
|
||||
+
|
||||
static void isight_firmware_disconnect(struct usb_interface *intf)
|
||||
{
|
||||
}
|
||||
--
|
||||
1.6.6
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
From fb9c62c3bbf88aa3a3c9bb0c9feb26740eb29ddf Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Mon, 18 Jan 2010 02:50:24 +0000
|
||||
Subject: [PATCH] Staging: rt2870sta: constify RTUSBMultiWrite(), RTUSBFirmwareWrite()
|
||||
|
||||
These functions do not modify the data they are passed.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
---
|
||||
drivers/staging/rt2860/rtmp.h | 6 +++---
|
||||
drivers/staging/rt2870/common/rtusb_io.c | 10 +++++-----
|
||||
2 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h
|
||||
index c50abf4..6c6503d 100644
|
||||
--- a/drivers/staging/rt2860/rtmp.h
|
||||
+++ b/drivers/staging/rt2860/rtmp.h
|
||||
@@ -4043,10 +4043,10 @@ int RTUSBMultiRead(struct rt_rtmp_adapter *pAd,
|
||||
u16 Offset, u8 *pData, u16 length);
|
||||
|
||||
int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd,
|
||||
- u16 Offset, u8 *pData, u16 length);
|
||||
+ u16 Offset, const u8 *pData, u16 length);
|
||||
|
||||
int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd,
|
||||
- u16 Offset, u8 *pData);
|
||||
+ u16 Offset, const u8 *pData);
|
||||
|
||||
int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd,
|
||||
u8 Id, u8 *pValue);
|
||||
@@ -4112,7 +4112,7 @@ int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd,
|
||||
u16 Offset, u16 Value);
|
||||
|
||||
int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd,
|
||||
- u8 *pFwImage, unsigned long FwLen);
|
||||
+ const u8 *pFwImage, unsigned long FwLen);
|
||||
|
||||
int RTUSBVenderReset(struct rt_rtmp_adapter *pAd);
|
||||
|
||||
diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c
|
||||
index 34443f2..cf0d2f5 100644
|
||||
--- a/drivers/staging/rt2870/common/rtusb_io.c
|
||||
+++ b/drivers/staging/rt2870/common/rtusb_io.c
|
||||
@@ -84,7 +84,7 @@ static int RTUSBFirmwareRun(struct rt_rtmp_adapter *pAd)
|
||||
========================================================================
|
||||
*/
|
||||
int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd,
|
||||
- u8 *pFwImage, unsigned long FwLen)
|
||||
+ const u8 *pFwImage, unsigned long FwLen)
|
||||
{
|
||||
u32 MacReg;
|
||||
int Status;
|
||||
@@ -167,7 +167,7 @@ int RTUSBMultiRead(struct rt_rtmp_adapter *pAd,
|
||||
========================================================================
|
||||
*/
|
||||
int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd,
|
||||
- u16 Offset, u8 *pData)
|
||||
+ u16 Offset, const u8 *pData)
|
||||
{
|
||||
int Status;
|
||||
|
||||
@@ -175,18 +175,18 @@ int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd,
|
||||
Status = RTUSB_VendorRequest(pAd,
|
||||
USBD_TRANSFER_DIRECTION_OUT,
|
||||
DEVICE_VENDOR_REQUEST_OUT,
|
||||
- 0x6, 0, Offset, pData, 1);
|
||||
+ 0x6, 0, Offset, (u8 *)pData, 1);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd,
|
||||
- u16 Offset, u8 *pData, u16 length)
|
||||
+ u16 Offset, const u8 *pData, u16 length)
|
||||
{
|
||||
int Status;
|
||||
|
||||
u16 index = 0, Value;
|
||||
- u8 *pSrc = pData;
|
||||
+ const u8 *pSrc = pData;
|
||||
u16 resude = 0;
|
||||
|
||||
resude = length % 2;
|
||||
--
|
||||
1.6.6.2
|
||||
|
|
@ -1,266 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: [PATCH] Staging: rt{2860,2870}sta: Use request_firmware() to load firmware
|
||||
|
||||
When originally introduced into staging, these drivers had custom
|
||||
firmware-loading code which checked a version number and CRC at the
|
||||
end of each blob. This reintroduces those checks, using crc-ccitt
|
||||
instead of custom code.
|
||||
|
||||
The removed firmware will be added to the linux-firmware.git
|
||||
repository.
|
||||
|
||||
Based on work by Darren Salt <linux@youmustbejoking.demon.co.uk>.
|
||||
|
||||
--- a/drivers/staging/rt2860/Kconfig
|
||||
+++ b/drivers/staging/rt2860/Kconfig
|
||||
@@ -1,9 +1,10 @@ config RT2860
|
||||
config RT2860
|
||||
tristate "Ralink 2860/3090 wireless support"
|
||||
depends on PCI && X86 && WLAN
|
||||
- depends on BROKEN
|
||||
select WIRELESS_EXT
|
||||
select WEXT_PRIV
|
||||
+ select CRC_CCITT
|
||||
+ select FW_LOADER
|
||||
---help---
|
||||
This is an experimental driver for the Ralink 2860 and 3090
|
||||
wireless chips.
|
||||
--- a/drivers/staging/rt2860/common/rtmp_mcu.c
|
||||
+++ b/drivers/staging/rt2860/common/rtmp_mcu.c
|
||||
@@ -37,35 +37,38 @@
|
||||
|
||||
#include "../rt_config.h"
|
||||
|
||||
-#if defined(RT2860) || defined(RT3090)
|
||||
-#include "firmware.h"
|
||||
-#include "../../rt3090/firmware.h"
|
||||
-#endif
|
||||
-#ifdef RT2870
|
||||
-#include "../../rt3070/firmware.h"
|
||||
-#include "firmware_3070.h"
|
||||
-#endif
|
||||
-
|
||||
-#include <linux/bitrev.h>
|
||||
+#include <linux/crc-ccitt.h>
|
||||
+#include <linux/firmware.h>
|
||||
|
||||
#ifdef RTMP_MAC_USB
|
||||
-/* */
|
||||
-/* RT2870 Firmware Spec only used 1 oct for version expression */
|
||||
-/* */
|
||||
-#define FIRMWARE_MINOR_VERSION 7
|
||||
-#endif /* RTMP_MAC_USB // */
|
||||
|
||||
-/* New 8k byte firmware size for RT3071/RT3072 */
|
||||
-#define FIRMWAREIMAGE_MAX_LENGTH 0x2000
|
||||
-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(u8))
|
||||
-#define FIRMWARE_MAJOR_VERSION 0
|
||||
+#define FIRMWAREIMAGE_LENGTH 0x1000
|
||||
|
||||
-#define FIRMWAREIMAGEV1_LENGTH 0x1000
|
||||
-#define FIRMWAREIMAGEV2_LENGTH 0x1000
|
||||
+#define FIRMWARE_2870_MIN_VERSION 12
|
||||
+#define FIRMWARE_2870_FILENAME "rt2870.bin"
|
||||
+MODULE_FIRMWARE(FIRMWARE_2870_FILENAME);
|
||||
|
||||
-#ifdef RTMP_MAC_PCI
|
||||
-#define FIRMWARE_MINOR_VERSION 2
|
||||
-#endif /* RTMP_MAC_PCI // */
|
||||
+#define FIRMWARE_3070_MIN_VERSION 17
|
||||
+#define FIRMWARE_3070_FILENAME "rt3070.bin"
|
||||
+MODULE_FIRMWARE(FIRMWARE_3070_FILENAME);
|
||||
+
|
||||
+#define FIRMWARE_3071_MIN_VERSION 17
|
||||
+#define FIRMWARE_3071_FILENAME "rt3071.bin" /* for RT3071/RT3072 */
|
||||
+MODULE_FIRMWARE(FIRMWARE_3071_FILENAME);
|
||||
+
|
||||
+#else /* RTMP_MAC_PCI */
|
||||
+
|
||||
+#define FIRMWAREIMAGE_LENGTH 0x2000
|
||||
+
|
||||
+#define FIRMWARE_2860_MIN_VERSION 11
|
||||
+#define FIRMWARE_2860_FILENAME "rt2860.bin"
|
||||
+MODULE_FIRMWARE(FIRMWARE_2860_FILENAME);
|
||||
+
|
||||
+#define FIRMWARE_3090_MIN_VERSION 19
|
||||
+#define FIRMWARE_3090_FILENAME "rt3090.bin" /* for RT3090/RT3390 */
|
||||
+MODULE_FIRMWARE(FIRMWARE_3090_FILENAME);
|
||||
+
|
||||
+#endif
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
@@ -90,6 +93,78 @@ int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static const struct firmware *rtmp_get_firmware(struct rt_rtmp_adapter *adapter)
|
||||
+{
|
||||
+ const char *name;
|
||||
+ const struct firmware *fw = NULL;
|
||||
+ u8 min_version;
|
||||
+ struct device *dev;
|
||||
+ int err;
|
||||
+
|
||||
+ if (adapter->firmware)
|
||||
+ return adapter->firmware;
|
||||
+
|
||||
+#ifdef RTMP_MAC_USB
|
||||
+ if (IS_RT3071(adapter)) {
|
||||
+ name = FIRMWARE_3071_FILENAME;
|
||||
+ min_version = FIRMWARE_3071_MIN_VERSION;
|
||||
+ } else if (IS_RT3070(adapter)) {
|
||||
+ name = FIRMWARE_3070_FILENAME;
|
||||
+ min_version = FIRMWARE_3070_MIN_VERSION;
|
||||
+ } else {
|
||||
+ name = FIRMWARE_2870_FILENAME;
|
||||
+ min_version = FIRMWARE_2870_MIN_VERSION;
|
||||
+ }
|
||||
+ dev = &((struct os_cookie *)adapter->OS_Cookie)->pUsb_Dev->dev;
|
||||
+#else /* RTMP_MAC_PCI */
|
||||
+ if (IS_RT3090(adapter) || IS_RT3390(adapter)) {
|
||||
+ name = FIRMWARE_3090_FILENAME;
|
||||
+ min_version = FIRMWARE_3090_MIN_VERSION;
|
||||
+ } else {
|
||||
+ name = FIRMWARE_2860_FILENAME;
|
||||
+ min_version = FIRMWARE_2860_MIN_VERSION;
|
||||
+ }
|
||||
+ dev = &((struct os_cookie *)adapter->OS_Cookie)->pci_dev->dev;
|
||||
+#endif
|
||||
+
|
||||
+ err = request_firmware(&fw, name, dev);
|
||||
+ if (err) {
|
||||
+ dev_err(dev, "firmware file %s request failed (%d)\n",
|
||||
+ name, err);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (fw->size < FIRMWAREIMAGE_LENGTH) {
|
||||
+ dev_err(dev, "firmware file %s size is invalid\n", name);
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
+ /* is it new enough? */
|
||||
+ adapter->FirmwareVersion = fw->data[FIRMWAREIMAGE_LENGTH - 3];
|
||||
+ if (adapter->FirmwareVersion < min_version) {
|
||||
+ dev_err(dev,
|
||||
+ "firmware file %s is too old;"
|
||||
+ " driver requires v%d or later\n",
|
||||
+ name, min_version);
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
+ /* is the internal CRC correct? */
|
||||
+ if (crc_ccitt(0xffff, fw->data, FIRMWAREIMAGE_LENGTH - 2) !=
|
||||
+ (fw->data[FIRMWAREIMAGE_LENGTH - 2] |
|
||||
+ (fw->data[FIRMWAREIMAGE_LENGTH - 1] << 8))) {
|
||||
+ dev_err(dev, "firmware file %s failed internal CRC\n", name);
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
+ adapter->firmware = fw;
|
||||
+ return fw;
|
||||
+
|
||||
+invalid:
|
||||
+ release_firmware(fw);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
@@ -109,46 +184,16 @@ int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd)
|
||||
*/
|
||||
int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd)
|
||||
{
|
||||
-
|
||||
+ const struct firmware *fw;
|
||||
int Status = NDIS_STATUS_SUCCESS;
|
||||
- u8 *pFirmwareImage = NULL;
|
||||
- unsigned long FileLength, Index;
|
||||
+ unsigned long Index;
|
||||
u32 MacReg = 0;
|
||||
-#ifdef RTMP_MAC_USB
|
||||
- u32 Version = (pAd->MACVersion >> 16);
|
||||
-#endif
|
||||
|
||||
- /* New 8k byte firmware size for RT3071/RT3072 */
|
||||
- {
|
||||
-#ifdef RTMP_MAC_PCI
|
||||
- if (IS_RT3090(pAd) || IS_RT3390(pAd)) {
|
||||
- pFirmwareImage = FirmwareImage_3090;
|
||||
- FileLength = FIRMWAREIMAGE_MAX_LENGTH;
|
||||
- } else {
|
||||
- pFirmwareImage = FirmwareImage_2860;
|
||||
- FileLength = FIRMWAREIMAGE_MAX_LENGTH;
|
||||
- }
|
||||
-#endif /* RTMP_MAC_PCI // */
|
||||
-#ifdef RTMP_MAC_USB
|
||||
- /* the firmware image consists of two parts */
|
||||
- if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) { /* use the second part */
|
||||
- /*printk("KH:Use New Version,part2\n"); */
|
||||
- pFirmwareImage =
|
||||
- (u8 *)&
|
||||
- FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH];
|
||||
- FileLength = FIRMWAREIMAGEV2_LENGTH;
|
||||
- } else {
|
||||
- /*printk("KH:Use New Version,part1\n"); */
|
||||
- if (Version == 0x3070)
|
||||
- pFirmwareImage = FirmwareImage_3070;
|
||||
- else
|
||||
- pFirmwareImage = FirmwareImage_2870;
|
||||
- FileLength = FIRMWAREIMAGEV1_LENGTH;
|
||||
- }
|
||||
-#endif /* RTMP_MAC_USB // */
|
||||
- }
|
||||
+ fw = rtmp_get_firmware(pAd);
|
||||
+ if (!fw)
|
||||
+ return NDIS_STATUS_FAILURE;
|
||||
|
||||
- RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength);
|
||||
+ RTMP_WRITE_FIRMWARE(pAd, fw->data, FIRMWAREIMAGE_LENGTH);
|
||||
|
||||
/* check if MCU is ready */
|
||||
Index = 0;
|
||||
--- a/drivers/staging/rt2860/rt_linux.c
|
||||
+++ b/drivers/staging/rt2860/rt_linux.c
|
||||
@@ -25,6 +25,7 @@
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
+#include <linux/firmware.h>
|
||||
#include <linux/sched.h>
|
||||
#include "rt_config.h"
|
||||
|
||||
@@ -260,6 +261,8 @@ void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd)
|
||||
|
||||
NdisFreeSpinLock(&pAd->irq_lock);
|
||||
|
||||
+ release_firmware(pAd->firmware);
|
||||
+
|
||||
vfree(pAd); /* pci_free_consistent(os_cookie->pci_dev,sizeof(struct rt_rtmp_adapter),pAd,os_cookie->pAd_pa); */
|
||||
if (os_cookie)
|
||||
kfree(os_cookie);
|
||||
--- a/drivers/staging/rt2860/rtmp.h
|
||||
+++ b/drivers/staging/rt2860/rtmp.h
|
||||
@@ -1719,6 +1719,7 @@ struct rt_rtmp_adapter {
|
||||
void *OS_Cookie; /* save specific structure relative to OS */
|
||||
struct net_device *net_dev;
|
||||
unsigned long VirtualIfCnt;
|
||||
+ const struct firmware *firmware;
|
||||
|
||||
struct rt_rtmp_chip_op chipOps;
|
||||
u16 ThisTbttNumToNextWakeUp;
|
||||
--- a/drivers/staging/rt2870/Kconfig
|
||||
+++ b/drivers/staging/rt2870/Kconfig
|
||||
@@ -1,8 +1,9 @@ config RT2870
|
||||
config RT2870
|
||||
tristate "Ralink 2870/3070 wireless support"
|
||||
depends on USB && X86 && WLAN
|
||||
- depends on BROKEN
|
||||
select WIRELESS_EXT
|
||||
select WEXT_PRIV
|
||||
+ select CRC_CCITT
|
||||
+ select FW_LOADER
|
||||
---help---
|
||||
This is an experimental driver for the Ralink xx70 wireless chips.
|
|
@ -1,854 +0,0 @@
|
|||
From: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
|
||||
Date: Fri, 19 Feb 2010 20:10:00 +0100
|
||||
Subject: [PATCH] Staging: rtl8192su: Remove Firmware from r8192SU_HWImg.c
|
||||
|
||||
Because the Firmware is loaded from RTL8192SU/rtl8192sfw.bin,
|
||||
it it save, to remove it from r8192SU_HWImg.c
|
||||
|
||||
Signed-off-by: Florian Schilhabel <florian.c.schilhabel@googlemail.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
[bwh: Adjust to apply to Debian source]
|
||||
|
||||
--- a/drivers/staging/rtl8192su/Kconfig
|
||||
+++ b/drivers/staging/rtl8192su/Kconfig
|
||||
@@ -2,6 +2,5 @@
|
||||
tristate "RealTek RTL8192SU Wireless LAN NIC driver"
|
||||
depends on PCI && WLAN && USB
|
||||
depends on WIRELESS_EXT
|
||||
- depends on BROKEN
|
||||
default N
|
||||
---help---
|
||||
--- /dev/null
|
||||
+++ b/drivers/staging/rtl8192su/r8192SU_HWImg.c
|
||||
@@ -0,0 +1,626 @@
|
||||
+/*Created on 2009/ 1/15, 3:10*/
|
||||
+
|
||||
+#include "r8192SU_HWImg.h"
|
||||
+
|
||||
+u8 Rtl8192SUFwMainArray[MainArrayLength] = {
|
||||
+0x0, };
|
||||
+
|
||||
+u8 Rtl8192SUFwDataArray[DataArrayLength] = {
|
||||
+0x0, };
|
||||
+
|
||||
+u32 Rtl8192SUPHY_REG_2T2RArray[PHY_REG_2T2RArrayLength] = {
|
||||
+0x01c,0x07000000,
|
||||
+0x800,0x00040000,
|
||||
+0x804,0x00008003,
|
||||
+0x808,0x0000fc00,
|
||||
+0x80c,0x0000000a,
|
||||
+0x810,0x10005088,
|
||||
+0x814,0x020c3d10,
|
||||
+0x818,0x00200185,
|
||||
+0x81c,0x00000000,
|
||||
+0x820,0x01000000,
|
||||
+0x824,0x00390004,
|
||||
+0x828,0x01000000,
|
||||
+0x82c,0x00390004,
|
||||
+0x830,0x00000004,
|
||||
+0x834,0x00690200,
|
||||
+0x838,0x00000004,
|
||||
+0x83c,0x00690200,
|
||||
+0x840,0x00010000,
|
||||
+0x844,0x00010000,
|
||||
+0x848,0x00000000,
|
||||
+0x84c,0x00000000,
|
||||
+0x850,0x00000000,
|
||||
+0x854,0x00000000,
|
||||
+0x858,0x48484848,
|
||||
+0x85c,0x65a965a9,
|
||||
+0x860,0x0f7f0130,
|
||||
+0x864,0x0f7f0130,
|
||||
+0x868,0x0f7f0130,
|
||||
+0x86c,0x0f7f0130,
|
||||
+0x870,0x03000700,
|
||||
+0x874,0x03000300,
|
||||
+0x878,0x00020002,
|
||||
+0x87c,0x004f0201,
|
||||
+0x880,0xa8300ac1,
|
||||
+0x884,0x00000058,
|
||||
+0x888,0x00000008,
|
||||
+0x88c,0x00000004,
|
||||
+0x890,0x00000000,
|
||||
+0x894,0xfffffffe,
|
||||
+0x898,0x40302010,
|
||||
+0x89c,0x00706050,
|
||||
+0x8b0,0x00000000,
|
||||
+0x8e0,0x00000000,
|
||||
+0x8e4,0x00000000,
|
||||
+0xe00,0x30333333,
|
||||
+0xe04,0x2a2d2e2f,
|
||||
+0xe08,0x00003232,
|
||||
+0xe10,0x30333333,
|
||||
+0xe14,0x2a2d2e2f,
|
||||
+0xe18,0x30333333,
|
||||
+0xe1c,0x2a2d2e2f,
|
||||
+0xe30,0x01007c00,
|
||||
+0xe34,0x01004800,
|
||||
+0xe38,0x1000dc1f,
|
||||
+0xe3c,0x10008c1f,
|
||||
+0xe40,0x021400a0,
|
||||
+0xe44,0x281600a0,
|
||||
+0xe48,0xf8000001,
|
||||
+0xe4c,0x00002910,
|
||||
+0xe50,0x01007c00,
|
||||
+0xe54,0x01004800,
|
||||
+0xe58,0x1000dc1f,
|
||||
+0xe5c,0x10008c1f,
|
||||
+0xe60,0x021400a0,
|
||||
+0xe64,0x281600a0,
|
||||
+0xe6c,0x00002910,
|
||||
+0xe70,0x31ed92fb,
|
||||
+0xe74,0x361536fb,
|
||||
+0xe78,0x361536fb,
|
||||
+0xe7c,0x361536fb,
|
||||
+0xe80,0x361536fb,
|
||||
+0xe84,0x000d92fb,
|
||||
+0xe88,0x000d92fb,
|
||||
+0xe8c,0x31ed92fb,
|
||||
+0xed0,0x31ed92fb,
|
||||
+0xed4,0x31ed92fb,
|
||||
+0xed8,0x000d92fb,
|
||||
+0xedc,0x000d92fb,
|
||||
+0xee0,0x000d92fb,
|
||||
+0xee4,0x015e5448,
|
||||
+0xee8,0x21555448,
|
||||
+0x900,0x00000000,
|
||||
+0x904,0x00000023,
|
||||
+0x908,0x00000000,
|
||||
+0x90c,0x03321333,
|
||||
+0xa00,0x00d047c8,
|
||||
+0xa04,0x80ff0008,
|
||||
+0xa08,0x8ccd8300,
|
||||
+0xa0c,0x2e62120f,
|
||||
+0xa10,0x9500bb78,
|
||||
+0xa14,0x11144028,
|
||||
+0xa18,0x00881117,
|
||||
+0xa1c,0x89140f00,
|
||||
+0xa20,0x1a1b0000,
|
||||
+0xa24,0x090e1317,
|
||||
+0xa28,0x00000204,
|
||||
+0xa2c,0x10d30000,
|
||||
+0xc00,0x40071d40,
|
||||
+0xc04,0x00a05633,
|
||||
+0xc08,0x000000e4,
|
||||
+0xc0c,0x6c6c6c6c,
|
||||
+0xc10,0x08800000,
|
||||
+0xc14,0x40000100,
|
||||
+0xc18,0x08000000,
|
||||
+0xc1c,0x40000100,
|
||||
+0xc20,0x08000000,
|
||||
+0xc24,0x40000100,
|
||||
+0xc28,0x08000000,
|
||||
+0xc2c,0x40000100,
|
||||
+0xc30,0x6de9ac44,
|
||||
+0xc34,0x469652cf,
|
||||
+0xc38,0x49795994,
|
||||
+0xc3c,0x0a979764,
|
||||
+0xc40,0x1f7c403f,
|
||||
+0xc44,0x000100b7,
|
||||
+0xc48,0xec020000,
|
||||
+0xc4c,0x007f037f,
|
||||
+0xc50,0x69543420,
|
||||
+0xc54,0x433c0094,
|
||||
+0xc58,0x69543420,
|
||||
+0xc5c,0x433c0094,
|
||||
+0xc60,0x69543420,
|
||||
+0xc64,0x433c0094,
|
||||
+0xc68,0x69543420,
|
||||
+0xc6c,0x433c0094,
|
||||
+0xc70,0x2c7f000d,
|
||||
+0xc74,0x0186155b,
|
||||
+0xc78,0x0000001f,
|
||||
+0xc7c,0x00b91612,
|
||||
+0xc80,0x40000100,
|
||||
+0xc84,0x20f60000,
|
||||
+0xc88,0x20000080,
|
||||
+0xc8c,0x20200000,
|
||||
+0xc90,0x40000100,
|
||||
+0xc94,0x00000000,
|
||||
+0xc98,0x40000100,
|
||||
+0xc9c,0x00000000,
|
||||
+0xca0,0x00492492,
|
||||
+0xca4,0x00000000,
|
||||
+0xca8,0x00000000,
|
||||
+0xcac,0x00000000,
|
||||
+0xcb0,0x00000000,
|
||||
+0xcb4,0x00000000,
|
||||
+0xcb8,0x00000000,
|
||||
+0xcbc,0x28000000,
|
||||
+0xcc0,0x00000000,
|
||||
+0xcc4,0x00000000,
|
||||
+0xcc8,0x00000000,
|
||||
+0xccc,0x00000000,
|
||||
+0xcd0,0x00000000,
|
||||
+0xcd4,0x00000000,
|
||||
+0xcd8,0x64b22427,
|
||||
+0xcdc,0x00766932,
|
||||
+0xce0,0x00222222,
|
||||
+0xce4,0x00000000,
|
||||
+0xce8,0x37644302,
|
||||
+0xcec,0x2f97d40c,
|
||||
+0xd00,0x00000750,
|
||||
+0xd04,0x00000403,
|
||||
+0xd08,0x0000907f,
|
||||
+0xd0c,0x00000001,
|
||||
+0xd10,0xa0633333,
|
||||
+0xd14,0x33333c63,
|
||||
+0xd18,0x6a8f5b6b,
|
||||
+0xd1c,0x00000000,
|
||||
+0xd20,0x00000000,
|
||||
+0xd24,0x00000000,
|
||||
+0xd28,0x00000000,
|
||||
+0xd2c,0xcc979975,
|
||||
+0xd30,0x00000000,
|
||||
+0xd34,0x00000000,
|
||||
+0xd38,0x00000000,
|
||||
+0xd3c,0x00027293,
|
||||
+0xd40,0x00000000,
|
||||
+0xd44,0x00000000,
|
||||
+0xd48,0x00000000,
|
||||
+0xd50,0x6437140a,
|
||||
+0xd54,0x024dbd02,
|
||||
+0xd58,0x00000000,
|
||||
+0xd5c,0x30032064,
|
||||
+0xd60,0x4653de68,
|
||||
+0xd64,0x00518a3c,
|
||||
+0xd68,0x00002101,
|
||||
+0xf14,0x00000003,
|
||||
+0xf4c,0x00000000,
|
||||
+0xf00,0x00000300,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUPHY_REG_1T2RArray[PHY_REG_1T2RArrayLength] = {
|
||||
+0x0, };
|
||||
+
|
||||
+u32 Rtl8192SUPHY_ChangeTo_1T1RArray[PHY_ChangeTo_1T1RArrayLength] = {
|
||||
+0x844,0xffffffff,0x00010000,
|
||||
+0x804,0x0000000f,0x00000001,
|
||||
+0x824,0x00f0000f,0x00300004,
|
||||
+0x82c,0x00f0000f,0x00100002,
|
||||
+0x870,0x04000000,0x00000001,
|
||||
+0x864,0x00000400,0x00000000,
|
||||
+0x878,0x000f000f,0x00000002,
|
||||
+0xe74,0x0f000000,0x00000002,
|
||||
+0xe78,0x0f000000,0x00000002,
|
||||
+0xe7c,0x0f000000,0x00000002,
|
||||
+0xe80,0x0f000000,0x00000002,
|
||||
+0x90c,0x000000ff,0x00000011,
|
||||
+0xc04,0x000000ff,0x00000011,
|
||||
+0xd04,0x0000000f,0x00000001,
|
||||
+0x1f4,0xffff0000,0x00007777,
|
||||
+0x234,0xf8000000,0x0000000a,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUPHY_ChangeTo_1T2RArray[PHY_ChangeTo_1T2RArrayLength] = {
|
||||
+0x804,0x0000000f,0x00000003,
|
||||
+0x824,0x00f0000f,0x00300004,
|
||||
+0x82c,0x00f0000f,0x00300002,
|
||||
+0x870,0x04000000,0x00000001,
|
||||
+0x864,0x00000400,0x00000000,
|
||||
+0x878,0x000f000f,0x00000002,
|
||||
+0xe74,0x0f000000,0x00000002,
|
||||
+0xe78,0x0f000000,0x00000002,
|
||||
+0xe7c,0x0f000000,0x00000002,
|
||||
+0xe80,0x0f000000,0x00000002,
|
||||
+0x90c,0x000000ff,0x00000011,
|
||||
+0xc04,0x000000ff,0x00000033,
|
||||
+0xd04,0x0000000f,0x00000003,
|
||||
+0x1f4,0xffff0000,0x00007777,
|
||||
+0x234,0xf8000000,0x0000000a,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUPHY_ChangeTo_2T2RArray[PHY_ChangeTo_2T2RArrayLength] = {
|
||||
+0x804,0x0000000f,0x00000003,
|
||||
+0x824,0x00f0000f,0x00300004,
|
||||
+0x82c,0x00f0000f,0x00300004,
|
||||
+0x870,0x04000000,0x00000001,
|
||||
+0x864,0x00000400,0x00000001,
|
||||
+0x878,0x000f000f,0x00020002,
|
||||
+0xe74,0x0f000000,0x00000006,
|
||||
+0xe78,0x0f000000,0x00000006,
|
||||
+0xe7c,0x0f000000,0x00000006,
|
||||
+0xe80,0x0f000000,0x00000006,
|
||||
+0x90c,0x000000ff,0x00000033,
|
||||
+0xc04,0x000000ff,0x00000033,
|
||||
+0xd04,0x0000000f,0x00000003,
|
||||
+0x1f4,0xffff0000,0x0000ffff,
|
||||
+0x234,0xf8000000,0x00000013,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUPHY_REG_Array_PG[PHY_REG_Array_PGLength] = {
|
||||
+0xe00,0xffffffff,0x06090909,
|
||||
+0xe04,0xffffffff,0x00030406,
|
||||
+0xe08,0x0000ff00,0x00000000,
|
||||
+0xe10,0xffffffff,0x0a0c0d0e,
|
||||
+0xe14,0xffffffff,0x04070809,
|
||||
+0xe18,0xffffffff,0x0a0c0d0e,
|
||||
+0xe1c,0xffffffff,0x04070809,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SURadioA_1T_Array[RadioA_1T_ArrayLength] = {
|
||||
+0x000,0x00030159,
|
||||
+0x001,0x00030250,
|
||||
+0x002,0x00010000,
|
||||
+0x010,0x0008000f,
|
||||
+0x011,0x000231fc,
|
||||
+0x010,0x000c000f,
|
||||
+0x011,0x0003f9f8,
|
||||
+0x010,0x0002000f,
|
||||
+0x011,0x00020101,
|
||||
+0x014,0x0001093e,
|
||||
+0x014,0x0009093e,
|
||||
+0x015,0x000198f4,
|
||||
+0x017,0x000f6500,
|
||||
+0x01a,0x00013056,
|
||||
+0x01b,0x00060000,
|
||||
+0x01c,0x00000300,
|
||||
+0x01e,0x00031059,
|
||||
+0x021,0x00054000,
|
||||
+0x022,0x0000083c,
|
||||
+0x023,0x00001558,
|
||||
+0x024,0x00000060,
|
||||
+0x025,0x00022583,
|
||||
+0x026,0x0000f200,
|
||||
+0x027,0x000eacf1,
|
||||
+0x028,0x0009bd54,
|
||||
+0x029,0x00004582,
|
||||
+0x02a,0x00000001,
|
||||
+0x02b,0x00021334,
|
||||
+0x02a,0x00000000,
|
||||
+0x02b,0x0000000a,
|
||||
+0x02a,0x00000001,
|
||||
+0x02b,0x00000808,
|
||||
+0x02b,0x00053333,
|
||||
+0x02c,0x0000000c,
|
||||
+0x02a,0x00000002,
|
||||
+0x02b,0x00000808,
|
||||
+0x02b,0x0005b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000003,
|
||||
+0x02b,0x00000808,
|
||||
+0x02b,0x00063333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000004,
|
||||
+0x02b,0x00000808,
|
||||
+0x02b,0x0006b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000005,
|
||||
+0x02b,0x00000709,
|
||||
+0x02b,0x00053333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000006,
|
||||
+0x02b,0x00000709,
|
||||
+0x02b,0x0005b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000007,
|
||||
+0x02b,0x00000709,
|
||||
+0x02b,0x00063333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000008,
|
||||
+0x02b,0x00000709,
|
||||
+0x02b,0x0006b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x00000009,
|
||||
+0x02b,0x0000060a,
|
||||
+0x02b,0x00053333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x0000000a,
|
||||
+0x02b,0x0000060a,
|
||||
+0x02b,0x0005b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x0000000b,
|
||||
+0x02b,0x0000060a,
|
||||
+0x02b,0x00063333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x0000000c,
|
||||
+0x02b,0x0000060a,
|
||||
+0x02b,0x0006b333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x0000000d,
|
||||
+0x02b,0x0000050b,
|
||||
+0x02b,0x00053333,
|
||||
+0x02c,0x0000000d,
|
||||
+0x02a,0x0000000e,
|
||||
+0x02b,0x0000050b,
|
||||
+0x02b,0x00066623,
|
||||
+0x02c,0x0000001a,
|
||||
+0x02a,0x000e4000,
|
||||
+0x030,0x00020000,
|
||||
+0x031,0x000b9631,
|
||||
+0x032,0x0000130d,
|
||||
+0x033,0x00000187,
|
||||
+0x013,0x00019e6c,
|
||||
+0x013,0x00015e94,
|
||||
+0x000,0x00010159,
|
||||
+0x018,0x0000f401,
|
||||
+0x0fe,0x00000000,
|
||||
+0x01e,0x0003105b,
|
||||
+0x0fe,0x00000000,
|
||||
+0x000,0x00030159,
|
||||
+0x010,0x0004000f,
|
||||
+0x011,0x000203f9,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SURadioB_Array[RadioB_ArrayLength] = {
|
||||
+0x000,0x00030159,
|
||||
+0x001,0x00001041,
|
||||
+0x002,0x00011000,
|
||||
+0x005,0x00080fc0,
|
||||
+0x007,0x000fc803,
|
||||
+0x013,0x00017cb0,
|
||||
+0x013,0x00011cc0,
|
||||
+0x013,0x0000dc60,
|
||||
+0x013,0x00008c60,
|
||||
+0x013,0x00004450,
|
||||
+0x013,0x00000020,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SURadioA_to1T_Array[RadioA_to1T_ArrayLength] = {
|
||||
+0x000,0x00000000,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SURadioA_to2T_Array[RadioA_to2T_ArrayLength] = {
|
||||
+0x000,0x00000000,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SURadioB_GM_Array[RadioB_GM_ArrayLength] = {
|
||||
+0x000,0x00030159,
|
||||
+0x001,0x00001041,
|
||||
+0x002,0x00011000,
|
||||
+0x005,0x00080fc0,
|
||||
+0x007,0x000fc803,
|
||||
+0x013,0x0000bef0,
|
||||
+0x013,0x00007e90,
|
||||
+0x013,0x00003e30,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUMAC_2T_Array[MAC_2T_ArrayLength] = {
|
||||
+0x020,0x00000035,
|
||||
+0x048,0x0000000e,
|
||||
+0x049,0x000000f0,
|
||||
+0x04a,0x00000077,
|
||||
+0x04b,0x00000083,
|
||||
+0x0b5,0x00000021,
|
||||
+0x0dc,0x000000ff,
|
||||
+0x0dd,0x000000ff,
|
||||
+0x0de,0x000000ff,
|
||||
+0x0df,0x000000ff,
|
||||
+0x116,0x00000000,
|
||||
+0x117,0x00000000,
|
||||
+0x118,0x00000000,
|
||||
+0x119,0x00000000,
|
||||
+0x11a,0x00000000,
|
||||
+0x11b,0x00000000,
|
||||
+0x11c,0x00000000,
|
||||
+0x11d,0x00000000,
|
||||
+0x160,0x0000000b,
|
||||
+0x161,0x0000000b,
|
||||
+0x162,0x0000000b,
|
||||
+0x163,0x0000000b,
|
||||
+0x164,0x0000000b,
|
||||
+0x165,0x0000000b,
|
||||
+0x166,0x0000000b,
|
||||
+0x167,0x0000000b,
|
||||
+0x168,0x0000000b,
|
||||
+0x169,0x0000000b,
|
||||
+0x16a,0x0000000b,
|
||||
+0x16b,0x0000000b,
|
||||
+0x16c,0x0000000b,
|
||||
+0x16d,0x0000000b,
|
||||
+0x16e,0x0000000b,
|
||||
+0x16f,0x0000000b,
|
||||
+0x170,0x0000000b,
|
||||
+0x171,0x0000000b,
|
||||
+0x172,0x0000000b,
|
||||
+0x173,0x0000000b,
|
||||
+0x174,0x0000000b,
|
||||
+0x175,0x0000000b,
|
||||
+0x176,0x0000000b,
|
||||
+0x177,0x0000000b,
|
||||
+0x178,0x0000000b,
|
||||
+0x179,0x0000000b,
|
||||
+0x17a,0x0000000b,
|
||||
+0x17b,0x0000000b,
|
||||
+0x17c,0x0000000b,
|
||||
+0x17d,0x0000000b,
|
||||
+0x17e,0x0000000b,
|
||||
+0x17f,0x0000000b,
|
||||
+0x236,0x0000000c,
|
||||
+0x503,0x00000022,
|
||||
+0x560,0x00000009,
|
||||
+};
|
||||
+
|
||||
+u32 Rtl8192SUMACPHY_Array_PG[MACPHY_Array_PGLength] = {
|
||||
+0x0, };
|
||||
+
|
||||
+u32 Rtl8192SUAGCTAB_Array[AGCTAB_ArrayLength] = {
|
||||
+0xc78,0x7f000001,
|
||||
+0xc78,0x7f010001,
|
||||
+0xc78,0x7e020001,
|
||||
+0xc78,0x7d030001,
|
||||
+0xc78,0x7c040001,
|
||||
+0xc78,0x7b050001,
|
||||
+0xc78,0x7a060001,
|
||||
+0xc78,0x79070001,
|
||||
+0xc78,0x78080001,
|
||||
+0xc78,0x77090001,
|
||||
+0xc78,0x760a0001,
|
||||
+0xc78,0x750b0001,
|
||||
+0xc78,0x740c0001,
|
||||
+0xc78,0x730d0001,
|
||||
+0xc78,0x720e0001,
|
||||
+0xc78,0x710f0001,
|
||||
+0xc78,0x70100001,
|
||||
+0xc78,0x6f110001,
|
||||
+0xc78,0x6f120001,
|
||||
+0xc78,0x6e130001,
|
||||
+0xc78,0x6d140001,
|
||||
+0xc78,0x6d150001,
|
||||
+0xc78,0x6c160001,
|
||||
+0xc78,0x6b170001,
|
||||
+0xc78,0x6a180001,
|
||||
+0xc78,0x6a190001,
|
||||
+0xc78,0x691a0001,
|
||||
+0xc78,0x681b0001,
|
||||
+0xc78,0x671c0001,
|
||||
+0xc78,0x661d0001,
|
||||
+0xc78,0x651e0001,
|
||||
+0xc78,0x641f0001,
|
||||
+0xc78,0x63200001,
|
||||
+0xc78,0x4c210001,
|
||||
+0xc78,0x4b220001,
|
||||
+0xc78,0x4a230001,
|
||||
+0xc78,0x49240001,
|
||||
+0xc78,0x48250001,
|
||||
+0xc78,0x47260001,
|
||||
+0xc78,0x46270001,
|
||||
+0xc78,0x45280001,
|
||||
+0xc78,0x44290001,
|
||||
+0xc78,0x2c2a0001,
|
||||
+0xc78,0x2b2b0001,
|
||||
+0xc78,0x2a2c0001,
|
||||
+0xc78,0x292d0001,
|
||||
+0xc78,0x282e0001,
|
||||
+0xc78,0x272f0001,
|
||||
+0xc78,0x26300001,
|
||||
+0xc78,0x25310001,
|
||||
+0xc78,0x24320001,
|
||||
+0xc78,0x23330001,
|
||||
+0xc78,0x22340001,
|
||||
+0xc78,0x09350001,
|
||||
+0xc78,0x08360001,
|
||||
+0xc78,0x07370001,
|
||||
+0xc78,0x06380001,
|
||||
+0xc78,0x05390001,
|
||||
+0xc78,0x043a0001,
|
||||
+0xc78,0x033b0001,
|
||||
+0xc78,0x023c0001,
|
||||
+0xc78,0x013d0001,
|
||||
+0xc78,0x003e0001,
|
||||
+0xc78,0x003f0001,
|
||||
+0xc78,0x7f400001,
|
||||
+0xc78,0x7f410001,
|
||||
+0xc78,0x7e420001,
|
||||
+0xc78,0x7d430001,
|
||||
+0xc78,0x7c440001,
|
||||
+0xc78,0x7b450001,
|
||||
+0xc78,0x7a460001,
|
||||
+0xc78,0x79470001,
|
||||
+0xc78,0x78480001,
|
||||
+0xc78,0x77490001,
|
||||
+0xc78,0x764a0001,
|
||||
+0xc78,0x754b0001,
|
||||
+0xc78,0x744c0001,
|
||||
+0xc78,0x734d0001,
|
||||
+0xc78,0x724e0001,
|
||||
+0xc78,0x714f0001,
|
||||
+0xc78,0x70500001,
|
||||
+0xc78,0x6f510001,
|
||||
+0xc78,0x6f520001,
|
||||
+0xc78,0x6e530001,
|
||||
+0xc78,0x6d540001,
|
||||
+0xc78,0x6d550001,
|
||||
+0xc78,0x6c560001,
|
||||
+0xc78,0x6b570001,
|
||||
+0xc78,0x6a580001,
|
||||
+0xc78,0x6a590001,
|
||||
+0xc78,0x695a0001,
|
||||
+0xc78,0x685b0001,
|
||||
+0xc78,0x675c0001,
|
||||
+0xc78,0x665d0001,
|
||||
+0xc78,0x655e0001,
|
||||
+0xc78,0x645f0001,
|
||||
+0xc78,0x63600001,
|
||||
+0xc78,0x4c610001,
|
||||
+0xc78,0x4b620001,
|
||||
+0xc78,0x4a630001,
|
||||
+0xc78,0x49640001,
|
||||
+0xc78,0x48650001,
|
||||
+0xc78,0x47660001,
|
||||
+0xc78,0x46670001,
|
||||
+0xc78,0x45680001,
|
||||
+0xc78,0x44690001,
|
||||
+0xc78,0x2c6a0001,
|
||||
+0xc78,0x2b6b0001,
|
||||
+0xc78,0x2a6c0001,
|
||||
+0xc78,0x296d0001,
|
||||
+0xc78,0x286e0001,
|
||||
+0xc78,0x276f0001,
|
||||
+0xc78,0x26700001,
|
||||
+0xc78,0x25710001,
|
||||
+0xc78,0x24720001,
|
||||
+0xc78,0x23730001,
|
||||
+0xc78,0x22740001,
|
||||
+0xc78,0x09750001,
|
||||
+0xc78,0x08760001,
|
||||
+0xc78,0x07770001,
|
||||
+0xc78,0x06780001,
|
||||
+0xc78,0x05790001,
|
||||
+0xc78,0x047a0001,
|
||||
+0xc78,0x037b0001,
|
||||
+0xc78,0x027c0001,
|
||||
+0xc78,0x017d0001,
|
||||
+0xc78,0x007e0001,
|
||||
+0xc78,0x007f0001,
|
||||
+0xc78,0x3000001e,
|
||||
+0xc78,0x3001001e,
|
||||
+0xc78,0x3002001e,
|
||||
+0xc78,0x3003001e,
|
||||
+0xc78,0x3004001e,
|
||||
+0xc78,0x3405001e,
|
||||
+0xc78,0x3806001e,
|
||||
+0xc78,0x3e07001e,
|
||||
+0xc78,0x3e08001e,
|
||||
+0xc78,0x4409001e,
|
||||
+0xc78,0x460a001e,
|
||||
+0xc78,0x480b001e,
|
||||
+0xc78,0x480c001e,
|
||||
+0xc78,0x4e0d001e,
|
||||
+0xc78,0x560e001e,
|
||||
+0xc78,0x5a0f001e,
|
||||
+0xc78,0x5e10001e,
|
||||
+0xc78,0x6211001e,
|
||||
+0xc78,0x6c12001e,
|
||||
+0xc78,0x7213001e,
|
||||
+0xc78,0x7214001e,
|
||||
+0xc78,0x7215001e,
|
||||
+0xc78,0x7216001e,
|
||||
+0xc78,0x7217001e,
|
||||
+0xc78,0x7218001e,
|
||||
+0xc78,0x7219001e,
|
||||
+0xc78,0x721a001e,
|
||||
+0xc78,0x721b001e,
|
||||
+0xc78,0x721c001e,
|
||||
+0xc78,0x721d001e,
|
||||
+0xc78,0x721e001e,
|
||||
+0xc78,0x721f001e,
|
||||
+};
|
||||
+
|
||||
diff --git a/drivers/staging/rtl8192su/r8192SU_HWImg.h b/drivers/staging/rtl8192su/r8192SU_HWImg.h
|
||||
index 96b1525..36e84af 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192SU_HWImg.h
|
||||
+++ b/drivers/staging/rtl8192su/r8192SU_HWImg.h
|
||||
@@ -5,8 +5,6 @@
|
||||
|
||||
/*Created on 2009/ 3/ 6, 5:29*/
|
||||
|
||||
-#define ImgArrayLength 68368
|
||||
-extern u8 Rtl8192SUFwImgArray[ImgArrayLength];
|
||||
#define MainArrayLength 1
|
||||
extern u8 Rtl8192SUFwMainArray[MainArrayLength];
|
||||
#define DataArrayLength 1
|
||||
diff --git a/drivers/staging/rtl8192su/r8192S_firmware.c b/drivers/staging/rtl8192su/r8192S_firmware.c
|
||||
index ff65bd1..752a3f1 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192S_firmware.c
|
||||
+++ b/drivers/staging/rtl8192su/r8192S_firmware.c
|
||||
@@ -360,117 +360,58 @@ bool FirmwareDownload92S(struct net_device *dev)
|
||||
|
||||
RT_TRACE(COMP_FIRMWARE, " --->FirmwareDownload92S()\n");
|
||||
|
||||
- //3//
|
||||
- //3 //<1> Open Image file, and map file to contineous memory if open file success.
|
||||
- //3 // or read image file from array. Default load from BIN file
|
||||
- //3//
|
||||
- priv->firmware_source = FW_SOURCE_IMG_FILE;// We should decided by Reg.
|
||||
-
|
||||
- switch( priv->firmware_source )
|
||||
+/*
|
||||
+* Load the firmware from RTL8192SU/rtl8192sfw.bin
|
||||
+*/
|
||||
+ if(pFirmware->szFwTmpBufferLen == 0)
|
||||
{
|
||||
- case FW_SOURCE_IMG_FILE:
|
||||
- if(pFirmware->szFwTmpBufferLen == 0)
|
||||
- {
|
||||
-
|
||||
- rc = request_firmware(&fw_entry, pFwImageFileName[ulInitStep],&priv->udev->dev);//===>1
|
||||
- if(rc < 0 ) {
|
||||
- RT_TRACE(COMP_ERR, "request firmware fail!\n");
|
||||
- goto DownloadFirmware_Fail;
|
||||
- }
|
||||
-
|
||||
- if(fw_entry->size > sizeof(pFirmware->szFwTmpBuffer))
|
||||
- {
|
||||
- RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n");
|
||||
- release_firmware(fw_entry);
|
||||
- goto DownloadFirmware_Fail;
|
||||
- }
|
||||
+ rc = request_firmware(&fw_entry, pFwImageFileName[ulInitStep],&priv->udev->dev);
|
||||
+ if(rc < 0 ) {
|
||||
+ RT_TRACE(COMP_ERR, "request firmware fail!\n");
|
||||
+ goto DownloadFirmware_Fail;
|
||||
+ }
|
||||
|
||||
- memcpy(pFirmware->szFwTmpBuffer,fw_entry->data,fw_entry->size);
|
||||
- pFirmware->szFwTmpBufferLen = fw_entry->size;
|
||||
+ if(fw_entry->size > sizeof(pFirmware->szFwTmpBuffer)) {
|
||||
+ RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n");
|
||||
release_firmware(fw_entry);
|
||||
-
|
||||
- pucMappedFile = pFirmware->szFwTmpBuffer;
|
||||
- file_length = pFirmware->szFwTmpBufferLen;
|
||||
-
|
||||
- //Retrieve FW header.
|
||||
- pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile;
|
||||
- pFwHdr = pFirmware->pFwHeader;
|
||||
- RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \
|
||||
- pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \
|
||||
- pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE);
|
||||
- pFirmware->FirmwareVersion = byte(pFwHdr->Version ,0);
|
||||
- if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM)))
|
||||
- {
|
||||
- RT_TRACE(COMP_ERR, "%s: memory for data image is less than IMEM required\n",\
|
||||
- __FUNCTION__);
|
||||
- goto DownloadFirmware_Fail;
|
||||
- } else {
|
||||
- pucMappedFile+=FwHdrSize;
|
||||
-
|
||||
- //Retrieve IMEM image.
|
||||
- memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE);
|
||||
- pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE;
|
||||
- }
|
||||
-
|
||||
- if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM))
|
||||
- {
|
||||
- RT_TRACE(COMP_ERR, "%s: memory for data image is less than EMEM required\n",\
|
||||
- __FUNCTION__);
|
||||
- goto DownloadFirmware_Fail;
|
||||
- } else {
|
||||
- pucMappedFile += pFirmware->FwIMEMLen;
|
||||
-
|
||||
- /* Retriecve EMEM image */
|
||||
- memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);//===>6
|
||||
- pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE;
|
||||
- }
|
||||
-
|
||||
-
|
||||
+ goto DownloadFirmware_Fail;
|
||||
}
|
||||
- break;
|
||||
|
||||
- case FW_SOURCE_HEADER_FILE:
|
||||
-#if 1
|
||||
-#define Rtl819XFwImageArray Rtl8192SUFwImgArray
|
||||
- //2008.11.10 Add by tynli.
|
||||
- pucMappedFile = Rtl819XFwImageArray;
|
||||
- ulFileLength = ImgArrayLength;
|
||||
+ memcpy(pFirmware->szFwTmpBuffer,fw_entry->data,fw_entry->size);
|
||||
+ pFirmware->szFwTmpBufferLen = fw_entry->size;
|
||||
+ release_firmware(fw_entry);
|
||||
+
|
||||
+ pucMappedFile = pFirmware->szFwTmpBuffer;
|
||||
+ file_length = pFirmware->szFwTmpBufferLen;
|
||||
|
||||
- RT_TRACE(COMP_INIT,"Fw download from header.\n");
|
||||
- /* Retrieve FW header*/
|
||||
+ /* Retrieve FW header. */
|
||||
pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile;
|
||||
pFwHdr = pFirmware->pFwHeader;
|
||||
RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \
|
||||
pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \
|
||||
pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE);
|
||||
pFirmware->FirmwareVersion = byte(pFwHdr->Version ,0);
|
||||
-
|
||||
- if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM)))
|
||||
- {
|
||||
- printk("FirmwareDownload92S(): memory for data image is less than IMEM required\n");
|
||||
+ if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM))) {
|
||||
+ RT_TRACE(COMP_ERR, "%s: memory for data image is less than IMEM required\n",\
|
||||
+ __FUNCTION__);
|
||||
goto DownloadFirmware_Fail;
|
||||
} else {
|
||||
pucMappedFile+=FwHdrSize;
|
||||
- //Retrieve IMEM image.
|
||||
+ /* Retrieve IMEM image. */
|
||||
memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE);
|
||||
pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE;
|
||||
}
|
||||
|
||||
- if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM))
|
||||
- {
|
||||
- printk(" FirmwareDownload92S(): memory for data image is less than EMEM required\n");
|
||||
- goto DownloadFirmware_Fail;
|
||||
- } else {
|
||||
- pucMappedFile+= pFirmware->FwIMEMLen;
|
||||
-
|
||||
- //Retriecve EMEM image.
|
||||
- memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);
|
||||
- pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE;
|
||||
- }
|
||||
-#endif
|
||||
- break;
|
||||
- default:
|
||||
- break;
|
||||
+ if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM)) {
|
||||
+ RT_TRACE(COMP_ERR, "%s: memory for data image is less than EMEM required\n",\
|
||||
+ __FUNCTION__);
|
||||
+ goto DownloadFirmware_Fail;
|
||||
+ } else {
|
||||
+ pucMappedFile += pFirmware->FwIMEMLen;
|
||||
+ /* Retriecve EMEM image */
|
||||
+ memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);//===>6
|
||||
+ pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE;
|
||||
+ }
|
||||
}
|
||||
|
||||
FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus);
|
||||
diff --git a/drivers/staging/rtl8192su/r8192S_firmware.h b/drivers/staging/rtl8192su/r8192S_firmware.h
|
||||
index c525380..2c2cf80 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192S_firmware.h
|
||||
+++ b/drivers/staging/rtl8192su/r8192S_firmware.h
|
||||
@@ -59,12 +59,6 @@ typedef enum _desc_packet_type_e{
|
||||
DESC_PACKET_TYPE_NORMAL = 1,
|
||||
}desc_packet_type_e;
|
||||
|
||||
-typedef enum _firmware_source{
|
||||
- FW_SOURCE_IMG_FILE = 0,
|
||||
- FW_SOURCE_HEADER_FILE = 1,
|
||||
-}firmware_source_e, *pfirmware_source_e;
|
||||
-
|
||||
-
|
||||
typedef enum _opt_rst_type{
|
||||
OPT_SYSTEM_RESET = 0,
|
||||
OPT_FIRMWARE_RESET = 1,
|
||||
@@ -185,7 +179,6 @@ typedef enum _FIRMWARE_8192S_STATUS{
|
||||
#define RTL8190_MAX_FIRMWARE_CODE_SIZE 64000 //64k
|
||||
|
||||
typedef struct _rt_firmware{
|
||||
- firmware_source_e eFWSource;
|
||||
PRT_8192S_FIRMWARE_HDR pFwHeader;
|
||||
FIRMWARE_8192S_STATUS FWStatus;
|
||||
u16 FirmwareVersion;
|
||||
diff --git a/drivers/staging/rtl8192su/r8192U.h b/drivers/staging/rtl8192su/r8192U.h
|
||||
index 2a11e01..ba87623 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192U.h
|
||||
+++ b/drivers/staging/rtl8192su/r8192U.h
|
||||
@@ -1258,7 +1258,6 @@ typedef struct r8192_priv
|
||||
u8 Rf_Mode; //add for Firmware RF -R/W switch
|
||||
prt_firmware pFirmware;
|
||||
rtl819xUsb_loopback_e LoopbackMode;
|
||||
- firmware_source_e firmware_source;
|
||||
bool usb_error;
|
||||
|
||||
u16 EEPROMTxPowerDiff;
|
|
@ -8,31 +8,23 @@
|
|||
+ features/all/drivers-infiniband-hw-ipath-iba7220-use-request_firmware.patch
|
||||
+ features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
|
||||
|
||||
+ features/all/rt28x0sta-constify-RTUSBMultiWrite-RTUSBFirmwareWrite.patch
|
||||
+ features/all/rt28x0sta-use-request_firmware.patch
|
||||
+ features/all/lgs8gxx-lgs8g75-request_firmware.patch
|
||||
+ features/all/r8169-rtl8168d-1-2-request_firmware-2.patch
|
||||
+ features/all/sound-pci-cs46xx-request_firmware.patch
|
||||
|
||||
+ features/all/module-firmware/0025-tty-declare-MODULE_FIRMWARE-in-various-drivers.patch
|
||||
+ features/all/module-firmware/0026-staging-declare-MODULE_FIRMWARE-in-various-drivers.patch
|
||||
+ features/all/module-firmware/0027-sep-include-driver-name-in-firmware-filenames.patch
|
||||
+ features/all/module-firmware/0028-sep-declare-MODULE_FIRMWARE.patch
|
||||
+ features/all/module-firmware/0029-isight-firmware-declare-MODULE_FIRMWARE.patch
|
||||
|
||||
# patches from aufs2 repository, with s/EXPORT_SYMBOL/&_GPL/
|
||||
+ features/all/aufs2/aufs2-base.patch
|
||||
+ features/all/aufs2/aufs2-standalone.patch
|
||||
+ features/all/aufs2/aufs2-kbuild.patch
|
||||
#+ features/all/aufs2/aufs2-base.patch
|
||||
#+ features/all/aufs2/aufs2-standalone.patch
|
||||
#+ features/all/aufs2/aufs2-kbuild.patch
|
||||
# content of fs/ and include/ from aufs2 repository
|
||||
+ features/all/aufs2/aufs2-add.patch
|
||||
#+ features/all/aufs2/aufs2-add.patch
|
||||
# mark as staging/crap
|
||||
+ features/all/aufs2/mark-as-staging.patch
|
||||
#+ features/all/aufs2/mark-as-staging.patch
|
||||
|
||||
# content of src/ from speakup package; generated with:
|
||||
# diff -ur --unidirectional-new-file nonexistent src | filterdiff --strip=1 --addoldprefix=a/drivers/staging/speakup/ --addnewprefix=b/drivers/staging/speakup/
|
||||
+ features/all/speakup/speakup-add.patch
|
||||
+ features/all/speakup/speakup-kbuild.patch
|
||||
#+ features/all/speakup/speakup-kbuild.patch
|
||||
|
||||
#+ bugfix/ia64/hardcode-arch-script-output.patch
|
||||
+ bugfix/mips/disable-advansys.patch
|
||||
|
@ -40,25 +32,19 @@
|
|||
+ bugfix/mips/disable-werror.patch
|
||||
+ bugfix/powerpc/lpar-console.patch
|
||||
#+ bugfix/all/wireless-regulatory-default-EU.patch
|
||||
+ debian/dfsg/radeon-add-clarifying-comment-to-r600-blit.patch
|
||||
+ features/arm/compression-add-lzma.patch
|
||||
+ features/arm/openrd-client.patch
|
||||
#+ features/arm/compression-add-lzma.patch
|
||||
#+ features/arm/openrd-client.patch
|
||||
|
||||
+ features/all/i915-autoload-without-CONFIG_DRM_I915_KMS.patch
|
||||
|
||||
+ bugfix/ia64/ia64-Include-linux-personality.h-header-in-asm-fcntl.patch
|
||||
+ bugfix/ia65/ia64-Include-linux-personality.h-header-in-asm-fcntl.patch
|
||||
|
||||
+ debian/sysrq-mask.patch
|
||||
|
||||
+ features/arm/dns323-rev-a1-powerled.patch
|
||||
+ features/arm/openrd-base-uart.patch
|
||||
+ features/all/rtl8192su-always-use-request_firmware.patch
|
||||
|
||||
+ bugfix/all/stable/2.6.33.1.patch
|
||||
+ bugfix/all/stable/2.6.33.2.patch
|
||||
#+ features/arm/dns323-rev-a1-powerled.patch
|
||||
#+ features/arm/openrd-base-uart.patch
|
||||
|
||||
+ debian/arch-sh4-fix-uimage-build.patch
|
||||
+ bugfix/all/stable/2.6.33.3.patch
|
||||
|
||||
+ features/all/phylib-Support-phy-module-autoloading.patch
|
||||
+ features/all/phylib-Add-module-table-to-all-existing-phy-drivers.patch
|
||||
|
@ -66,31 +52,13 @@
|
|||
+ bugfix/x86/PCI-Disable-MSI-for-MCP55-on-P5N32-E-SLI.patch
|
||||
+ bugfix/all/phylib-fix-typo-in-bcm6xx-PHY-driver-table.patch
|
||||
+ features/arm/dns323-rev-a1-gpio-request.patch
|
||||
+ bugfix/all/drm-i915-Stop-trying-to-use-ACPI-lid-status-to-deter.patch
|
||||
+ bugfix/all/forcedeth-fix-tx-limit2-flag-check.patch
|
||||
+ bugfix/all/reiserfs-fix-permissions-on-reiserfs_priv.patch
|
||||
+ bugfix/all/libata-ata_piix-clear-spurious-IRQ.patch
|
||||
+ bugfix/all/block-blk_abort_request-lock-fix.patch
|
||||
+ bugfix/mips/enable-pata-platform.patch
|
||||
+ bugfix/all/rndis_host-Poll-status-channel-before-control-channel.patch
|
||||
+ features/all/ipheth-add.patch
|
||||
+ bugfix/all/ipheth-potential-null-dereferences-on-error-path.patch
|
||||
+ bugfix/all/libata-fix-accesses-at-LBA28-boundary.patch
|
||||
+ bugfix/all/thinkpad-acpi-add-x100e.patch
|
||||
+ features/all/drm-radeon-evergreen.patch
|
||||
+ bugfix/all/drm-radeon-kms-further-spread-spectrum-fixes.patch
|
||||
+ bugfix/all/p54pci-move-tx-cleanup-into-tasklet.patch
|
||||
+ bugfix/all/p54pci-revise-tx-locking.patch
|
||||
+ bugfix/all/p54usb-Add-usbid-for-Corega-CG-WLUSB2GT.patch
|
||||
+ bugfix/all/drivers-net-wireless-p54-txrx.c-Fix-off-by-one-error.patch
|
||||
+ bugfix/all/p54pci-prevent-stuck-rx-ring.patch
|
||||
+ bugfix/all/p54pci-fix-serious-sparse-warning.patch
|
||||
+ bugfix/all/p54pci-fix-bugs-in-p54p_check_tx_ring.patch
|
||||
+ bugfix/all/p54pci-fix-regression.patch
|
||||
+ bugfix/all/hugetlb-fix-infinite-loop-in-get_futex_key-when-backed-by-huge-pages.patch
|
||||
+ bugfix/all/ext4-issue-discard-operation-before-releasing-blocks.patch
|
||||
+ bugfix/all/libiscsi-regression-fix-header-digest-errors.patch
|
||||
+ bugfix/all/sctp-fix-skb_over_panic-resulting-from-multiple-invalid-parameter-errors.patch
|
||||
+ bugfix/all/cifs-allow-null-nd-on-create.patch
|
||||
+ bugfix/all/tipc-fix-oops-on-send-prior-to-entering-networked-mode.patch
|
||||
+ bugfix/powerpc/kgdb-dont-needlessly-skip-PAGE_USER-test-for-Fsl-booke.patch
|
||||
|
|
Loading…
Reference in New Issue