56 ec_slave_t *slave; /**< EtherCAT slave. */ |
55 ec_slave_t *slave; /**< EtherCAT slave. */ |
57 uint16_t offset; /**< SII word offset. */ |
56 uint16_t offset; /**< SII word offset. */ |
58 size_t nwords; /**< Number of words. */ |
57 size_t nwords; /**< Number of words. */ |
59 const uint16_t *words; /**< Pointer to the data words. */ |
58 const uint16_t *words; /**< Pointer to the data words. */ |
60 ec_internal_request_state_t state; /**< State of the request. */ |
59 ec_internal_request_state_t state; /**< State of the request. */ |
61 struct kref refcount; |
|
62 } ec_sii_write_request_t; |
60 } ec_sii_write_request_t; |
63 |
|
64 void ec_master_sii_write_request_release(struct kref *); |
|
65 |
|
66 /*****************************************************************************/ |
|
67 |
|
68 /** Register request. |
|
69 */ |
|
70 typedef struct { |
|
71 struct list_head list; /**< List head. */ |
|
72 ec_slave_t *slave; /**< EtherCAT slave. */ |
|
73 ec_direction_t dir; /**< Direction. */ |
|
74 uint16_t offset; /**< Register address. */ |
|
75 size_t length; /**< Number of bytes. */ |
|
76 uint8_t *data; /**< Data to write / memory for read data. */ |
|
77 ec_internal_request_state_t state; /**< State of the request. */ |
|
78 struct kref refcount; |
|
79 } ec_reg_request_t; |
|
80 |
|
81 void ec_master_reg_request_release(struct kref *); |
|
82 |
|
83 /*****************************************************************************/ |
|
84 |
|
85 /** Slave/SDO request record for master's SDO request list. |
|
86 */ |
|
87 typedef struct { |
|
88 struct list_head list; /**< List element. */ |
|
89 ec_slave_t *slave; /**< Slave. */ |
|
90 ec_sdo_request_t req; /**< SDO request. */ |
|
91 struct kref refcount; |
|
92 } ec_master_sdo_request_t; |
|
93 |
|
94 void ec_master_sdo_request_release(struct kref *); |
|
95 |
|
96 /*****************************************************************************/ |
|
97 |
|
98 /** FoE request. |
|
99 */ |
|
100 typedef struct { |
|
101 struct list_head list; /**< List head. */ |
|
102 ec_slave_t *slave; /**< EtherCAT slave. */ |
|
103 ec_foe_request_t req; /**< FoE request. */ |
|
104 struct kref refcount; |
|
105 } ec_master_foe_request_t; |
|
106 |
|
107 void ec_master_foe_request_release(struct kref *); |
|
108 |
|
109 /*****************************************************************************/ |
|
110 |
|
111 /** SoE request. |
|
112 */ |
|
113 typedef struct { |
|
114 struct list_head list; /**< List head. */ |
|
115 ec_slave_t *slave; /**< EtherCAT slave. */ |
|
116 ec_soe_request_t req; /**< SoE request. */ |
|
117 struct kref refcount; |
|
118 } ec_master_soe_request_t; |
|
119 |
|
120 void ec_master_soe_request_release(struct kref *); |
|
121 |
61 |
122 /*****************************************************************************/ |
62 /*****************************************************************************/ |
123 |
63 |
124 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */ |
64 typedef struct ec_fsm_master ec_fsm_master_t; /**< \see ec_fsm_master */ |
125 |
65 |
126 /** Finite state machine of an EtherCAT master. |
66 /** Finite state machine of an EtherCAT master. |
127 */ |
67 */ |
128 struct ec_fsm_master { |
68 struct ec_fsm_master { |
129 ec_master_t *master; /**< master the FSM runs on */ |
69 ec_master_t *master; /**< master the FSM runs on */ |
130 ec_datagram_t *datagram; /**< datagram used in the state machine */ |
70 ec_datagram_t *datagram; /**< datagram used in the state machine */ |
131 ec_mailbox_t *mbox; /**< mailbox used in the state machine */ |
|
132 unsigned int retries; /**< retries on datagram timeout. */ |
71 unsigned int retries; /**< retries on datagram timeout. */ |
133 |
72 |
134 void (*state)(ec_fsm_master_t *); /**< master state function */ |
73 void (*state)(ec_fsm_master_t *); /**< master state function */ |
|
74 ec_device_index_t dev_idx; /**< Current device index (for scanning etc.). |
|
75 */ |
135 int idle; /**< state machine is in idle phase */ |
76 int idle; /**< state machine is in idle phase */ |
136 unsigned long scan_jiffies; /**< beginning of slave scanning */ |
77 unsigned long scan_jiffies; /**< beginning of slave scanning */ |
137 uint8_t link_state; /**< Last main device link state. */ |
78 uint8_t link_state[EC_MAX_NUM_DEVICES]; /**< Last link state for every |
138 unsigned int slaves_responding; /**< number of responding slaves */ |
79 device. */ |
|
80 unsigned int slaves_responding[EC_MAX_NUM_DEVICES]; /**< Number of |
|
81 responding slaves |
|
82 for every device. */ |
139 unsigned int rescan_required; /**< A bus rescan is required. */ |
83 unsigned int rescan_required; /**< A bus rescan is required. */ |
140 ec_slave_state_t slave_states; /**< states of responding slaves */ |
84 ec_slave_state_t slave_states[EC_MAX_NUM_DEVICES]; /**< AL states of |
|
85 responding slaves for |
|
86 every device. */ |
141 ec_slave_t *slave; /**< current slave */ |
87 ec_slave_t *slave; /**< current slave */ |
142 ec_sii_write_request_t *sii_request; /**< SII write request */ |
88 ec_sii_write_request_t *sii_request; /**< SII write request */ |
143 off_t sii_index; /**< index to SII write request data */ |
89 off_t sii_index; /**< index to SII write request data */ |
144 ec_sdo_request_t *sdo_request; /**< SDO request to process. */ |
90 ec_sdo_request_t *sdo_request; /**< SDO request to process. */ |
145 ec_reg_request_t *reg_request; /**< Register request to process. */ |
|
146 |
91 |
147 ec_fsm_coe_t fsm_coe; /**< CoE state machine */ |
92 ec_fsm_coe_t fsm_coe; /**< CoE state machine */ |
|
93 ec_fsm_soe_t fsm_soe; /**< SoE state machine */ |
148 ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */ |
94 ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */ |
149 ec_fsm_change_t fsm_change; /**< State change state machine */ |
95 ec_fsm_change_t fsm_change; /**< State change state machine */ |
150 ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */ |
96 ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */ |
151 ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */ |
97 ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */ |
152 ec_fsm_sii_t fsm_sii; /**< SII state machine */ |
98 ec_fsm_sii_t fsm_sii; /**< SII state machine */ |