[U-Boot] [PATCH 4/5] e1000: Export core EEPROM access functions for SPI support
Kyle Moffett
Kyle.D.Moffett at boeing.com
Tue Oct 18 23:05:28 CEST 2011
A followup patch will be adding a configurable feature to enable
programming of E1000 EEPROMs from the command line or via the generic
U-Boot SPI interface.
In order for it to work it needs access to certain E1000-internal
functions, so export those in the e1000.h header file.
Signed-off-by: Kyle Moffett <Kyle.D.Moffett at boeing.com>
Cc: Ben Warren <biggerbadderben at gmail.com>
---
drivers/net/e1000.c | 22 +++++-----------------
drivers/net/e1000.h | 19 +++++++++++++++++++
2 files changed, 24 insertions(+), 17 deletions(-)
diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
index 0fe3723..0c74685 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -135,13 +135,6 @@ static void e1000_set_media_type(struct e1000_hw *hw);
static int32_t e1000_swfw_sync_acquire(struct e1000_hw *hw, uint16_t mask);
static int32_t e1000_check_phy_reset_block(struct e1000_hw *hw);
-#define E1000_WRITE_REG(a, reg, value) (writel((value), ((a)->hw_addr + E1000_##reg)))
-#define E1000_READ_REG(a, reg) (readl((a)->hw_addr + E1000_##reg))
-#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) (\
- writel((value), ((a)->hw_addr + E1000_##reg + ((offset) << 2))))
-#define E1000_READ_REG_ARRAY(a, reg, offset) ( \
- readl((a)->hw_addr + E1000_##reg + ((offset) << 2)))
-#define E1000_WRITE_FLUSH(a) {uint32_t x; x = E1000_READ_REG(a, STATUS);}
#ifndef CONFIG_AP1000 /* remove for warnings */
static int32_t e1000_read_eeprom(struct e1000_hw *hw, uint16_t offset,
@@ -153,8 +146,7 @@ static int32_t e1000_read_eeprom(struct e1000_hw *hw, uint16_t offset,
* hw - Struct containing variables accessed by shared code
* eecd - EECD's current value
*****************************************************************************/
-static void
-e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t * eecd)
+void e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t * eecd)
{
/* Raise the clock input to the EEPROM (by setting the SK bit), and then
* wait 50 microseconds.
@@ -171,8 +163,7 @@ e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t * eecd)
* hw - Struct containing variables accessed by shared code
* eecd - EECD's current value
*****************************************************************************/
-static void
-e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t * eecd)
+void e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t * eecd)
{
/* Lower the clock input to the EEPROM (by clearing the SK bit), and then
* wait 50 microseconds.
@@ -276,8 +267,7 @@ e1000_shift_in_ee_bits(struct e1000_hw *hw, uint16_t count)
*
* hw - Struct containing variables accessed by shared code
*****************************************************************************/
-static void
-e1000_standby_eeprom(struct e1000_hw *hw)
+void e1000_standby_eeprom(struct e1000_hw *hw)
{
struct e1000_eeprom_info *eeprom = &hw->eeprom;
uint32_t eecd;
@@ -355,8 +345,7 @@ static boolean_t e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw)
* Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
* function should be called before issuing a command to the EEPROM.
*****************************************************************************/
-static int32_t
-e1000_acquire_eeprom(struct e1000_hw *hw)
+int32_t e1000_acquire_eeprom(struct e1000_hw *hw)
{
struct e1000_eeprom_info *eeprom = &hw->eeprom;
uint32_t eecd, i = 0;
@@ -672,8 +661,7 @@ e1000_read_eeprom_eerd(struct e1000_hw *hw,
return error;
}
-static void
-e1000_release_eeprom(struct e1000_hw *hw)
+void e1000_release_eeprom(struct e1000_hw *hw)
{
uint32_t eecd;
diff --git a/drivers/net/e1000.h b/drivers/net/e1000.h
index b4e9cf2..fc5ed57 100644
--- a/drivers/net/e1000.h
+++ b/drivers/net/e1000.h
@@ -55,10 +55,29 @@
#define DEBUGOUT(fmt, args...) do { } while (0)
#endif
+/* I/O wrapper functions */
+#define E1000_WRITE_REG(a, reg, value) \
+ (writel((value), ((a)->hw_addr + E1000_##reg)))
+#define E1000_READ_REG(a, reg) \
+ (readl((a)->hw_addr + E1000_##reg))
+#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) \
+ (writel((value), ((a)->hw_addr + E1000_##reg + ((offset) << 2))))
+#define E1000_READ_REG_ARRAY(a, reg, offset) \
+ (readl((a)->hw_addr + E1000_##reg + ((offset) << 2)))
+#define E1000_WRITE_FLUSH(a) \
+ do { uint32_t x = E1000_READ_REG(a, STATUS); } while (0)
+
/* Forward declarations of structures used by the shared code */
struct e1000_hw;
struct e1000_hw_stats;
+/* Internal E1000 helper functions */
+int32_t e1000_acquire_eeprom(struct e1000_hw *hw);
+void e1000_standby_eeprom(struct e1000_hw *hw);
+void e1000_release_eeprom(struct e1000_hw *hw);
+void e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
+void e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
+
typedef enum {
FALSE = 0,
TRUE = 1
--
1.7.2.5
More information about the U-Boot
mailing list