• Home
  • Raw
  • Download

Lines Matching refs:smic

122 static unsigned int init_smic_data(struct si_sm_data *smic,  in init_smic_data()  argument
125 smic->state = SMIC_IDLE; in init_smic_data()
126 smic->io = io; in init_smic_data()
127 smic->write_pos = 0; in init_smic_data()
128 smic->write_count = 0; in init_smic_data()
129 smic->orig_write_count = 0; in init_smic_data()
130 smic->read_pos = 0; in init_smic_data()
131 smic->error_retries = 0; in init_smic_data()
132 smic->truncated = 0; in init_smic_data()
133 smic->smic_timeout = SMIC_RETRY_TIMEOUT; in init_smic_data()
139 static int start_smic_transaction(struct si_sm_data *smic, in start_smic_transaction() argument
149 if ((smic->state != SMIC_IDLE) && (smic->state != SMIC_HOSED)) in start_smic_transaction()
158 smic->error_retries = 0; in start_smic_transaction()
159 memcpy(smic->write_data, data, size); in start_smic_transaction()
160 smic->write_count = size; in start_smic_transaction()
161 smic->orig_write_count = size; in start_smic_transaction()
162 smic->write_pos = 0; in start_smic_transaction()
163 smic->read_pos = 0; in start_smic_transaction()
164 smic->state = SMIC_START_OP; in start_smic_transaction()
165 smic->smic_timeout = SMIC_RETRY_TIMEOUT; in start_smic_transaction()
169 static int smic_get_result(struct si_sm_data *smic, in smic_get_result() argument
176 for (i = 0; i < smic->read_pos; i++) in smic_get_result()
177 printk(" %02x", smic->read_data[i]); in smic_get_result()
180 if (length < smic->read_pos) { in smic_get_result()
181 smic->read_pos = length; in smic_get_result()
182 smic->truncated = 1; in smic_get_result()
184 memcpy(data, smic->read_data, smic->read_pos); in smic_get_result()
186 if ((length >= 3) && (smic->read_pos < 3)) { in smic_get_result()
188 smic->read_pos = 3; in smic_get_result()
190 if (smic->truncated) { in smic_get_result()
192 smic->truncated = 0; in smic_get_result()
194 return smic->read_pos; in smic_get_result()
197 static inline unsigned char read_smic_flags(struct si_sm_data *smic) in read_smic_flags() argument
199 return smic->io->inputb(smic->io, 2); in read_smic_flags()
202 static inline unsigned char read_smic_status(struct si_sm_data *smic) in read_smic_status() argument
204 return smic->io->inputb(smic->io, 1); in read_smic_status()
207 static inline unsigned char read_smic_data(struct si_sm_data *smic) in read_smic_data() argument
209 return smic->io->inputb(smic->io, 0); in read_smic_data()
212 static inline void write_smic_flags(struct si_sm_data *smic, in write_smic_flags() argument
215 smic->io->outputb(smic->io, 2, flags); in write_smic_flags()
218 static inline void write_smic_control(struct si_sm_data *smic, in write_smic_control() argument
221 smic->io->outputb(smic->io, 1, control); in write_smic_control()
224 static inline void write_si_sm_data(struct si_sm_data *smic, in write_si_sm_data() argument
227 smic->io->outputb(smic->io, 0, data); in write_si_sm_data()
230 static inline void start_error_recovery(struct si_sm_data *smic, char *reason) in start_error_recovery() argument
232 (smic->error_retries)++; in start_error_recovery()
233 if (smic->error_retries > SMIC_MAX_ERROR_RETRIES) { in start_error_recovery()
237 smic->state = SMIC_HOSED; in start_error_recovery()
239 smic->write_count = smic->orig_write_count; in start_error_recovery()
240 smic->write_pos = 0; in start_error_recovery()
241 smic->read_pos = 0; in start_error_recovery()
242 smic->state = SMIC_START_OP; in start_error_recovery()
243 smic->smic_timeout = SMIC_RETRY_TIMEOUT; in start_error_recovery()
247 static inline void write_next_byte(struct si_sm_data *smic) in write_next_byte() argument
249 write_si_sm_data(smic, smic->write_data[smic->write_pos]); in write_next_byte()
250 (smic->write_pos)++; in write_next_byte()
251 (smic->write_count)--; in write_next_byte()
254 static inline void read_next_byte(struct si_sm_data *smic) in read_next_byte() argument
256 if (smic->read_pos >= MAX_SMIC_READ_SIZE) { in read_next_byte()
257 read_smic_data(smic); in read_next_byte()
258 smic->truncated = 1; in read_next_byte()
260 smic->read_data[smic->read_pos] = read_smic_data(smic); in read_next_byte()
261 smic->read_pos++; in read_next_byte()
336 static enum si_sm_result smic_event(struct si_sm_data *smic, long time) in smic_event() argument
342 if (smic->state == SMIC_HOSED) { in smic_event()
343 init_smic_data(smic, smic->io); in smic_event()
346 if (smic->state != SMIC_IDLE) { in smic_event()
351 smic->smic_timeout, time); in smic_event()
357 smic->smic_timeout -= time; in smic_event()
358 if (smic->smic_timeout < 0) { in smic_event()
359 start_error_recovery(smic, "smic timed out."); in smic_event()
364 flags = read_smic_flags(smic); in smic_event()
368 status = read_smic_status(smic); in smic_event()
373 smic->state, flags, status); in smic_event()
375 switch (smic->state) { in smic_event()
384 write_smic_control(smic, SMIC_CC_SMS_GET_STATUS); in smic_event()
385 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
386 smic->state = SMIC_OP_OK; in smic_event()
392 start_error_recovery(smic, in smic_event()
398 write_smic_control(smic, SMIC_CC_SMS_WR_START); in smic_event()
399 write_next_byte(smic); in smic_event()
400 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
401 smic->state = SMIC_WRITE_START; in smic_event()
406 start_error_recovery(smic, in smic_event()
416 if (smic->write_count == 1) { in smic_event()
418 write_smic_control(smic, SMIC_CC_SMS_WR_END); in smic_event()
419 smic->state = SMIC_WRITE_END; in smic_event()
421 write_smic_control(smic, SMIC_CC_SMS_WR_NEXT); in smic_event()
422 smic->state = SMIC_WRITE_NEXT; in smic_event()
424 write_next_byte(smic); in smic_event()
425 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
432 start_error_recovery(smic, in smic_event()
439 if (smic->write_count == 1) { in smic_event()
440 write_smic_control(smic, SMIC_CC_SMS_WR_END); in smic_event()
441 smic->state = SMIC_WRITE_END; in smic_event()
443 write_smic_control(smic, SMIC_CC_SMS_WR_NEXT); in smic_event()
444 smic->state = SMIC_WRITE_NEXT; in smic_event()
446 write_next_byte(smic); in smic_event()
447 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
454 start_error_recovery(smic, in smic_event()
460 data = read_smic_data(smic); in smic_event()
465 start_error_recovery(smic, in smic_event()
470 smic->state = SMIC_WRITE2READ; in smic_event()
479 write_smic_control(smic, SMIC_CC_SMS_RD_START); in smic_event()
480 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
481 smic->state = SMIC_READ_START; in smic_event()
488 start_error_recovery(smic, in smic_event()
494 read_next_byte(smic); in smic_event()
495 write_smic_control(smic, SMIC_CC_SMS_RD_NEXT); in smic_event()
496 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
497 smic->state = SMIC_READ_NEXT; in smic_event()
509 read_next_byte(smic); in smic_event()
510 write_smic_control(smic, SMIC_CC_SMS_RD_END); in smic_event()
511 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
512 smic->state = SMIC_READ_END; in smic_event()
516 read_next_byte(smic); in smic_event()
517 write_smic_control(smic, SMIC_CC_SMS_RD_NEXT); in smic_event()
518 write_smic_flags(smic, flags | SMIC_FLAG_BSY); in smic_event()
519 smic->state = SMIC_READ_NEXT; in smic_event()
525 smic, in smic_event()
534 start_error_recovery(smic, in smic_event()
539 data = read_smic_data(smic); in smic_event()
545 start_error_recovery(smic, in smic_event()
550 smic->state = SMIC_IDLE; in smic_event()
555 init_smic_data(smic, smic->io); in smic_event()
560 printk(KERN_DEBUG "smic->state = %d\n", smic->state); in smic_event()
561 start_error_recovery(smic, "state = UNKNOWN"); in smic_event()
565 smic->smic_timeout = SMIC_RETRY_TIMEOUT; in smic_event()
569 static int smic_detect(struct si_sm_data *smic) in smic_detect() argument
577 if (read_smic_flags(smic) == 0xff) in smic_detect()