diff -r 4d8c9a441ef6 -r b544025bd696 master/fsm_master.h --- a/master/fsm_master.h Thu May 12 16:38:48 2011 +0200 +++ b/master/fsm_master.h Thu May 12 16:45:02 2011 +0200 @@ -39,6 +39,7 @@ #include "globals.h" #include "datagram.h" +#include "mailbox.h" #include "foe_request.h" #include "sdo_request.h" #include "soe_request.h" @@ -57,8 +58,11 @@ size_t nwords; /**< Number of words. */ const uint16_t *words; /**< Pointer to the data words. */ ec_internal_request_state_t state; /**< State of the request. */ + struct kref refcount; } ec_sii_write_request_t; +void ec_master_sii_write_request_release(struct kref *); + /*****************************************************************************/ /** Register request. @@ -71,8 +75,11 @@ size_t length; /**< Number of bytes. */ uint8_t *data; /**< Data to write / memory for read data. */ ec_internal_request_state_t state; /**< State of the request. */ + struct kref refcount; } ec_reg_request_t; +void ec_master_reg_request_release(struct kref *); + /*****************************************************************************/ /** Slave/SDO request record for master's SDO request list. @@ -81,8 +88,11 @@ struct list_head list; /**< List element. */ ec_slave_t *slave; /**< Slave. */ ec_sdo_request_t req; /**< SDO request. */ + struct kref refcount; } ec_master_sdo_request_t; +void ec_master_sdo_request_release(struct kref *); + /*****************************************************************************/ /** FoE request. @@ -91,8 +101,11 @@ struct list_head list; /**< List head. */ ec_slave_t *slave; /**< EtherCAT slave. */ ec_foe_request_t req; /**< FoE request. */ + struct kref refcount; } ec_master_foe_request_t; +void ec_master_foe_request_release(struct kref *); + /*****************************************************************************/ /** SoE request. @@ -101,8 +114,11 @@ struct list_head list; /**< List head. */ ec_slave_t *slave; /**< EtherCAT slave. */ ec_soe_request_t req; /**< SoE request. */ + struct kref refcount; } ec_master_soe_request_t; +void ec_master_soe_request_release(struct kref *); + /*****************************************************************************/ typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */ @@ -112,6 +128,7 @@ struct ec_fsm_master { ec_master_t *master; /**< master the FSM runs on */ ec_datagram_t *datagram; /**< datagram used in the state machine */ + ec_mailbox_t* mbox; /**< mailbox used in the CoE state machine */ unsigned int retries; /**< retries on datagram timeout. */ void (*state)(ec_fsm_master_t *); /**< master state function */