--- a/kernelversion.c
+++ b/kernelversion.c
@@ -10,7 +10,11 @@
 
 /* Linux 2.6.18+ uses <linux/utsrelease.h> */
 #ifndef UTS_RELEASE
-#include <linux/utsrelease.h>
+  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
+    #include <generated/utsrelease.h>
+  #else
+    #include <linux/utsrelease.h>
+  #endif
 #endif
 
 char *uts_release = UTS_RELEASE;
--- a/ath/if_ath.c
+++ b/ath/if_ath.c
@@ -11580,227 +11580,231 @@ static int mincalibrate = 1;		/* once a 
 static int maxint = 0x7fffffff;		/* 32-bit big */
 
 static const ctl_table ath_sysctl_template[] = {
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "dev_vendor",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_hwinfo,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	  .strategy   = &sysctl_string,
+#endif
 	  .data		= "N/A",
 	  .maxlen   = 1,
 	  .extra2	= (void *)ATH_CARD_VENDOR,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "dev_name",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_hwinfo,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	  .strategy   = &sysctl_string,
+#endif
 	  .data		= "N/A",
 	  .maxlen   = 1,
 	  .extra2	= (void *)ATH_CARD_NAME,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "slottime",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_SLOTTIME,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "acktimeout",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_ACKTIMEOUT,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "ctstimeout",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_CTSTIMEOUT,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "distance",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_DISTANCE,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "silent",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_SILENT,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "softled",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_SOFTLED,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "ledpin",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_LEDPIN,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "countrycode",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_COUNTRYCODE,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "outdoor",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_OUTDOOR,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "regdomain",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_REGDOMAIN,
 	},
 #ifdef AR_DEBUG
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "debug",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_DEBUG,
 	},
 #endif
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "poweroffset",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_POWEROFFSET,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "txantenna",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_TXANTENNA,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "rxantenna",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RXANTENNA,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "diversity",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_DIVERSITY,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "txintrperiod",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_TXINTRPERIOD,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "fftxqmin",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_FFTXQMIN,
 	},
 #ifdef ATH_SUPERG_XR
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "xrpollperiod",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_XR_POLL_PERIOD,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "xrpollcount",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_XR_POLL_COUNT,
 	},
 #endif
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "ackrate",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_ACKRATE,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "channelbw",
 	  .mode		= 0644,
 	  .proc_handler	= ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_CHANBW,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "rp",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "radar_print",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_PRINT,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "radar_print_all",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_PRINT_ALL,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "radar_dump",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_PRINT_MEM,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "radar_dump_all",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_PRINT_MEM_ALL,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "rp_flush",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_FLUSH,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "panic",
 	  .mode         = 0200,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_PANIC,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "rp_ignored",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RP_IGNORED,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "radar_ignored",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_RADAR_IGNORED,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "intmit",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_INTMIT,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "noise_immunity",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_NOISE_IMMUNITY,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "ofdm_weak_det",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
 	  .extra2	= (void *)ATH_OFDM_WEAK_DET,
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname     = "cca_thresh",
 	  .mode         = 0644,
 	  .proc_handler = ath_sysctl_halparam,
@@ -11838,12 +11842,16 @@ ath_dynamic_sysctl_register(struct ath_s
 
 	/* setup the table */
 	memset(sc->sc_sysctls, 0, space);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	sc->sc_sysctls[0].ctl_name = CTL_DEV;
+#endif
 	sc->sc_sysctls[0].procname = "dev";
 	sc->sc_sysctls[0].mode = 0555;
 	sc->sc_sysctls[0].child = &sc->sc_sysctls[2];
 	/* [1] is NULL terminator */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	sc->sc_sysctls[2].ctl_name = CTL_AUTO;
+#endif
 	sc->sc_sysctls[2].procname = dev_name;
 	sc->sc_sysctls[2].mode = 0555;
 	sc->sc_sysctls[2].child = &sc->sc_sysctls[4];
@@ -11966,7 +11974,7 @@ ath_announce(struct net_device *dev)
  */
 static ctl_table ath_static_sysctls[] = {
 #ifdef AR_DEBUG
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "debug",
 	  .mode		= 0644,
 	  .data		= &ath_debug,
@@ -11974,14 +11982,14 @@ static ctl_table ath_static_sysctls[] = 
 	  .proc_handler	= proc_dointvec
 	},
 #endif
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "xchanmode",
 	  .mode		= 0444,
 	  .data		= &ath_xchanmode,
 	  .maxlen	= sizeof(ath_xchanmode),
 	  .proc_handler	= proc_dointvec
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "calibrate",
 	  .mode		= 0644,
 	  .data		= &ath_calinterval,
@@ -11993,14 +12001,14 @@ static ctl_table ath_static_sysctls[] = 
 	{ 0 }
 };
 static ctl_table ath_ath_table[] = {
-	{ .ctl_name	= DEV_ATH,
+	{ CTLNAME(DEV_ATH)
 	  .procname	= "ath",
 	  .mode		= 0555,
 	  .child	= ath_static_sysctls
 	}, { 0 }
 };
 static ctl_table ath_root_table[] = {
-	{ .ctl_name	= CTL_DEV,
+	{ CTLNAME(CTL_DEV)
 	  .procname	= "dev",
 	  .mode		= 0555,
 	  .child	= ath_ath_table
--- a/ath/if_ath_ahb.h
+++ b/ath/if_ath_ahb.h
@@ -112,7 +112,11 @@
 	do { (void) (start); (void) (size); } while (0)
 #endif
 
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
+#define bus_dma_sync_single	dma_sync_single_for_cpu
+#else
 #define bus_dma_sync_single	dma_sync_single
+#endif
 #define bus_map_single		dma_map_single
 #define bus_unmap_single	dma_unmap_single
 #define bus_alloc_consistent(_hwdev, _sz, _hdma)		\
--- a/ath_hal/ah_os.c
+++ b/ath_hal/ah_os.c
@@ -518,7 +518,7 @@ EXPORT_SYMBOL(ath_hal_memcmp);
 
 static ctl_table ath_hal_sysctls[] = {
 #ifdef AH_DEBUG
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "debug",
 	  .mode		= 0644,
 	  .data		= &ath_hal_debug,
@@ -526,21 +526,21 @@ static ctl_table ath_hal_sysctls[] = {
 	  .proc_handler	= proc_dointvec
 	},
 #endif
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "dma_beacon_response_time",
 	  .data		= &ath_hal_dma_beacon_response_time,
 	  .maxlen	= sizeof(ath_hal_dma_beacon_response_time),
 	  .mode		= 0644,
 	  .proc_handler	= proc_dointvec
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "sw_beacon_response_time",
 	  .mode		= 0644,
 	  .data		= &ath_hal_sw_beacon_response_time,
 	  .maxlen	= sizeof(ath_hal_sw_beacon_response_time),
 	  .proc_handler	= proc_dointvec
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "swba_backoff",
 	  .mode		= 0644,
 	  .data		= &ath_hal_additional_swba_backoff,
@@ -548,19 +548,19 @@ static ctl_table ath_hal_sysctls[] = {
 	  .proc_handler	= proc_dointvec
 	},
 #ifdef AH_DEBUG_ALQ
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "alq",
 	  .mode		= 0644,
 	  .proc_handler	= sysctl_hw_ath_hal_log
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "alq_size",
 	  .mode		= 0644,
 	  .data		= &ath_hal_alq_qsize,
 	  .maxlen	= sizeof(ath_hal_alq_qsize),
 	  .proc_handler	= proc_dointvec
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "alq_lost",
 	  .mode		= 0644,
 	  .data		= &ath_hal_alq_lost,
@@ -571,21 +571,21 @@ static ctl_table ath_hal_sysctls[] = {
 	{ 0 }
 };
 static ctl_table ath_hal_table[] = {
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "hal",
 	  .mode		= 0555,
 	  .child	= ath_hal_sysctls
 	}, { 0 }
 };
 static ctl_table ath_ath_table[] = {
-	{ .ctl_name	= DEV_ATH,
+	{ CTLNAME(DEV_ATH)
 	  .procname	= "ath",
 	  .mode		= 0555,
 	  .child	= ath_hal_table
 	}, { 0 }
 };
 static ctl_table ath_root_table[] = {
-	{ .ctl_name	= CTL_DEV,
+	{ CTLNAME(CTL_DEV)
 	  .procname	= "dev",
 	  .mode		= 0555,
 	  .child	= ath_ath_table
--- a/include/compat.h
+++ b/include/compat.h
@@ -193,6 +193,12 @@ static inline int timeval_compare(struct
 #define __skb_queue_after(_list, _old, _new)	__skb_append(_old, _new, _list)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
+#define CTLNAME(x)	.ctl_name	= x,
+#else
+#define CTLNAME(x)
+#endif
+
 #endif /* __KERNEL__ */
 
 #endif /* _ATH_COMPAT_H_ */
--- a/net80211/ieee80211_linux.c
+++ b/net80211/ieee80211_linux.c
@@ -699,39 +699,39 @@ IEEE80211_SYSCTL_DECL(ieee80211_sysctl_m
 
 static const ctl_table ieee80211_sysctl_template[] = {
 #ifdef IEEE80211_DEBUG
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "debug",
 	  .mode		= 0644,
 	  .proc_handler	= ieee80211_sysctl_debug
 	},
 #endif
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "dev_type",
 	  .mode		= 0644,
 	  .proc_handler	= ieee80211_sysctl_dev_type
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "monitor_nods_only",
 	  .mode		= 0644,
 	  .proc_handler	= ieee80211_sysctl_monitor_nods_only
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "monitor_txf_len",
 	  .mode		= 0644,
 	  .proc_handler	= ieee80211_sysctl_monitor_txf_len
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "monitor_phy_errors",
 	  .mode		= 0644,
 	  .proc_handler = ieee80211_sysctl_monitor_phy_errors
 	},
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "monitor_crc_errors",
 	  .mode		= 0644,
 	  .proc_handler = ieee80211_sysctl_monitor_crc_errors
 	},
 	/* NB: must be last entry before NULL */
-	{ .ctl_name	= CTL_AUTO,
+	{ CTLNAME(CTL_AUTO)
 	  .procname	= "%parent",
 	  .maxlen	= IFNAMSIZ,
 	  .mode		= 0444,
@@ -786,12 +786,16 @@ ieee80211_virtfs_latevattach(struct ieee
 
 	/* setup the table */
 	memset(vap->iv_sysctls, 0, space);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	vap->iv_sysctls[0].ctl_name = CTL_NET;
+#endif
 	vap->iv_sysctls[0].procname = "net";
 	vap->iv_sysctls[0].mode = 0555;
 	vap->iv_sysctls[0].child = &vap->iv_sysctls[2];
 	/* [1] is NULL terminator */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 	vap->iv_sysctls[2].ctl_name = CTL_AUTO;
+#endif
 	vap->iv_sysctls[2].procname = devname; /* XXX bad idea? */
 	vap->iv_sysctls[2].mode = 0555;
 	vap->iv_sysctls[2].child = &vap->iv_sysctls[4];