From: Mateusz Berezecki <mateuszb@gmail.com>
To: kernel-mentors@selenic.com
Cc: netdev <netdev@vger.kernel.org>
Subject: atheros driver (3/8)
Date: Fri, 05 Aug 2005 04:58:26 +0200 [thread overview]
Message-ID: <42F2D5D2.8040105@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: atheros5212-3.patch --]
[-- Type: text/x-patch, Size: 22339 bytes --]
diff -uprN -X 'netdev-2.6.git#ieee80211/Documentation/dontdiff' netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/beacons.c netdev-atheros/drivers/net/wireless/atheros/atheros5212/beacons.c
--- netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/beacons.c 1970-01-01 01:00:00.000000000 +0100
+++ netdev-atheros/drivers/net/wireless/atheros/atheros5212/beacons.c 2005-08-05 03:48:36.000000000 +0200
@@ -0,0 +1,235 @@
+/*
+ * All the work was created by reverse engineering and porting
+ * for interoperability. The creator is Mateusz Berezecki,
+ * unless explicitly marked ( some parts are derived
+ * from GPL'ed parts of madwifi project located at http://madwifi.sf.net)
+ *
+ * derived or copied parts of code licensed under
+ * dual GPL/BSD license
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * rest of the code has been reversed by me and is under copyright too
+ * Copyright (C) 2005 Mateusz Berezecki
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <linux/netdevice.h>
+
+#include <net/ieee80211.h>
+
+#include <linux/wireless.h>
+#include <net/iw_handler.h>
+
+#include "atheros_id.h"
+#include "atheros_dev.h"
+#include "atheros_defs.h"
+//#include "atheros_devops.h"
+//#include "atheros_regops.h"
+#include "atheros_registers.h"
+#include "atheros.h"
+
+
+
+
+void ath_beacon_init(struct net_device *netdev, unsigned int nextbtt,
+ unsigned int intval)
+{
+ struct atheros_priv *pdata = ieee80211_priv(netdev);
+ struct ieee80211_device *dev = netdev_priv(netdev);
+ unsigned int val;
+
+ ath_reg_write(netdev, AR5212_TIMER0, nextbtt);
+
+ switch (dev->iw_mode) {
+ case IW_MODE_MONITOR:
+ case IW_MODE_INFRA:
+ ath_reg_write(netdev,
+ AR5212_TIMER1,
+ 0xffff);
+ ath_reg_write(netdev,
+ AR5212_TIMER2,
+ 0x7ffff);
+ break;
+
+ case IW_MODE_ADHOC:
+ ath_reg_write(netdev,
+ AR5212_TIMER1,
+ (nextbtt - 2) << 3);
+ ath_reg_write(netdev,
+ AR5212_TIMER2,
+ (nextbtt - 10) << 3);
+ break;
+
+ default:
+ break;
+ }
+
+ ath_reg_write(netdev, AR5212_TIMER3, nextbtt +
+ (pdata->atim_win ? pdata->atim_win : 1));
+
+ val = intval &
+ (AR5212_BEACON_PERIOD |
+ AR5212_BEACON_RESET_TSF |
+ AR5212_BEACON_ENABLE);
+
+ if (val & AR5212_BEACON_RESET_TSF)
+ ath_reg_write(netdev, AR5212_BEACON,
+ AR5212_BEACON_RESET_TSF);
+
+ ath_reg_write(netdev, AR5212_BEACON, val);
+}
+
+void ath_reset_station_btimers(struct net_device *netdev)
+{
+ int tmp;
+
+ ath_reg_write(netdev, AR5212_TIMER0, 0);
+ tmp = (ath_reg_read(netdev, AR5212_STA_ID1)
+ | AR5212_STA_ID1_PWR_SV) &
+ ~(AR5212_STA_ID1_DEFAULT_ANTENNA |
+ AR5212_STA_ID1_PCF);
+
+
+ ath_reg_write(netdev, AR5212_BEACON, 0xffff);
+ return;
+}
+
+void ath_set_station_btimers(struct net_device *netdev,
+ struct beacon_state *state, unsigned int tsf,
+ unsigned int dtcx, unsigned int cfpcx)
+{
+ unsigned int tmp, dtimp, nextt;
+ unsigned int bintval;
+
+ if (state->bs_cfpperiod) {
+ tmp = ath_reg_read(netdev, AR5212_STA_ID1);
+ tmp |= AR5212_STA_ID1_PCF;
+
+ ath_reg_write(netdev, AR5212_STA_ID1, tmp);
+
+ ath_reg_write(netdev, AR5212_CFP_PERIOD,
+ state->bs_cfpperiod *
+ state->bs_dtimperiod *
+ state->bs_intval);
+
+ ath_reg_write(netdev, AR5212_CFP_DUR,
+ state->bs_cfpmaxduration);
+
+ ath_reg_write(netdev, AR5212_TIMER2,
+ ((tsf +
+ ((cfpcx * state->bs_dtimperiod + dtcx) *
+ state->bs_intval))) << 3);
+ } else
+ ath_reg_disable(netdev,
+ AR5212_STA_ID1,
+ AR5212_STA_ID1_PCF);
+
+
+ bintval = state->bs_intval;
+
+ ath_reg_write(netdev, AR5212_TIMER0, state->bs_nexttbtt);
+
+ tmp = ath_reg_read(netdev, AR5212_BEACON) & 0xff800000;
+ tmp |= state->bs_intval & 0xffff;
+
+ if (state->bs_timoffset) {
+ tmp |= ((state->bs_timoffset + 4) << 16) & 0x7f0000;
+ } else {
+ tmp |= (4 << 16) & 0x7f0000;
+ }
+
+ ath_reg_write(netdev, AR5212_BEACON, tmp);
+
+
+ if (state->bs_bmissthreshold <= (0xff00 >> 8)) {
+ BUG();
+ return;
+ }
+
+ tmp = ath_reg_read(netdev, AR5212_RSSI_THR) & (~0xff00);
+ tmp |= (state->bs_bmissthreshold << 8) & 0xff00;
+ ath_reg_write(netdev, AR5212_RSSI_THR, tmp);
+
+
+ bintval = state->bs_intval;
+ if (bintval < state->bs_sleepduration)
+ bintval = state->bs_sleepduration;
+
+
+ dtimp = state->bs_dtimperiod;
+ if (state->bs_sleepduration > dtimp)
+ dtimp = state->bs_sleepduration;
+
+ if (bintval == dtimp)
+ nextt = state->bs_nextdtim;
+ else
+ nextt = state->bs_nexttbtt;
+
+ ath_reg_write(netdev, AR5212_SLEEP0,
+ ((state->bs_nextdtim - 3) & 0x7ffff) |
+ ((10 << 24) & 0xff000000) |
+ 0x00080000 | 0x00100000);
+
+ ath_reg_write(netdev, AR5212_SLEEP1,
+ ( ( (nextt - 3) << 3) & 0x7ffff) |
+ ((10 << 24) & 0xff000000));
+
+ ath_reg_write(netdev, AR5212_SLEEP2,
+ (bintval & 0x0000ffff) |
+ ((dtimp << 16) & 0xffff0000));
+}
+
+
+unsigned int ath_wait_for_beacon_done(struct net_device *netdev)
+{
+ unsigned int i;
+
+ for (i = 0; i < 1000; i++) {
+/* XXX remove this comment
+ * if ( !ath_num_tx_pending(netdev, 2) )
+ break;
+*/
+ udelay(10);
+ }
+
+ if (i < 1000)
+ return 1;
+
+ return 0;
+}
+
+
+unsigned int ath_beacon_queue_setup(struct net_device *netdev)
+{
+ struct tx_queue_info qi;
+ memset(&qi, 0, sizeof(qi));
+
+ qi.tqi_aifs = 0xffffffff;
+ qi.tqi_cwmin = 0xffffffff;
+ qi.tqi_cwmax = 0xffffffff;
+ qi.tqi_qflags = 0x00000002;
+
+ return ath_setup_tx_queue(netdev, 2, &qi);
+}
+
diff -uprN -X 'netdev-2.6.git#ieee80211/Documentation/dontdiff' netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/caps.c netdev-atheros/drivers/net/wireless/atheros/atheros5212/caps.c
--- netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/caps.c 1970-01-01 01:00:00.000000000 +0100
+++ netdev-atheros/drivers/net/wireless/atheros/atheros5212/caps.c 2005-08-05 03:48:36.000000000 +0200
@@ -0,0 +1,176 @@
+/*
+ * All the work was created by reverse engineering and porting
+ * for interoperability. The creator is Mateusz Berezecki,
+ * unless explicitly marked ( some parts are derived
+ * from GPL'ed parts of madwifi project located at http://madwifi.sf.net)
+ *
+ * derived or copied parts of code licensed under
+ * dual GPL/BSD license
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * rest of the code has been reversed by me and is under copyright too
+ * Copyright (C) 2005 Mateusz Berezecki
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <linux/netdevice.h>
+
+#include <net/ieee80211.h>
+
+#include <linux/wireless.h>
+#include <net/iw_handler.h>
+
+#include "atheros_id.h"
+#include "atheros_dev.h"
+#include "atheros_defs.h"
+#include "atheros_registers.h"
+#include "atheros.h"
+#include "eeprom.h"
+#include "interrupts.h"
+
+
+unsigned int ath_get_ext_cap(struct net_device *netdev, CAPABILITY_TYPE type,
+ unsigned int cap, unsigned int *result)
+{
+ switch (type) {
+ case CAP_REG_DMN:
+ *result = 0;
+ return 0;
+
+ case CAP_KEYCACHE_SIZE:
+ *result = 0x80; /* FIXME this is a default for testing
+ but we seriously need something better
+ than a hardcoded value. reversing
+ that part is quite hard though... :(
+ */
+ return 0;
+
+ case CAP_NUM_TXQUEUES:
+ return ENOTSUPP; /* FIXME */
+
+ case CAP_VEOL: /* FIXME */
+ return ENOTSUPP;
+
+ case CAP_COMPRESSION:
+ case CAP_BURST:
+ case CAP_FASTFRAME:
+ case CAP_DIAG:
+ case CAP_PSPOLL:
+ return ENOTSUPP; /* FIXME */
+
+ case CAP_TXPOW:
+ switch (cap) {
+ case 1:
+ /* FIXME */
+ break;
+
+ case 0:
+ return 0;
+
+ case 2:
+ break;
+
+ case 3:
+ break;
+
+ default:
+ return ENOTSUPP;
+ }
+
+ default:
+ return EINVAL;
+ }
+}
+
+
+unsigned int ath_get_cap(struct net_device *netdev, CAPABILITY_TYPE type,
+ unsigned int cap, unsigned int *result)
+{
+ struct atheros_priv *pdata = ieee80211_priv(netdev);
+
+ switch (type) {
+ case CAP_CIPHER:
+ switch (cap) {
+ case CIPHER_WEP:
+ case CIPHER_AES_OCB:
+ return 0; /* 5212 supports them */
+
+ case CIPHER_AES_CCM:
+ return ENOTSUPP;
+
+ case CIPHER_TKIP:
+ case CIPHER_CLR:
+ case CIPHER_MIC:
+ return 0;
+
+ default:
+ return ENOTSUPP;
+ }
+ break;
+
+ case CAP_TKIP_MIC: /* hardware TKIP MIC ? */
+ /* if blablabla fix IT */
+ return ENOTSUPP; /* not supported for now */
+
+ case CAP_TKIP_SPLIT: /* TKIP using split keys ? */
+ /* same as above. needs DOING :P */
+ return ENOTSUPP;
+
+ case CAP_PHYCOUNTERS:
+ if (pdata->disable_hw_counters == 0)
+ return 0;
+ return 1;
+
+ case CAP_DIVERSITY:
+ if (!cap)
+ return 0;
+
+ if (cap != 1)
+ return EINVAL;
+
+ if ( (ath_reg_read(netdev, 0xa208) & 0x20) == 0 )
+ return ENXIO;
+
+ return (ath_reg_read(netdev, 0xa208) & 0x20);
+
+ case CAP_TPC: /* tx power control (per-packet) */
+ if (!cap)
+ return 0;
+
+ if (cap != 1)
+ return 0;
+ /*
+ if (0x196c+hal == 0)
+ return 1
+ return 0;
+ */
+ return 0; /* just for now. it can break stuff but we don't care for a moment */
+
+ default:
+ return ath_get_ext_cap(netdev, type, cap, result);
+ }
+}
+
+
+
diff -uprN -X 'netdev-2.6.git#ieee80211/Documentation/dontdiff' netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/caps.h netdev-atheros/drivers/net/wireless/atheros/atheros5212/caps.h
--- netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/caps.h 1970-01-01 01:00:00.000000000 +0100
+++ netdev-atheros/drivers/net/wireless/atheros/atheros5212/caps.h 2005-08-05 03:48:36.000000000 +0200
@@ -0,0 +1,61 @@
+/*
+ * All the work was created by reverse engineering and porting
+ * for interoperability. The creator is Mateusz Berezecki,
+ * unless explicitly marked ( some parts are derived
+ * from GPL'ed parts of madwifi project located at http://madwifi.sf.net)
+ *
+ * derived or copied parts of code licensed under
+ * dual GPL/BSD license
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * rest of the code has been reversed by me and is under copyright too
+ * Copyright (C) 2005 Mateusz Berezecki
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef _CAPS_H
+#define _CAPS_H
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <linux/netdevice.h>
+
+#include <net/ieee80211.h>
+
+#include <linux/wireless.h>
+#include <net/iw_handler.h>
+
+#include "atheros_id.h"
+#include "atheros_dev.h"
+#include "atheros_defs.h"
+#include "atheros_registers.h"
+#include "atheros.h"
+#include "eeprom.h"
+#include "interrupts.h"
+
+unsigned int ath_get_cap(struct net_device *, CAPABILITY_TYPE,
+ unsigned int, unsigned int *);
+
+
+
+#endif
+
diff -uprN -X 'netdev-2.6.git#ieee80211/Documentation/dontdiff' netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/chans.c netdev-atheros/drivers/net/wireless/atheros/atheros5212/chans.c
--- netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/chans.c 1970-01-01 01:00:00.000000000 +0100
+++ netdev-atheros/drivers/net/wireless/atheros/atheros5212/chans.c 2005-08-05 03:48:36.000000000 +0200
@@ -0,0 +1,213 @@
+/*
+ * All the work was created by reverse engineering and porting
+ * for interoperability. The creator is Mateusz Berezecki,
+ * unless explicitly marked ( some parts are derived
+ * from GPL'ed parts of madwifi project located at http://madwifi.sf.net)
+ *
+ * derived or copied parts of code licensed under
+ * dual GPL/BSD license
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * rest of the code has been reversed by me and is under copyright too
+ * Copyright (C) 2005 Mateusz Berezecki
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <linux/netdevice.h>
+
+#include <net/ieee80211.h>
+
+#include <linux/wireless.h>
+#include <net/iw_handler.h>
+
+#include "atheros_id.h"
+#include "atheros_dev.h"
+#include "atheros_defs.h"
+#include "atheros_registers.h"
+#include "atheros.h"
+#include "eeprom.h"
+#include "interrupts.h"
+#include "chans.h"
+
+/* THIS IS A KILLER :/ */
+struct domain_table domains[] = {
+ {
+ .domain = WORLD0,
+ .ahmodes = ADHOC_MODE_11A_DSUPPORT,
+ .ahchans = NULL,
+ .chancnt = 10,
+
+ .chans[0] = {
+ .mode = MODE_11A,
+ .freq = { 5260, 5280, 5300, 5320, 5180, 5200, 5220, 5240, 0 },
+ },
+ .chans[1] = {
+ .mode = MODE_11A,
+ .freq = { 5170, 5190, 5210, 5230, 0 },
+ },
+ .chans[2] = {
+ .mode = MODE_11B,
+ .freq = { 2412, 2437, 2462, 2442, 2472, 0 },
+ },
+ .chans[3] = {
+ .mode = MODE_11A,
+ .freq = { 5745, 5765, 5785, 5805, 5825, 0 },
+ },
+ .chans[4] = {
+ .mode = MODE_TURBO,
+ .freq = { 5210, 5250, 5290, 0 },
+ },
+ .chans[5] = {
+ .mode = MODE_TURBO,
+ .freq = { 5760, 5800, 0 },
+ },
+ .chans[6] = {
+ .mode = MODE_11A,
+ .freq = { 5500, 5520, 5540, 5560, 5580, 5600, 5620, 5640, 5660,5680, 5700, 0},
+ },
+ .chans[7] = {
+ .mode = MODE_11B,
+ .freq = { 2417, 2422, 2427, 2432, 2447, 2452, 2457, 2467, 0 },
+ },
+ .chans[8] = {
+ .mode = MODE_11B,
+ .freq = { 2484, 0 },
+ },
+ .chans[9] = {
+ .mode = MODE_108G,
+ .freq = { 2437, 0 },
+ },
+ }
+};
+
+/* just for now, we support one domain. MY DOMAIN :-) */
+#define DOMAIN_TABLE_SIZE 1
+
+unsigned int getdmn(struct net_device *netdev,
+ unsigned int *result, unsigned int *ix)
+{
+ struct atheros_priv *p = ieee80211_priv(netdev);
+ unsigned int d = p->domain;
+
+ if (d & 0x8000)
+ return 0;
+
+ printk(KERN_DEBUG"atheros: getdmn, SKU super domain\n");
+ d &= 0x0fff;
+ if (d != 0) {
+ unsigned int i;
+ for (i = 0; i < DOMAIN_TABLE_SIZE; i++) {
+ if (d == domains[i].domain) {
+ if (result != NULL)
+ *result = d;
+ if (ix != NULL)
+ *ix = i;
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+unsigned int ath_init_channels(struct net_device *netdev,
+ struct channel *ch, unsigned short max, unsigned int *nchans,
+ unsigned int country, unsigned short mode,
+ unsigned int outdoor, unsigned int extchan)
+{
+ struct atheros_priv *p = ieee80211_priv(netdev);
+
+ printk(KERN_DEBUG"atheros: calling getdmn with domain %x\n", country);
+ if (getdmn(netdev, NULL, NULL)) {
+ printk(KERN_DEBUG"atheros: SKU common mode enabled\n");
+ p->common = 1;
+ }
+
+ if (p->domain & 0x4000) {
+ printk(KERN_DEBUG"atheros: we got roaming to set up\n");
+ }
+
+ /* XXX */
+ return 1;
+}
+
+unsigned int ath_get_modes(struct net_device *netdev)
+{
+ struct atheros_priv *p = ieee80211_priv(netdev);
+ unsigned int mode = 0;
+
+ if (p->eeinfo.mode_a) {
+ mode |= MODE_11A;
+ /* XXX ignore turbo for a while */
+ }
+
+ if (p->eeinfo.mode_b)
+ mode |= MODE_11B;
+
+ if (p->eeinfo.mode_g) {
+ mode |= MODE_11G;
+ /* XXX ignore turbo for a while */
+ }
+
+ return mode;
+}
+
+unsigned int ath_getwirelessmodes(struct net_device *netdev,
+ unsigned int country)
+{
+ unsigned int mode;
+
+ mode = ath_get_modes(netdev); /* wtf nonsense ;-) */
+ return mode;
+}
+
+unsigned int ath_get_channels(struct net_device *netdev,
+ unsigned int country, unsigned int outdoor,
+ unsigned int xchanmode)
+{
+ struct channel *chans;
+ unsigned int nchan;
+ unsigned int ix, i;
+
+ chans = kmalloc(255 * sizeof(struct channel), GFP_KERNEL);
+
+ if (!chans) {
+ printk(KERN_ERR"atheros: no memory left!\n");
+ return 0;
+ }
+
+ if (!ath_init_channels(netdev, chans, 255, &nchan, 0,
+ 0xfff, outdoor, xchanmode)) {
+ printk(KERN_DEBUG"atheros: channel init failed\n");
+ kfree(chans);
+ return 0;
+ }
+
+ printk(KERN_DEBUG"atheros: nchan=%d\n", nchan);
+ for (i = 0; i < nchan; i++) {
+ }
+
+ //kfree(chans);
+ return 1;
+}
+
diff -uprN -X 'netdev-2.6.git#ieee80211/Documentation/dontdiff' netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/chans.h netdev-atheros/drivers/net/wireless/atheros/atheros5212/chans.h
--- netdev-2.6.git#ieee80211/drivers/net/wireless/atheros/atheros5212/chans.h 1970-01-01 01:00:00.000000000 +0100
+++ netdev-atheros/drivers/net/wireless/atheros/atheros5212/chans.h 2005-08-05 03:48:36.000000000 +0200
@@ -0,0 +1,110 @@
+/*
+ * All the work was created by reverse engineering and porting
+ * for interoperability. The creator is Mateusz Berezecki,
+ * unless explicitly marked ( some parts are derived
+ * from GPL'ed parts of madwifi project located at http://madwifi.sf.net)
+ *
+ * derived or copied parts of code licensed under
+ * dual GPL/BSD license
+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * rest of the code has been reversed by me and is under copyright too
+ * Copyright (C) 2005 Mateusz Berezecki
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+enum {
+ ADHOC_MODE_11A_DISABLED,
+ ADHOC_MODE_11A_ENABLED,
+ ADHOC_MODE_11B_ENABLED,
+ ADHOC_MODE_11A_DSUPPORT,
+};
+
+enum {
+ MODE_11A = 1,
+ MODE_11B = 2,
+ MODE_11G = 3,
+ MODE_TURBO = 4,
+ MODE_108G = 5,
+};
+
+enum {
+ NO_ENUMRD = 0x00,
+ CTRY_11B_ONLY = 0x03,
+ CTRY_ISRAEL = 0x07,
+ CTRY_ETSIC1 = 0x08,
+ CTRY_USA1 = 0x10,
+ CTRY_HONGKONG = 0x11,
+ CTRY_CANADA = 0x20,
+ CTRY_AUSTRALIA = 0x21,
+ CTRY_ETSIC2 = 0x22,
+ CTRY_FRANCE = 0x31,
+ CTRY_USA2 = 0x3A,
+ CTRY_WORLD1 = 0x37,
+ CTRY_FRANCE2 = 0x32,
+ CTRY_HUNGARY = 0x35,
+ CTRY_FRANCE3 = 0x36,
+ CTRY_WORLD2 = 0x30,
+ CTRY_ETSIC2 = 0x38,
+ CTRY_WORLD3 = 0x39,
+ CTRY_BULGARIA = 0x34,
+ CTRY_RESERVED = 0x33,
+ CTRY_JAPAN1 = 0x40,
+ CTRY_JAPAN2 = 0x41,
+ CTRY_SINGAPORE = 0x42,
+ CTRY_JAPAN3 = 0x43,
+ CTRY_RESERVED2 = 0x44,
+ CTRY_KOREA = 0x45,
+ CTRY_UNK1 = 0x46,
+ CTRY_UNK2 = 0x47,
+ CTRY_JAPAN4 = 0x48,
+ CTRY_KOREA2 = 0x49,
+ CTRY_JAPAN5 = 0x4A,
+ CTRY_JAPAN6 = 0x4B,
+ CTRY_LATIN = 0x52,
+ CTRY_UNK3 = 0x53,
+ CTRY_UNK4 = 0x54,
+ CTRY_UNK5 = 0x55,
+ CTRY_VENEZUELA = 0x56,
+ CTRY_CHILE = 0x58,
+ WORLD0 = 0x60,
+ WORLD1 = 0x61,
+ WORLD2 = 0x62,
+ WORLD3 = 0x63,
+ WORLD4 = 0x64,
+ WORLD5 = 0x65,
+ DEBUG_REG_DMN = 0x01ff,
+};
+
+
+struct domain_table {
+ unsigned int domain;
+ unsigned int ahmodes;
+ unsigned short *ahchans;
+
+ unsigned int chancnt;
+ struct {
+ unsigned short mode;
+ unsigned short freq[14];
+ } chans[10];
+};
+
+struct channel {
+ unsigned short flags;
+ unsigned short freq;
+};
+
[-- Attachment #3: Type: text/plain, Size: 154 bytes --]
_______________________________________________
Kernel-mentors mailing list
Kernel-mentors@selenic.com
http://selenic.com/mailman/listinfo/kernel-mentors
reply other threads:[~2005-08-05 2:58 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42F2D5D2.8040105@gmail.com \
--to=mateuszb@gmail.com \
--cc=kernel-mentors@selenic.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.