Skip to contentSkip to conversation

mmc: atmel-mci: move atmel-mci.h file to include/linux

PATCH In review Nicolas Ferre 5 participants 11 messages Nov 13, 2008 – Jan 5, 2009 1 message not in the archive

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mmc: atmel-mci: move atmel-mci.h file to include/linux

Needed to use the atmel-mci driver in a architecture independent manner.

---

arch/avr32/boards/atngw100/setup.c       |    2 +-
arch/avr32/boards/atstk1000/atstk1002.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1003.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1004.c  |    2 +-
arch/avr32/include/asm/atmel-mci.h       |   39 ------
arch/avr32/mach-at32ap/at32ap700x.c      |    2 +-
drivers/mmc/host/atmel-mci.c             |    2 +-
include/linux/atmel-mci.h                |   39 ++++++
8 files changed, 45 insertions(+), 45 deletions(-)

delete mode 100644 arch/avr32/include/asm/atmel-mci.h create mode 100644 include/linux/atmel-mci.h

arch/avr32/boards/atngw100/setup.c +0 -0
index 6c54580..ca6e1ff 100644
@@ -19,8 +19,8 @@

#include <linux/types.h>
#include <linux/leds.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/setup.h>

arch/avr32/boards/atstk1000/atstk1002.c +0 -0
index 29e5b51..5a6380f 100644
@@ -16,12 +16,12 @@

#include <linux/types.h>
#include <linux/spi/spi.h>
#include <linux/spi/at73c213.h>
+#include <linux/atmel-mci.h>

#include <video/atmel_lcdc.h>

#include <asm/io.h>
#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/boards/atstk1000/atstk1003.c +0 -0
index be089d7..7b9ceee 100644
@@ -17,9 +17,9 @@
 

#include <linux/spi/at73c213.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/boards/atstk1000/atstk1004.c +0 -0
index 248ef23..3ff0498 100644
@@ -17,11 +17,11 @@
 

#include <linux/spi/at73c213.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

#include <video/atmel_lcdc.h>

#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/include/asm/atmel-mci.h deleted +0 -39
deleted file mode 100644
index 59f3fad..0000000
@@ -1,39 +0,0 @@
-#ifndef __ASM_AVR32_ATMEL_MCI_H
-#define __ASM_AVR32_ATMEL_MCI_H
-
-#define ATMEL_MCI_MAX_NR_SLOTS	2
-
-struct dma_slave;
-
-/**
- * struct mci_slot_pdata - board-specific per-slot configuration
- * @bus_width: Number of data lines wired up the slot
- * @detect_pin: GPIO pin wired to the card detect switch
- * @wp_pin: GPIO pin wired to the write protect sensor
- *
- * If a given slot is not present on the board, @bus_width should be
- * set to 0. The other fields are ignored in this case.
- *
- * Any pins that aren't available should be set to a negative value.
- *
- * Note that support for multiple slots is experimental -- some cards
- * might get upset if we don't get the clock management exactly right.
- * But in most cases, it should work just fine.
- */
-struct mci_slot_pdata {
-	unsigned int		bus_width;
-	int			detect_pin;
-	int			wp_pin;
-};
-
-/**
- * struct mci_platform_data - board-specific MMC/SDcard configuration
- * @dma_slave: DMA slave interface to use in data transfers, or NULL.
- * @slot: Per-slot configuration data.
- */
-struct mci_platform_data {
-	struct dma_slave	*dma_slave;
-	struct mci_slot_pdata	slot[ATMEL_MCI_MAX_NR_SLOTS];
-};
-
-#endif /* __ASM_AVR32_ATMEL_MCI_H */
arch/avr32/mach-at32ap/at32ap700x.c +0 -0
index 813b684..b0ad6da 100644
@@ -15,8 +15,8 @@

#include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <linux/usb/atmel_usba_udc.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/irq.h>

drivers/mmc/host/atmel-mci.c +0 -0
index 7a3f243..1e97916 100644
@@ -25,8 +25,8 @@

#include <linux/stat.h>

#include <linux/mmc/host.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/unaligned.h>

include/linux/atmel-mci.h new file +39 -0
new file mode 100644
index 0000000..2a2213e
@@ -0,0 +1,39 @@
+#ifndef __LINUX_ATMEL_MCI_H
+#define __LINUX_ATMEL_MCI_H
+
+#define ATMEL_MCI_MAX_NR_SLOTS	2
+
+struct dma_slave;
+
+/**
+ * struct mci_slot_pdata - board-specific per-slot configuration
+ * @bus_width: Number of data lines wired up the slot
+ * @detect_pin: GPIO pin wired to the card detect switch
+ * @wp_pin: GPIO pin wired to the write protect sensor
+ *
+ * If a given slot is not present on the board, @bus_width should be
+ * set to 0. The other fields are ignored in this case.
+ *
+ * Any pins that aren't available should be set to a negative value.
+ *
+ * Note that support for multiple slots is experimental -- some cards
+ * might get upset if we don't get the clock management exactly right.
+ * But in most cases, it should work just fine.
+ */
+struct mci_slot_pdata {
+	unsigned int		bus_width;
+	int			detect_pin;
+	int			wp_pin;
+};
+
+/**
+ * struct mci_platform_data - board-specific MMC/SDcard configuration
+ * @dma_slave: DMA slave interface to use in data transfers, or NULL.
+ * @slot: Per-slot configuration data.
+ */
+struct mci_platform_data {
+	struct dma_slave	*dma_slave;
+	struct mci_slot_pdata	slot[ATMEL_MCI_MAX_NR_SLOTS];
+};
+
+#endif /* __LINUX_ATMEL_MCI_H */
Signature · 6 lines
1.5.3.7



-- 
Nicolas Ferre
Acked-by on v1 1/1
#1 lore raw
Quoted 4 lines · Nicolas Ferre

Needed to use the atmel-mci driver in a architecture independent manner.

Quoted 12 lines
---
 arch/avr32/boards/atngw100/setup.c       |    2 +-
 arch/avr32/boards/atstk1000/atstk1002.c  |    2 +-
 arch/avr32/boards/atstk1000/atstk1003.c  |    2 +-
 arch/avr32/boards/atstk1000/atstk1004.c  |    2 +-
 arch/avr32/include/asm/atmel-mci.h       |   39 ------
 arch/avr32/mach-at32ap/at32ap700x.c      |    2 +-
 drivers/mmc/host/atmel-mci.c             |    2 +-
 include/linux/atmel-mci.h                |   39 ++++++
 8 files changed, 45 insertions(+), 45 deletions(-)
 delete mode 100644 arch/avr32/include/asm/atmel-mci.h
 create mode 100644 include/linux/atmel-mci.h

Please fix up the mimc200 board too. If you do that, feel free to add

#2 lore raw
In reply to Nicolas Ferre
Quoted 5 lines · Nicolas Ferre

Needed to use the atmel-mci driver in a architecture independent manner.

---

Quoted 8 lines
arch/avr32/boards/atngw100/setup.c       |    2 +-
arch/avr32/boards/atstk1000/atstk1002.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1003.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1004.c  |    2 +-
arch/avr32/include/asm/atmel-mci.h       |   39 ------
arch/avr32/mach-at32ap/at32ap700x.c      |    2 +-
drivers/mmc/host/atmel-mci.c             |    2 +-
include/linux/atmel-mci.h                |   39 ++++++

Would people object to putting this in include/linux/mmc/atmel.h to avoid making include/linux abound with device/subsystem/machine specific header files?

Quoted 200 lines
8 files changed, 45 insertions(+), 45 deletions(-)

delete mode 100644 arch/avr32/include/asm/atmel-mci.h create mode 100644 include/linux/atmel-mci.h

arch/avr32/boards/atngw100/setup.c +1 -1
index 6c54580..ca6e1ff 100644
@@ -19,8 +19,8 @@
 #include <linux/types.h>
 #include <linux/leds.h>
 #include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>
 
-#include <asm/atmel-mci.h>
 #include <asm/io.h>
 #include <asm/setup.h>
 
arch/avr32/boards/atstk1000/atstk1002.c +1 -1
index 29e5b51..5a6380f 100644
@@ -16,12 +16,12 @@
 #include <linux/types.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/at73c213.h>
+#include <linux/atmel-mci.h>
 
 #include <video/atmel_lcdc.h>
 
 #include <asm/io.h>
 #include <asm/setup.h>
-#include <asm/atmel-mci.h>
 
 #include <mach/at32ap700x.h>
 #include <mach/board.h>
arch/avr32/boards/atstk1000/atstk1003.c +1 -1
index be089d7..7b9ceee 100644
@@ -17,9 +17,9 @@
 
 #include <linux/spi/at73c213.h>
 #include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>
 
 #include <asm/setup.h>
-#include <asm/atmel-mci.h>
 
 #include <mach/at32ap700x.h>
 #include <mach/board.h>
arch/avr32/boards/atstk1000/atstk1004.c +1 -1
index 248ef23..3ff0498 100644
@@ -17,11 +17,11 @@
 
 #include <linux/spi/at73c213.h>
 #include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>
 
 #include <video/atmel_lcdc.h>
 
 #include <asm/setup.h>
-#include <asm/atmel-mci.h>
 
 #include <mach/at32ap700x.h>
 #include <mach/board.h>
arch/avr32/include/asm/atmel-mci.h deleted +0 -39
deleted file mode 100644
index 59f3fad..0000000
@@ -1,39 +0,0 @@
-#ifndef __ASM_AVR32_ATMEL_MCI_H
-#define __ASM_AVR32_ATMEL_MCI_H
-
-#define ATMEL_MCI_MAX_NR_SLOTS	2
-
-struct dma_slave;
-
-/**
- * struct mci_slot_pdata - board-specific per-slot configuration
- * @bus_width: Number of data lines wired up the slot
- * @detect_pin: GPIO pin wired to the card detect switch
- * @wp_pin: GPIO pin wired to the write protect sensor
- *
- * If a given slot is not present on the board, @bus_width should be
- * set to 0. The other fields are ignored in this case.
- *
- * Any pins that aren't available should be set to a negative value.
- *
- * Note that support for multiple slots is experimental -- some cards
- * might get upset if we don't get the clock management exactly right.
- * But in most cases, it should work just fine.
- */
-struct mci_slot_pdata {
-	unsigned int		bus_width;
-	int			detect_pin;
-	int			wp_pin;
-};
-
-/**
- * struct mci_platform_data - board-specific MMC/SDcard configuration
- * @dma_slave: DMA slave interface to use in data transfers, or NULL.
- * @slot: Per-slot configuration data.
- */
-struct mci_platform_data {
-	struct dma_slave	*dma_slave;
-	struct mci_slot_pdata	slot[ATMEL_MCI_MAX_NR_SLOTS];
-};
-
-#endif /* __ASM_AVR32_ATMEL_MCI_H */
arch/avr32/mach-at32ap/at32ap700x.c +1 -1
index 813b684..b0ad6da 100644
@@ -15,8 +15,8 @@
 #include <linux/gpio.h>
 #include <linux/spi/spi.h>
 #include <linux/usb/atmel_usba_udc.h>
+#include <linux/atmel-mci.h>
 
-#include <asm/atmel-mci.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 
drivers/mmc/host/atmel-mci.c +1 -1
index 7a3f243..1e97916 100644
@@ -25,8 +25,8 @@
 #include <linux/stat.h>
 
 #include <linux/mmc/host.h>
+#include <linux/atmel-mci.h>
 
-#include <asm/atmel-mci.h>
 #include <asm/io.h>
 #include <asm/unaligned.h>
 
include/linux/atmel-mci.h new file +39 -0
new file mode 100644
index 0000000..2a2213e
@@ -0,0 +1,39 @@
+#ifndef __LINUX_ATMEL_MCI_H
+#define __LINUX_ATMEL_MCI_H
+
+#define ATMEL_MCI_MAX_NR_SLOTS	2
+
+struct dma_slave;
+
+/**
+ * struct mci_slot_pdata - board-specific per-slot configuration
+ * @bus_width: Number of data lines wired up the slot
+ * @detect_pin: GPIO pin wired to the card detect switch
+ * @wp_pin: GPIO pin wired to the write protect sensor
+ *
+ * If a given slot is not present on the board, @bus_width should be
+ * set to 0. The other fields are ignored in this case.
+ *
+ * Any pins that aren't available should be set to a negative value.
+ *
+ * Note that support for multiple slots is experimental -- some cards
+ * might get upset if we don't get the clock management exactly right.
+ * But in most cases, it should work just fine.
+ */
+struct mci_slot_pdata {
+	unsigned int		bus_width;
+	int			detect_pin;
+	int			wp_pin;
+};
+
+/**
+ * struct mci_platform_data - board-specific MMC/SDcard configuration
+ * @dma_slave: DMA slave interface to use in data transfers, or NULL.
+ * @slot: Per-slot configuration data.
+ */
+struct mci_platform_data {
+	struct dma_slave	*dma_slave;
+	struct mci_slot_pdata	slot[ATMEL_MCI_MAX_NR_SLOTS];
+};
+
+#endif /* __LINUX_ATMEL_MCI_H */
Signature · 13 lines
1.5.3.7



-- 
Nicolas Ferre


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#3 lore raw

Ben Dooks :

Quoted 15 lines · Nicolas Ferre
Quoted 5 lines

Needed to use the atmel-mci driver in a architecture independent manner.

---

Quoted 8 lines
arch/avr32/boards/atngw100/setup.c       |    2 +-
arch/avr32/boards/atstk1000/atstk1002.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1003.c  |    2 +-
arch/avr32/boards/atstk1000/atstk1004.c  |    2 +-
arch/avr32/include/asm/atmel-mci.h       |   39 ------
arch/avr32/mach-at32ap/at32ap700x.c      |    2 +-
drivers/mmc/host/atmel-mci.c             |    2 +-
include/linux/atmel-mci.h                |   39 ++++++
Quoted 3 lines

Would people object to putting this in include/linux/mmc/atmel.h to avoid making include/linux abound with device/subsystem/machine specific header files?

I tend to agree *but* it seems that header files in include/linux/mmc are mostly sd/mmc subsystem core files (I mean, not driver ones). Although, a bunch of atmel-a_driver.h files are already in include/linux...

Pierre, a comment ?

Regards,

Signature · 1 line
Nicolas Ferre
#4 lore raw
Quoted 6 lines · On Thu, 13 Nov 2008 15:43:34 +0100 Nicolas Ferre <[email protected]>…

Ben Dooks :

Quoted 4 lines

Would people object to putting this in include/linux/mmc/atmel.h to avoid making include/linux abound with device/subsystem/machine specific header files?

Quoted 6 lines

I tend to agree *but* it seems that header files in include/linux/mmc are mostly sd/mmc subsystem core files (I mean, not driver ones). Although, a bunch of atmel-a_driver.h files are already in include/linux...

Pierre, a comment ?

I'd prefer if include/linux/mmc could stay clean and just have core stuff since the header files are basically the reference documentation for the subsystem. But if you can't find any other way...

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#6 lore raw

PATCH 1/1 mmc: atmel-mci: move atmel-mci.h file to include/linux

Hi all,
I agree with Pierre.

I find pretty confusing to mix protocol .h file with drver specific includes. Why can't we have something like:

include/linux/mmc
include/drivers/mmc

Ciao,
Antnoio

2008/11/19 Pierre Ossman <[email protected]>

Quoted 28 lines
Quoted 6 lines · On Thu, 13 Nov 2008 15:43:34 +0100 Nicolas Ferre <[email protected]>…

Ben Dooks :

Quoted 4 lines

Would people object to putting this in include/linux/mmc/atmel.h to avoid making include/linux abound with device/subsystem/machine specific header files?

Quoted 6 lines

I tend to agree *but* it seems that header files in include/linux/mmc are mostly sd/mmc subsystem core files (I mean, not driver ones). Although, a bunch of atmel-a_driver.h files are already in include/linux...

Pierre, a comment ?

I'd prefer if include/linux/mmc could stay clean and just have core stuff since the header files are basically the reference documentation for the subsystem. But if you can't find any other way...

--
-- Pierre Ossman

WARNING: This correspondence is being monitored by the Swedish government. Make sure your server uses encryption for SMTP traffic and consider using PGP for end-to-end encryption.

#7 lore raw
In reply to Pierre Ossman

Pierre Ossman :

Quoted 11 lines
Quoted 8 lines · On Thu, 13 Nov 2008 15:43:34 +0100 Nicolas Ferre <[email protected]>…

Ben Dooks :

Quoted 3 lines

Would people object to putting this in include/linux/mmc/atmel.h to avoid making include/linux abound with device/subsystem/machine specific header files?

I tend to agree *but* it seems that header files in include/linux/mmc are mostly sd/mmc subsystem core files (I mean, not driver ones). Although, a bunch of atmel-a_driver.h files are already in include/linux...

Quoted 6 lines
Quoted 2 lines

Pierre, a comment ?

I'd prefer if include/linux/mmc could stay clean and just have core stuff since the header files are basically the reference documentation for the subsystem. But if you can't find any other way...

I agree with both of you Pierre and Antonio.
Haavard, I submit a patch which also fix the mimc200 board very soon now.

Bye,

Signature · 1 line
Nicolas Ferre
#8 lore raw
Quoted 2 lines · Nicolas Ferre

I agree with both of you Pierre and Antonio.
Haavard, I submit a patch which also fix the mimc200 board very soon now.

Sounds good to me. Thanks :-)

Haavard

#9 lore raw

PATCH 1/1 mmc: atmel-mci: move atmel-mci.h file to include/linux

In reply to Pierre Ossman

Needed to use the atmel-mci driver in an architecture independant maner.

---
V2: add mimc200 board.
Beware: embeds a git mv of atmel-mci.h

arch/avr32/boards/atngw100/setup.c                 |    2 +-
arch/avr32/boards/atstk1000/atstk1002.c            |    2 +-
arch/avr32/boards/atstk1000/atstk1003.c            |    2 +-
arch/avr32/boards/atstk1000/atstk1004.c            |    2 +-
arch/avr32/boards/mimc200/setup.c                  |    2 +-
arch/avr32/mach-at32ap/at32ap700x.c                |    2 +-
drivers/mmc/host/atmel-mci.c                       |    2 +-
.../include/asm => include/linux}/atmel-mci.h      |    6 +++---
8 files changed, 10 insertions(+), 10 deletions(-)
arch/avr32/boards/atngw100/setup.c +0 -0
index 32fb9ba..05d3722 100644
@@ -19,8 +19,8 @@

#include <linux/types.h>
#include <linux/leds.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/setup.h>

arch/avr32/boards/atstk1000/atstk1002.c +0 -0
index 5c5cdf3..6d94f74 100644
@@ -16,12 +16,12 @@

#include <linux/types.h>
#include <linux/spi/spi.h>
#include <linux/spi/at73c213.h>
+#include <linux/atmel-mci.h>

#include <video/atmel_lcdc.h>

#include <asm/io.h>
#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/boards/atstk1000/atstk1003.c +0 -0
index 134b566..db2038c 100644
@@ -17,9 +17,9 @@
 

#include <linux/spi/at73c213.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/boards/atstk1000/atstk1004.c +0 -0
index cb32eb8..29b35ac 100644
@@ -17,11 +17,11 @@
 

#include <linux/spi/at73c213.h>
#include <linux/spi/spi.h>
+#include <linux/atmel-mci.h>

#include <video/atmel_lcdc.h>

#include <asm/setup.h>
-#include <asm/atmel-mci.h>

#include <mach/at32ap700x.h>
#include <mach/board.h>

arch/avr32/boards/mimc200/setup.c +0 -0
index 397cbb8..811d730 100644
@@ -24,7 +24,7 @@ extern struct atmel_lcdfb_info mimc200_lcdc_data;

#include <video/atmel_lcdc.h>
#include <linux/fb.h>

-#include <asm/atmel-mci.h>
+#include <linux/atmel-mci.h>
#include <linux/io.h>
#include <asm/setup.h>

arch/avr32/mach-at32ap/at32ap700x.c +0 -0
index 0c6e02f..bc95ba7 100644
@@ -15,8 +15,8 @@

#include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <linux/usb/atmel_usba_udc.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/irq.h>

drivers/mmc/host/atmel-mci.c +0 -0
index 7a3f243..1e97916 100644
@@ -25,8 +25,8 @@

#include <linux/stat.h>

#include <linux/mmc/host.h>
+#include <linux/atmel-mci.h>

-#include <asm/atmel-mci.h>
#include <asm/io.h>
#include <asm/unaligned.h>

include/linux/atmel-mci.h renamed from arch/avr32/include/asm/atmel-mci.h +2 -2
similarity index 91%
rename from arch/avr32/include/asm/atmel-mci.h
rename to include/linux/atmel-mci.h
index 59f3fad..2a2213e 100644
@@ -1,5 +1,5 @@
-#ifndef __ASM_AVR32_ATMEL_MCI_H
-#define __ASM_AVR32_ATMEL_MCI_H
+#ifndef __LINUX_ATMEL_MCI_H
+#define __LINUX_ATMEL_MCI_H
 

#define ATMEL_MCI_MAX_NR_SLOTS 2

@@ -36,4 +36,4 @@ struct mci_platform_data {
	struct mci_slot_pdata	slot[ATMEL_MCI_MAX_NR_SLOTS];
};

-#endif /* __ASM_AVR32_ATMEL_MCI_H */
+#endif /* __LINUX_ATMEL_MCI_H */

Signature · 1 line
1.5.3.7
#10 lore raw
Quoted 6 lines · On Thu, 20 Nov 2008 15:59:12 +0100 Nicolas Ferre <[email protected]>…

Needed to use the atmel-mci driver in an architecture independant maner.

---

Colour me confused. Shouldn't this go through Haavard?

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.