aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2020-05-12 02:20:27 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2020-05-12 02:20:27 +0000
commit41137b0604193c3e4e0bc312e42af8108ce915d2 (patch)
treecd06269da1d606d9460197209964cbc1ef4579e9 /sys/contrib
parent16ade779ef63d3ee7629f1e19b74a8fb7f29d6f0 (diff)
downloadsrc-41137b0604193c3e4e0bc312e42af8108ce915d2.tar.gz
src-41137b0604193c3e4e0bc312e42af8108ce915d2.zip
[ath_hal] [ath_hal_ar9300] Fix endian macros to work in and out of kernel tree.
Yes, people shouldn't use bitfields in C for structure parsing. If someone ever wants a cleanup task then it'd be great to remove them from this vendor code and other places in the ar9285/ar9287 HALs. Alas, here we are. AH_BYTE_ORDER wasn't defined and neither were the two values it could be. So when compiling ath_ee_print_9300 it'd default to the big endian struct layout and get a WHOLE lot of stuff wrong. So: * move AH_BYTE_ORDER into ath_hal/ah.h where it can be used by everyone. * ensure that AH_BYTE_ORDER is actually defined before using it! This should work on both big and little endian platforms.
Notes
Notes: svn path=/head/; revision=360953
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h16
-rw-r--r--sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h10
2 files changed, 13 insertions, 13 deletions
diff --git a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h
index 00807ac430ee..13b5827083a9 100644
--- a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h
+++ b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h
@@ -19,18 +19,14 @@
#include "ar9300_freebsd_inc.h"
-#define AH_BIG_ENDIAN 4321
-#define AH_LITTLE_ENDIAN 1234
-
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define AH_BYTE_ORDER AH_BIG_ENDIAN
-#else
-#define AH_BYTE_ORDER AH_LITTLE_ENDIAN
-#endif
-
/* XXX doesn't belong here */
#define AR_EEPROM_MODAL_SPURS 5
+/* Ensure that AH_BYTE_ORDER is defined */
+#ifndef AH_BYTE_ORDER
+#error AH_BYTE_ORDER needs to be defined!
+#endif
+
/*
* (a) this should be N(a),
* (b) FreeBSD does define nitems,
@@ -43,10 +39,8 @@
#include "ah_devid.h"
#include "ar9300eep.h" /* For Eeprom definitions */
-
#define AR9300_MAGIC 0x19741014
-
/* MAC register values */
#define INIT_CONFIG_STATUS 0x00000000
diff --git a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h
index 516303033835..9230fd57e2e4 100644
--- a/sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h
+++ b/sys/contrib/dev/ath/ath_hal/ar9300/ar9300eep.h
@@ -18,13 +18,17 @@
#define _ATH_AR9300_EEP_H_
#include "opt_ah.h"
-
#include "ah.h"
#if defined(WIN32) || defined(WIN64)
#pragma pack (push, ar9300, 1)
#endif
+/* Ensure that AH_BYTE_ORDER is defined */
+#ifndef AH_BYTE_ORDER
+#error AH_BYTE_ORDER needs to be defined!
+#endif
+
/* FreeBSD extras - should be in ah_eeprom.h ? */
#define AR_EEPROM_EEPCAP_COMPRESS_DIS 0x0001
#define AR_EEPROM_EEPCAP_AES_DIS 0x0002
@@ -345,11 +349,13 @@ typedef struct CalCtlEdgePwr {
u_int8_t flag :2,
t_power :6;
} __packed CAL_CTL_EDGE_PWR;
-#else
+#elif AH_BYTE_ORDER == AH_LITTLE_ENDIAN
typedef struct CalCtlEdgePwr {
u_int8_t t_power :6,
flag :2;
} __packed CAL_CTL_EDGE_PWR;
+#else
+#error AH_BYTE_ORDER undefined!
#endif
typedef struct ospCalCtlData_5G {