• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/char/ipmi/

Lines Matching refs:smic

122 static unsigned int init_smic_data(struct si_sm_data *smic,
125 smic->state = SMIC_IDLE;
126 smic->io = io;
127 smic->write_pos = 0;
128 smic->write_count = 0;
129 smic->orig_write_count = 0;
130 smic->read_pos = 0;
131 smic->error_retries = 0;
132 smic->truncated = 0;
133 smic->smic_timeout = SMIC_RETRY_TIMEOUT;
139 static int start_smic_transaction(struct si_sm_data *smic,
149 if ((smic->state != SMIC_IDLE) && (smic->state != SMIC_HOSED))
158 smic->error_retries = 0;
159 memcpy(smic->write_data, data, size);
160 smic->write_count = size;
161 smic->orig_write_count = size;
162 smic->write_pos = 0;
163 smic->read_pos = 0;
164 smic->state = SMIC_START_OP;
165 smic->smic_timeout = SMIC_RETRY_TIMEOUT;
169 static int smic_get_result(struct si_sm_data *smic,
176 for (i = 0; i < smic->read_pos; i++)
177 printk(" %02x", smic->read_data[i]);
180 if (length < smic->read_pos) {
181 smic->read_pos = length;
182 smic->truncated = 1;
184 memcpy(data, smic->read_data, smic->read_pos);
186 if ((length >= 3) && (smic->read_pos < 3)) {
188 smic->read_pos = 3;
190 if (smic->truncated) {
192 smic->truncated = 0;
194 return smic->read_pos;
197 static inline unsigned char read_smic_flags(struct si_sm_data *smic)
199 return smic->io->inputb(smic->io, 2);
202 static inline unsigned char read_smic_status(struct si_sm_data *smic)
204 return smic->io->inputb(smic->io, 1);
207 static inline unsigned char read_smic_data(struct si_sm_data *smic)
209 return smic->io->inputb(smic->io, 0);
212 static inline void write_smic_flags(struct si_sm_data *smic,
215 smic->io->outputb(smic->io, 2, flags);
218 static inline void write_smic_control(struct si_sm_data *smic,
221 smic->io->outputb(smic->io, 1, control);
224 static inline void write_si_sm_data(struct si_sm_data *smic,
227 smic->io->outputb(smic->io, 0, data);
230 static inline void start_error_recovery(struct si_sm_data *smic, char *reason)
232 (smic->error_retries)++;
233 if (smic->error_retries > SMIC_MAX_ERROR_RETRIES) {
236 "ipmi_smic_drv: smic hosed: %s\n", reason);
237 smic->state = SMIC_HOSED;
239 smic->write_count = smic->orig_write_count;
240 smic->write_pos = 0;
241 smic->read_pos = 0;
242 smic->state = SMIC_START_OP;
243 smic->smic_timeout = SMIC_RETRY_TIMEOUT;
247 static inline void write_next_byte(struct si_sm_data *smic)
249 write_si_sm_data(smic, smic->write_data[smic->write_pos]);
250 (smic->write_pos)++;
251 (smic->write_count)--;
254 static inline void read_next_byte(struct si_sm_data *smic)
256 if (smic->read_pos >= MAX_SMIC_READ_SIZE) {
257 read_smic_data(smic);
258 smic->truncated = 1;
260 smic->read_data[smic->read_pos] = read_smic_data(smic);
261 smic->read_pos++;
336 static enum si_sm_result smic_event(struct si_sm_data *smic, long time)
342 if (smic->state == SMIC_HOSED) {
343 init_smic_data(smic, smic->io);
346 if (smic->state != SMIC_IDLE) {
349 "smic_event - smic->smic_timeout = %ld,"
351 smic->smic_timeout, time);
353 smic->smic_timeout -= time;
354 if (smic->smic_timeout < 0) {
355 start_error_recovery(smic, "smic timed out.");
360 flags = read_smic_flags(smic);
364 status = read_smic_status(smic);
369 smic->state, flags, status);
371 switch (smic->state) {
379 /* sanity check whether smic is really idle */
380 write_smic_control(smic, SMIC_CC_SMS_GET_STATUS);
381 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
382 smic->state = SMIC_OP_OK;
388 start_error_recovery(smic,
393 /* OK so far; smic is idle let us start ... */
394 write_smic_control(smic, SMIC_CC_SMS_WR_START);
395 write_next_byte(smic);
396 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
397 smic->state = SMIC_WRITE_START;
402 start_error_recovery(smic,
412 if (smic->write_count == 1) {
414 write_smic_control(smic, SMIC_CC_SMS_WR_END);
415 smic->state = SMIC_WRITE_END;
417 write_smic_control(smic, SMIC_CC_SMS_WR_NEXT);
418 smic->state = SMIC_WRITE_NEXT;
420 write_next_byte(smic);
421 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
428 start_error_recovery(smic,
435 if (smic->write_count == 1) {
436 write_smic_control(smic, SMIC_CC_SMS_WR_END);
437 smic->state = SMIC_WRITE_END;
439 write_smic_control(smic, SMIC_CC_SMS_WR_NEXT);
440 smic->state = SMIC_WRITE_NEXT;
442 write_next_byte(smic);
443 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
450 start_error_recovery(smic,
456 data = read_smic_data(smic);
461 start_error_recovery(smic,
466 smic->state = SMIC_WRITE2READ;
475 write_smic_control(smic, SMIC_CC_SMS_RD_START);
476 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
477 smic->state = SMIC_READ_START;
484 start_error_recovery(smic,
490 read_next_byte(smic);
491 write_smic_control(smic, SMIC_CC_SMS_RD_NEXT);
492 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
493 smic->state = SMIC_READ_NEXT;
501 * smic tells us that this is the last byte to be read
505 read_next_byte(smic);
506 write_smic_control(smic, SMIC_CC_SMS_RD_END);
507 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
508 smic->state = SMIC_READ_END;
512 read_next_byte(smic);
513 write_smic_control(smic, SMIC_CC_SMS_RD_NEXT);
514 write_smic_flags(smic, flags | SMIC_FLAG_BSY);
515 smic->state = SMIC_READ_NEXT;
521 smic,
530 start_error_recovery(smic,
535 data = read_smic_data(smic);
541 start_error_recovery(smic,
546 smic->state = SMIC_IDLE;
551 init_smic_data(smic, smic->io);
556 printk(KERN_DEBUG "smic->state = %d\n", smic->state);
557 start_error_recovery(smic, "state = UNKNOWN");
561 smic->smic_timeout = SMIC_RETRY_TIMEOUT;
565 static int smic_detect(struct si_sm_data *smic)
573 if (read_smic_flags(smic) == 0xff)