rpms/kernel/devel jwltest-e1000-7_1_6.patch, NONE, 1.1.2.1 jwltest-ipw3945-1_0_5.patch, NONE, 1.1.6.1 kernel-2.6.spec, 1.2450, 1.2450.2.1
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Tue Jul 25 18:10:45 UTC 2006
Author: linville
Update of /cvs/dist/rpms/kernel/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv5800
Modified Files:
Tag: private-linville-jwltest-fc6-2-branch
kernel-2.6.spec
Added Files:
Tag: private-linville-jwltest-fc6-2-branch
jwltest-e1000-7_1_6.patch jwltest-ipw3945-1_0_5.patch
Log Message:
jwltest-e1000-7_1_6.patch:
e1000.h | 28 -
e1000_ethtool.c | 41 +
e1000_hw.c | 1377 +++++++++++++++++++++++++-------------------------------
e1000_hw.h | 83 ++-
e1000_main.c | 342 ++++++-------
e1000_osdep.h | 4
e1000_param.c | 94 ++-
7 files changed, 923 insertions(+), 1046 deletions(-)
--- NEW FILE jwltest-e1000-7_1_6.patch ---
--- linux-2.6.17.noarch/drivers/net/e1000/e1000_param.c.orig 2006-07-25 13:27:03.000000000 -0400
+++ linux-2.6.17.noarch/drivers/net/e1000/e1000_param.c 2006-07-25 13:52:41.000000000 -0400
@@ -342,9 +342,10 @@ e1000_check_options(struct e1000_adapter
opt.arg.r.max = mac_type < e1000_82544 ?
E1000_MAX_TXD : E1000_MAX_82544_TXD;
- tx_ring->count = TxDescriptors[bd];
- e1000_validate_option(&tx_ring->count, &opt, adapter);
- E1000_ROUNDUP(tx_ring->count, REQ_TX_DESCRIPTOR_MULTIPLE);
+ tx_ring->count = TxDescriptors[bd];
+ e1000_validate_option(&tx_ring->count, &opt, adapter);
+ E1000_ROUNDUP(tx_ring->count,
+ REQ_TX_DESCRIPTOR_MULTIPLE);
for (i = 0; i < adapter->num_tx_queues; i++)
tx_ring[i].count = tx_ring->count;
}
@@ -363,9 +364,10 @@ e1000_check_options(struct e1000_adapter
opt.arg.r.max = mac_type < e1000_82544 ? E1000_MAX_RXD :
E1000_MAX_82544_RXD;
- rx_ring->count = RxDescriptors[bd];
- e1000_validate_option(&rx_ring->count, &opt, adapter);
- E1000_ROUNDUP(rx_ring->count, REQ_RX_DESCRIPTOR_MULTIPLE);
+ rx_ring->count = RxDescriptors[bd];
+ e1000_validate_option(&rx_ring->count, &opt, adapter);
+ E1000_ROUNDUP(rx_ring->count,
+ REQ_RX_DESCRIPTOR_MULTIPLE);
for (i = 0; i < adapter->num_rx_queues; i++)
rx_ring[i].count = rx_ring->count;
}
@@ -377,9 +379,9 @@ e1000_check_options(struct e1000_adapter
.def = OPTION_ENABLED
};
- int rx_csum = XsumRX[bd];
- e1000_validate_option(&rx_csum, &opt, adapter);
- adapter->rx_csum = rx_csum;
+ int rx_csum = XsumRX[bd];
+ e1000_validate_option(&rx_csum, &opt, adapter);
+ adapter->rx_csum = rx_csum;
}
{ /* Flow Control */
@@ -399,9 +401,9 @@ e1000_check_options(struct e1000_adapter
.p = fc_list }}
};
- int fc = FlowControl[bd];
- e1000_validate_option(&fc, &opt, adapter);
- adapter->hw.fc = adapter->hw.original_fc = fc;
+ int fc = FlowControl[bd];
+ e1000_validate_option(&fc, &opt, adapter);
+ adapter->hw.fc = adapter->hw.original_fc = fc;
}
{ /* Transmit Interrupt Delay */
struct e1000_option opt = {
@@ -413,8 +415,9 @@ e1000_check_options(struct e1000_adapter
.max = MAX_TXDELAY }}
};
- adapter->tx_int_delay = TxIntDelay[bd];
- e1000_validate_option(&adapter->tx_int_delay, &opt, adapter);
+ adapter->tx_int_delay = TxIntDelay[bd];
+ e1000_validate_option(&adapter->tx_int_delay, &opt,
+ adapter);
}
{ /* Transmit Absolute Interrupt Delay */
struct e1000_option opt = {
@@ -426,9 +429,9 @@ e1000_check_options(struct e1000_adapter
.max = MAX_TXABSDELAY }}
};
- adapter->tx_abs_int_delay = TxAbsIntDelay[bd];
- e1000_validate_option(&adapter->tx_abs_int_delay, &opt,
- adapter);
+ adapter->tx_abs_int_delay = TxAbsIntDelay[bd];
+ e1000_validate_option(&adapter->tx_abs_int_delay, &opt,
+ adapter);
}
{ /* Receive Interrupt Delay */
struct e1000_option opt = {
@@ -440,8 +443,9 @@ e1000_check_options(struct e1000_adapter
.max = MAX_RXDELAY }}
};
- adapter->rx_int_delay = RxIntDelay[bd];
- e1000_validate_option(&adapter->rx_int_delay, &opt, adapter);
+ adapter->rx_int_delay = RxIntDelay[bd];
+ e1000_validate_option(&adapter->rx_int_delay, &opt,
+ adapter);
}
{ /* Receive Absolute Interrupt Delay */
struct e1000_option opt = {
@@ -453,9 +457,9 @@ e1000_check_options(struct e1000_adapter
.max = MAX_RXABSDELAY }}
};
- adapter->rx_abs_int_delay = RxAbsIntDelay[bd];
- e1000_validate_option(&adapter->rx_abs_int_delay, &opt,
- adapter);
+ adapter->rx_abs_int_delay = RxAbsIntDelay[bd];
+ e1000_validate_option(&adapter->rx_abs_int_delay, &opt,
+ adapter);
}
{ /* Interrupt Throttling Rate */
struct e1000_option opt = {
@@ -467,19 +471,21 @@ e1000_check_options(struct e1000_adapter
.max = MAX_ITR }}
};
- adapter->itr = InterruptThrottleRate[bd];
- switch (adapter->itr) {
- case 0:
- DPRINTK(PROBE, INFO, "%s turned off\n", opt.name);
- break;
- case 1:
- DPRINTK(PROBE, INFO, "%s set to dynamic mode\n",
- opt.name);
- break;
- default:
- e1000_validate_option(&adapter->itr, &opt, adapter);
- break;
- }
+ adapter->itr = InterruptThrottleRate[bd];
+ switch (adapter->itr) {
+ case 0:
+ DPRINTK(PROBE, INFO, "%s turned off\n",
+ opt.name);
+ break;
+ case 1:
+ DPRINTK(PROBE, INFO, "%s set to dynamic mode\n",
+ opt.name);
+ break;
+ default:
+ e1000_validate_option(&adapter->itr, &opt,
+ adapter);
+ break;
+ }
}
{ /* Smart Power Down */
struct e1000_option opt = {
@@ -489,9 +495,9 @@ e1000_check_options(struct e1000_adapter
.def = OPTION_DISABLED
};
- int spd = SmartPowerDownEnable[bd];
- e1000_validate_option(&spd, &opt, adapter);
- adapter->smart_power_down = spd;
+ int spd = SmartPowerDownEnable[bd];
+ e1000_validate_option(&spd, &opt, adapter);
+ adapter->smart_power_down = spd;
}
{ /* Kumeran Lock Loss Workaround */
struct e1000_option opt = {
@@ -577,8 +583,8 @@ e1000_check_copper_options(struct e1000_
.p = speed_list }}
};
- speed = Speed[bd];
- e1000_validate_option(&speed, &opt, adapter);
+ speed = Speed[bd];
+ e1000_validate_option(&speed, &opt, adapter);
}
{ /* Duplex */
struct e1000_opt_list dplx_list[] = {{ 0, "" },
@@ -600,8 +606,8 @@ e1000_check_copper_options(struct e1000_
"Speed/Duplex/AutoNeg parameter ignored.\n");
return;
}
- dplx = Duplex[bd];
- e1000_validate_option(&dplx, &opt, adapter);
+ dplx = Duplex[bd];
+ e1000_validate_option(&dplx, &opt, adapter);
}
if (AutoNeg[bd] != OPTION_UNSET && (speed != 0 || dplx != 0)) {
@@ -653,8 +659,8 @@ e1000_check_copper_options(struct e1000_
.p = an_list }}
};
- an = AutoNeg[bd];
- e1000_validate_option(&an, &opt, adapter);
+ an = AutoNeg[bd];
+ e1000_validate_option(&an, &opt, adapter);
adapter->hw.autoneg_advertised = an;
}
--- linux-2.6.17.noarch/drivers/net/e1000/e1000_hw.h.orig 2006-07-25 13:27:03.000000000 -0400
+++ linux-2.6.17.noarch/drivers/net/e1000/e1000_hw.h 2006-07-25 13:28:17.000000000 -0400
@@ -306,6 +306,7 @@ typedef enum {
/* Initialization */
int32_t e1000_reset_hw(struct e1000_hw *hw);
int32_t e1000_init_hw(struct e1000_hw *hw);
+int32_t e1000_id_led_init(struct e1000_hw * hw);
int32_t e1000_set_mac_type(struct e1000_hw *hw);
void e1000_set_media_type(struct e1000_hw *hw);
@@ -313,8 +314,10 @@ void e1000_set_media_type(struct e1000_h
int32_t e1000_setup_link(struct e1000_hw *hw);
[...5055 lines suppressed...]
-/**
- * e1000_io_slot_reset - called after the pci bus has been reset.
- * @pdev: Pointer to PCI device
- *
- * Restart the card from scratch, as if from a cold-boot. Implementation
- * resembles the first-half of the e1000_resume routine.
- */
-static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
-{
- struct net_device *netdev = pci_get_drvdata(pdev);
- struct e1000_adapter *adapter = netdev->priv;
-
- if (pci_enable_device(pdev)) {
- printk(KERN_ERR "e1000: Cannot re-enable PCI device after reset.\n");
- return PCI_ERS_RESULT_DISCONNECT;
- }
- pci_set_master(pdev);
-
- pci_enable_wake(pdev, 3, 0);
- pci_enable_wake(pdev, 4, 0); /* 4 == D3 cold */
-
- /* Perform card reset only on one instance of the card */
- if (PCI_FUNC (pdev->devfn) != 0)
- return PCI_ERS_RESULT_RECOVERED;
-
- e1000_reset(adapter);
- E1000_WRITE_REG(&adapter->hw, WUS, ~0);
-
- return PCI_ERS_RESULT_RECOVERED;
-}
-
-/**
- * e1000_io_resume - called when traffic can start flowing again.
- * @pdev: Pointer to PCI device
- *
- * This callback is called when the error recovery driver tells us that
- * its OK to resume normal operation. Implementation resembles the
- * second-half of the e1000_resume routine.
- */
-static void e1000_io_resume(struct pci_dev *pdev)
-{
- struct net_device *netdev = pci_get_drvdata(pdev);
- struct e1000_adapter *adapter = netdev->priv;
- uint32_t manc, swsm;
-
- if (netif_running(netdev)) {
- if (e1000_up(adapter)) {
- printk("e1000: can't bring device back up after reset\n");
- return;
- }
- }
-
- netif_device_attach(netdev);
-
- if (adapter->hw.mac_type >= e1000_82540 &&
- adapter->hw.media_type == e1000_media_type_copper) {
- manc = E1000_READ_REG(&adapter->hw, MANC);
- manc &= ~(E1000_MANC_ARP_EN);
- E1000_WRITE_REG(&adapter->hw, MANC, manc);
- }
-
- switch (adapter->hw.mac_type) {
- case e1000_82573:
- swsm = E1000_READ_REG(&adapter->hw, SWSM);
- E1000_WRITE_REG(&adapter->hw, SWSM,
- swsm | E1000_SWSM_DRV_LOAD);
- break;
- default:
- break;
- }
-
- if (netif_running(netdev))
- mod_timer(&adapter->watchdog_timer, jiffies);
-}
-
/* e1000_main.c */
--- linux-2.6.17.noarch/drivers/net/e1000/e1000_ethtool.c.orig 2006-07-25 13:27:03.000000000 -0400
+++ linux-2.6.17.noarch/drivers/net/e1000/e1000_ethtool.c 2006-07-25 13:28:17.000000000 -0400
@@ -33,6 +33,21 @@
#include <asm/uaccess.h>
+extern char e1000_driver_name[];
+extern char e1000_driver_version[];
+
+extern int e1000_up(struct e1000_adapter *adapter);
+extern void e1000_down(struct e1000_adapter *adapter);
+extern void e1000_reinit_locked(struct e1000_adapter *adapter);
+extern void e1000_reset(struct e1000_adapter *adapter);
+extern int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx);
+extern int e1000_setup_all_rx_resources(struct e1000_adapter *adapter);
+extern int e1000_setup_all_tx_resources(struct e1000_adapter *adapter);
+extern void e1000_free_all_rx_resources(struct e1000_adapter *adapter);
+extern void e1000_free_all_tx_resources(struct e1000_adapter *adapter);
+extern void e1000_update_stats(struct e1000_adapter *adapter);
+
+
struct e1000_stats {
char stat_string[ETH_GSTRING_LEN];
int sizeof_stat;
@@ -415,12 +430,12 @@ e1000_get_regs(struct net_device *netdev
regs_buff[23] = regs_buff[18]; /* mdix mode */
e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
} else {
- e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
+ e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
regs_buff[13] = (uint32_t)phy_data; /* cable length */
regs_buff[14] = 0; /* Dummy (to align w/ IGP phy reg dump) */
regs_buff[15] = 0; /* Dummy (to align w/ IGP phy reg dump) */
regs_buff[16] = 0; /* Dummy (to align w/ IGP phy reg dump) */
- e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
+ e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
regs_buff[17] = (uint32_t)phy_data; /* extended 10bt distance */
regs_buff[18] = regs_buff[13]; /* cable polarity */
regs_buff[19] = 0; /* Dummy (to align w/ IGP phy reg dump) */
@@ -629,7 +644,7 @@ e1000_set_ringparam(struct net_device *n
tx_ring_size = sizeof(struct e1000_tx_ring) * adapter->num_tx_queues;
rx_ring_size = sizeof(struct e1000_rx_ring) * adapter->num_rx_queues;
- while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
+ if (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
msleep(1);
if (netif_running(adapter->netdev))
@@ -696,7 +711,6 @@ e1000_set_ringparam(struct net_device *n
}
clear_bit(__E1000_RESETTING, &adapter->flags);
-
return 0;
err_setup_tx:
e1000_free_all_rx_resources(adapter);
@@ -751,7 +765,7 @@ e1000_reg_test(struct e1000_adapter *ada
/* The status register is Read Only, so a write should fail.
* Some bits that get toggled are ignored.
*/
- switch (adapter->hw.mac_type) {
+ switch (adapter->hw.mac_type) {
/* there are several bits on newer hardware that are r/w */
case e1000_82571:
case e1000_82572:
@@ -882,10 +896,10 @@ e1000_intr_test(struct e1000_adapter *ad
*data = 0;
/* Hook up test interrupt handler just for this test */
- if (!request_irq(irq, &e1000_test_intr, IRQF_PROBE_SHARED,
- netdev->name, netdev)) {
- shared_int = FALSE;
- } else if (request_irq(irq, &e1000_test_intr, IRQF_SHARED,
+ if (!request_irq(irq, &e1000_test_intr, SA_PROBEIRQ, netdev->name,
+ netdev))
+ shared_int = FALSE;
+ else if (request_irq(irq, &e1000_test_intr, SA_SHIRQ,
netdev->name, netdev)){
*data = 1;
return -1;
@@ -1208,7 +1222,7 @@ e1000_nonintegrated_phy_loopback(struct
e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
/* Wait for reset to complete. */
- udelay(500);
+ usec_delay(500);
/* Have to setup TX_CLK and TX_CRS after software reset */
e1000_phy_reset_clk_and_crs(adapter);
@@ -1306,7 +1320,7 @@ e1000_integrated_phy_loopback(struct e10
if (adapter->hw.phy_type == e1000_phy_m88)
e1000_phy_disable_receiver(adapter);
- udelay(500);
+ usec_delay(500);
return 0;
}
@@ -1705,6 +1719,7 @@ e1000_get_wol(struct net_device *netdev,
default:
wol->supported = WAKE_UCAST | WAKE_MCAST |
WAKE_BCAST | WAKE_MAGIC;
+
wol->wolopts = 0;
do_defaults:
@@ -1908,7 +1923,7 @@ static struct ethtool_ops e1000_ethtool_
.set_pauseparam = e1000_set_pauseparam,
.get_rx_csum = e1000_get_rx_csum,
.set_rx_csum = e1000_set_rx_csum,
- .get_tx_csum = e1000_get_tx_csum,
+ .get_tx_csum = e1000_get_tx_csum,
.set_tx_csum = e1000_set_tx_csum,
.get_sg = ethtool_op_get_sg,
.set_sg = ethtool_op_set_sg,
@@ -1922,7 +1937,7 @@ static struct ethtool_ops e1000_ethtool_
.phys_id = e1000_phys_id,
.get_stats_count = e1000_get_stats_count,
.get_ethtool_stats = e1000_get_ethtool_stats,
- .get_perm_addr = ethtool_op_get_perm_addr,
+ .get_perm_addr = ethtool_op_get_perm_addr,
};
void e1000_set_ethtool_ops(struct net_device *netdev)
jwltest-ipw3945-1_0_5.patch:
Documentation/networking/README.ipw3945 | 984 +
drivers/net/wireless/Kconfig | 106
drivers/net/wireless/Makefile | 2
drivers/net/wireless/ipw3945.c |16651 ++++++++++++++++++++++++++++++++
drivers/net/wireless/ipw3945.h | 2556 ++++
drivers/net/wireless/ipw3945_daemon.h | 403
6 files changed, 20702 insertions(+)
--- NEW FILE jwltest-ipw3945-1_0_5.patch ---
--- linux-2.6.17.noarch/Documentation/networking/README.ipw3945.orig 2006-06-26 12:09:00.000000000 -0400
+++ linux-2.6.17.noarch/Documentation/networking/README.ipw3945 2006-06-26 12:09:05.000000000 -0400
@@ -0,0 +1,998 @@
+
+Intel(R) PRO/Wireless 3945ABG Network Connection driver for Linux* in
+support of:
+
+Intel(R) PRO/Wireless 3945ABG Network Connection Adapter
+Intel(R) PRO/Wireless 3945BG Network Connection Adapter
+
+Note: The Intel(R) PRO/Wireless 3945ABG Network Connection driver for
+Linux is a unified driver that works on both hardware adapters listed
+above. In this document the Intel(R) PRO/Wireless 3945ABG Network Connection
+driver for Linux will be used to reference the unified driver.
+
+Copyright (C) 2005 - 2006, Intel Corporation
+
+README.ipw3945
+
+Version: 1.0.5
+Date : May 22, 2006
+
+
+Index
+-----------------------------------------------
+0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
+1. Introduction
+1.1. Overview of Features
+2. Loading the Driver
+3. Feature Details
+3.1. LEDs
+3.2. Association Details
+3.3. Roaming Details
+3.4. Scanning Details
+3.5. Antenna Selection and "Diversity"
+3.6. IEEE 802.11h Details
+3.7. Tx Power
+3.8. Security Details
+3.9. Power Management
+4. Configuring the driver
+4.1. Command Line Parameters
+4.3. Sysfs Helper Files:
+5. Wireless Tools Details
+5.1. iwlist
+5.2. iwpriv
+5.3. iwconfig
+6. Support
+7. License
+
+
+===============================================
+0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
+===============================================
+
+Important Notice FOR ALL USERS OR DISTRIBUTORS!!!!
+
+Intel wireless LAN adapters are engineered, manufactured, tested, and
+quality checked to ensure that they meet all necessary local and
+governmental regulatory agency requirements for the regions that they
+are designated and/or marked to ship into. Since wireless LANs are
+generally unlicensed devices that share spectrum with radars,
+satellites, and other licensed and unlicensed devices, it is sometimes
+necessary to dynamically detect, avoid, and limit usage to avoid
+interference with these devices. In many instances Intel is required to
+provide test data to prove regional and local compliance to regional and
+governmental regulations before certification or approval to use the
+product is granted. Intel's wireless LAN's EEPROM, firmware, and
+software driver are designed to carefully control parameters that affect
+radio operation and to ensure electromagnetic compliance (EMC). These
+parameters include, without limitation, RF power, spectrum usage,
+channel scanning, and human exposure.
+
+For these reasons Intel cannot permit any manipulation by third parties
+of the software provided in binary format with the wireless WLAN
+adapters (e.g., the EEPROM and firmware). Furthermore, if you use any
+patches, utilities, or code with the Intel wireless LAN adapters that
+have been manipulated by an unauthorized party (i.e., patches,
+utilities, or code (including open source code modifications) which have
+not been validated by Intel), (i) you will be solely responsible for
+ensuring the regulatory compliance of the products, (ii) Intel will bear
+no liability, under any theory of liability for any issues associated
+with the modified products, including without limitation, claims under
+the warranty and/or issues arising from regulatory non-compliance, and
+(iii) Intel will not provide or be required to assist in providing
+support to any third parties for such modified products.
+
+Note: Many regulatory agencies consider Wireless LAN adapters to be
+modules, and accordingly, condition system-level regulatory approval
+upon receipt and review of test data documenting that the antennas and
+system configuration do not cause the EMC and radio operation to be
+non-compliant.
+
+The drivers available for download from SourceForge are provided as a
+part of a development project. Conformance to local regulatory
+requirements is the responsibility of the individual developer. As
+such, if you are interested in deploying or shipping a driver as part of
+solution intended to be used for purposes other than development, please
+obtain a tested driver from Intel Customer Support at:
+
+http://support.intel.com/support/notebook/sb/CS-006408.htm
+
+
+===============================================
+1. Introduction
+===============================================
+The following sections attempt to provide a brief introduction to using
+the Intel(R) PRO/Wireless 3945ABG driver for Linux.
+
+This document is not meant to be a comprehensive manual on
+understanding or using wireless technologies, but should be sufficient
+to get you moving without wires on Linux.
+
+For information on building and installing the driver, see the INSTALL
+file.
+
+
+1.1. Overview of Features
+-----------------------------------------------
+The current release (1.0.5) supports the following features:
+
++ BSS mode (Infrastructure, Managed)
++ IBSS mode (Ad-Hoc)
++ WEP (OPEN and SHARED KEY mode)
++ 802.1x EAP via wpa_supplicant and xsupplicant
++ 802.11i (WPA/WPA2)
++ Wireless Extension support
++ Full B and G rate support
++ Full A rate support (ABG only)
++ Transmit power control
++ S state support (ACPI suspend/resume)
+
+The following features are currently enabled, but not officially
+supported:
+
++ QoS
++ Monitor mode (aka RFMon)
++ Associated RF promiscuous mode
++ Frame Rx simulation
+
+The distinction between officially supported and enabled is a reflection
+of the amount of validation and interoperability testing that has been
+performed on a given feature. Note: in addition, the features may not have
+all of the code in the driver to fully enable the feature.
+
+
+===============================================
+2. Loading the Driver
+===============================================
+
+See the INSTALL document for information on installing the driver.
+
+Once installed, a typical method for launching the driver and the
+regulatory daemon is via the load script provided in the source package:
+
+ # ./load debug=0x43fff <--- You need to be root for this
+
+NOTE: You will not be able to rmmod the driver so long as the
+ipw3945d daemon is running.
+
+If you followed the steps of the INSTALL document to set up your
+modprobe.conf, you can load the module by simply running:
+
+ # modprobe ipw3945 <--- You need to be root for this
+
+If you did not configure your modprobe.conf to automatically launch the
+regulatory daemon (see INSTALL), you must do so manually after loading
+the module:
+
+ # /sbin/ipw3945d <--- You need to be root for this
+
+If you want to unload the module (and kill the deamon as well), you can
+simply use the unload script:
+
+ # ./unload <--- You need to be root for this
+
+or likewise if you configured modprobe.conf:
+
+ # modprobe -r ipw3945 <--- You need to be root for this
+
+If you did not configure modprobe.conf to unload the regulatory daemon
+and are not using the unload script, you need to kill the regulatory
+daemon before you will be able to unload the module:
+
+ # /sbin/ipw3945d --kill <--- You need to be root for this
+ # modprobe -r ipw3945
+
+
+===============================================
+3. Feature Details
+===============================================
+
+3.1. LEDs
+-----------------------------------------------
+
+The driver will attempt to control the wireless LED, if one is
+configured in hardware. There are typically two LEDs:
+
+ Activity -- used to indicate wireless activity
+ Link -- used to indicate wireless link
[...20347 lines suppressed...]
+ * a command to appear. Currently set to 60s. */
+#define DAEMON_POLL_INTERVAL 60000
+
+#define DAEMON_BUF_SIZE 3000
+
+struct daemon_cmd_hdr {
+ u8 cmd;
+ u8 flags;
+ u8 token;
+ u8 reserved1;
+ u16 version;
+ u16 data_len;
+ u8 data[0];
+} __attribute__ ((packed));
+
+struct daemon_cmd {
+ struct daemon_cmd_hdr hdr;
+ u8 data[DAEMON_BUF_SIZE];
+} __attribute__ ((packed));
+
+/* driver <- daemon error response */
+struct daemon_error {
+ u8 cmd_requested;
+ u8 reserved1;
+ u16 reserved2;
+ s32 return_code;
+} __attribute__ ((packed));
+
+/* driver <- daemon synchronous command done */
+struct daemon_cmd_done {
+ u8 cmd_requested;
+ u8 reserved1;
+ u16 reserved2;
+ s32 return_code;
+} __attribute__ ((packed));
+
+/* driver <- daemon regulatory information
+ *
+ * The following is sent from the daemon to the driver
+ * to inform the driver of current channel capabilities and
+ * restrictions.
+ *
+ * Immediately after INIT is provided from the driver the
+ * daemon will send the full channel map.
+ *
+ * After a channel has been selected via rx_config, the
+ * daemon will send periodic updates when the channel limits
+ * change for a specific channel.
+ *
+ * NOTE: The txpower field represents the current configured
+ * power as directed by either the user (sent to the daemon
+ * through the DAEMON_SYNC::DAEMON_SYNC_TXPOWER_LIMIT command)
+ * or as specified through the currently associated access
+ * point. The max_txpower is the highest the channel is
+ * allowed to transmit.
+ *
+ */
+enum {
+ DAEMON_A_BAND = (1 << 0), /* 0 - 2.4Ghz, 1 - 5.2Ghz */
+ DAEMON_IBSS_ALLOWED = (1 << 1),
+ DAEMON_ACTIVE_ALLOWED = (1 << 2),
+ DAEMON_RADAR_DETECT = (1 << 3),
+};
+struct daemon_channel_info {
+ u8 channel;
+ u8 flags;
+ s8 txpower;
+ s8 max_txpower;
+};
+struct daemon_regulatory_info {
+ u16 count; /* Number of channels provided */
+ struct daemon_channel_info channel_info[0];
+} __attribute__ ((packed));
+
+/* driver <- daemon information request */
+struct daemon_request_info {
+ u8 request;
+} __attribute__ ((packed));
+
+/* driver <- daemon set state */
+struct daemon_set_state {
+ u8 state;
+} __attribute__ ((packed));
+
+/* driver -> daemon scan request */
+#define DAEMON_MIN_24GHZ_CHANNEL 1
+#define DAEMON_MAX_24GHZ_CHANNEL 14
+#define DAEMON_MIN_52GHZ_CHANNEL 34
+#define DAEMON_MAX_52GHZ_CHANNEL 165
+
+#define DAEMON_SCAN_FLAG_24GHZ (1<<0)
+#define DAEMON_SCAN_FLAG_52GHZ (1<<1)
+#define DAEMON_SCAN_FLAG_ACTIVE (1<<2)
+#define DAEMON_SCAN_FLAG_DIRECT (1<<3)
+
+#define DAEMON_MAX_CMD_SIZE 1024
+
+enum {
+ DAEMON_TXRATE_1 = 0xa,
+ DAEMON_TXRATE_2 = 0x14,
+ DAEMON_TXRATE_5_5 = 0x37,
+ DAEMON_TXRATE_6 = 0xd,
+ DAEMON_TXRATE_9 = 0xf,
+ DAEMON_TXRATE_11 = 0x6e,
+ DAEMON_TXRATE_12 = 0x5,
+ DAEMON_TXRATE_18 = 0x7,
+ DAEMON_TXRATE_24 = 0x9,
+ DAEMON_TXRATE_36 = 0xb,
+ DAEMON_TXRATE_48 = 0x1,
+ DAEMON_TXRATE_54 = 0x3,
+};
+
+struct daemon_scan_channel {
+ u8 channel;
+ u8 request_active;
+ u16 active_dwell;
+ u16 passive_dwell;
+} __attribute__ ((packed));
+
+struct daemon_ssid_ie {
+ u8 id;
+ u8 len;
+ u8 ssid[32];
+} __attribute__ ((packed));
+
+struct daemon_rx_config {
+ u8 dev_type;
+ u16 channel;
+ u32 flags;
+ u32 filter_flags;
+ u8 ofdm_basic_rates;
+ u8 cck_basic_rates;
+ u8 node_addr[6];
+ u8 bssid_addr[6];
+ u16 assoc_id;
+ u16 beacon_interval;
+} __attribute__ ((packed));
+
+#define DAEMON_MAX_SCAN_SIZE 1024
+struct daemon_scan_request {
+ u8 flags; /* 0 - 2.4Ghz, 1 - 5.2Ghz */
+ u8 channel_count;
+ u16 probe_request_len;
+ u16 quiet_time; /* dwell only this long on quiet chnl (active scan) */
+ u16 quiet_plcp_th; /* quiet chnl is < this # pkts (typ. 1) */
+ u32 suspend_time; /* pause scan this long when returning to svc chnl */
+ u32 max_out_time; /* max msec to be out of associated (service) chnl */
+ u8 probe_request_rate; /* rate to send probe request */
+ u32 filter_flags;
+ u32 rxon_flags;
+ struct daemon_ssid_ie direct_scan;
+ u8 data[0];
+ /*
+ The channels start after the probe request payload and are of type:
+
+ struct daemon_scan_channel channels[0];
+
+ NOTE: Only one band of channels can be scanned per pass. You
+ can not mix 2.4Ghz channels and 5.2Ghz channels and must
+ request a scan multiple times (not concurrently)
+
+ */
+} __attribute__ ((packed));
+
+/* driver -> daemon 11h frame */
+struct daemon_80211_frame {
+ u8 channel;
+ u8 reserved1;
+ u16 rssi;
+ u16 reserved2;
+ u64 tsf;
+ u32 beacon_time;
+ u16 frame_len;
+ u8 frame[0];
+} __attribute__ ((packed));
+
+struct daemon_sync_txpower_limit {
+ u8 channel;
+ s8 power;
+} __attribute__ ((packed));
+
+enum {
+ DAEMON_SYNC_UNINIT = 0,
+ DAEMON_SYNC_INIT,
+ DAEMON_SYNC_SCAN_COMPLETE,
+ DAEMON_SYNC_TXPOWER_LIMIT,
+ DAEMON_SYNC_MEASURE_REPORT,
+ DAEMON_SYNC_TX_STATUS,
+ DAEMON_SYNC_SUSPEND,
+ DAEMON_SYNC_RESUME,
+};
+
+/* driver -> daemon */
+struct daemon_sync_cmd {
+ u16 state;
+ u16 len;
+ u8 data[0];
+} __attribute__ ((packed));
+
+#endif
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/kernel-2.6.spec,v
retrieving revision 1.2450
retrieving revision 1.2450.2.1
diff -u -r1.2450 -r1.2450.2.1
--- kernel-2.6.spec 25 Jul 2006 16:03:52 -0000 1.2450
+++ kernel-2.6.spec 25 Jul 2006 18:10:41 -0000 1.2450.2.1
@@ -367,6 +367,8 @@
Patch1203: linux-2.6-NFSD-badness.patch
# NIC driver updates
+Patch1300: jwltest-ipw3945-1_0_5.patch
+Patch1301: jwltest-e1000-7_1_6.patch
# Filesystem stuff.
# Squashfs
@@ -890,6 +892,10 @@
%patch1203 -p1
# NIC driver fixes.
+# ipw3945 1.0.5
+%patch1300 -p1
+# e1000 7.1.6
+%patch1301 -p1
# Filesystem patches.
# Squashfs
More information about the fedora-cvs-commits
mailing list