netlink: fix NETLINK_RECV_NO_ENOBUFS in netlink_set_err()
[linux-2.6.git] / include / linux / phy.h
index 77c4ed6..14d7fdf 100644 (file)
@@ -79,7 +79,7 @@ typedef enum {
  * Need to be a little smaller than phydev->dev.bus_id to leave room
  * for the ":%02x"
  */
-#define MII_BUS_ID_SIZE        (BUS_ID_SIZE - 3)
+#define MII_BUS_ID_SIZE        (20 - 3)
 
 /*
  * The Bus class for PHYs.  Devices which provide access to
@@ -315,8 +315,7 @@ struct phy_device {
 
        /* Interrupt and Polling infrastructure */
        struct work_struct phy_queue;
-       struct work_struct state_queue;
-       struct timer_list phy_timer;
+       struct delayed_work state_queue;
        atomic_t irq_disable;
 
        struct mutex lock;
@@ -389,6 +388,12 @@ struct phy_driver {
        /* Enables or disables interrupts */
        int (*config_intr)(struct phy_device *phydev);
 
+       /*
+        * Checks if the PHY generated an interrupt.
+        * For multi-PHY devices with shared PHY interrupt pin
+        */
+       int (*did_interrupt)(struct phy_device *phydev);
+
        /* Clears up any memory if needed */
        void (*remove)(struct phy_device *phydev);
 
@@ -402,7 +407,7 @@ struct phy_driver {
 /* A Structure for boards to register fixups with the PHY Lib */
 struct phy_fixup {
        struct list_head list;
-       char bus_id[BUS_ID_SIZE];
+       char bus_id[20];
        u32 phy_uid;
        u32 phy_uid_mask;
        int (*run)(struct phy_device *phydev);
@@ -439,10 +444,18 @@ static inline int phy_write(struct phy_device *phydev, u16 regnum, u16 val)
 
 int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id);
 struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
+int phy_device_register(struct phy_device *phy);
 int phy_clear_interrupt(struct phy_device *phydev);
 int phy_config_interrupt(struct phy_device *phydev, u32 interrupts);
+int phy_init_hw(struct phy_device *phydev);
+int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
+               u32 flags, phy_interface_t interface);
 struct phy_device * phy_attach(struct net_device *dev,
                const char *bus_id, u32 flags, phy_interface_t interface);
+struct phy_device *phy_find_first(struct mii_bus *bus);
+int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
+               void (*handler)(struct net_device *), u32 flags,
+               phy_interface_t interface);
 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
                void (*handler)(struct net_device *), u32 flags,
                phy_interface_t interface);
@@ -467,10 +480,13 @@ int genphy_restart_aneg(struct phy_device *phydev);
 int genphy_config_aneg(struct phy_device *phydev);
 int genphy_update_link(struct phy_device *phydev);
 int genphy_read_status(struct phy_device *phydev);
+int genphy_suspend(struct phy_device *phydev);
+int genphy_resume(struct phy_device *phydev);
 void phy_driver_unregister(struct phy_driver *drv);
 int phy_driver_register(struct phy_driver *new_driver);
 void phy_prepare_link(struct phy_device *phydev,
                void (*adjust_link)(struct net_device *));
+void phy_state_machine(struct work_struct *work);
 void phy_start_machine(struct phy_device *phydev,
                void (*handler)(struct net_device *));
 void phy_stop_machine(struct phy_device *phydev);