smic              102 drivers/char/ipmi/ipmi_smic_sm.c static unsigned int init_smic_data(struct si_sm_data *smic,
smic              105 drivers/char/ipmi/ipmi_smic_sm.c 	smic->state = SMIC_IDLE;
smic              106 drivers/char/ipmi/ipmi_smic_sm.c 	smic->io = io;
smic              107 drivers/char/ipmi/ipmi_smic_sm.c 	smic->write_pos = 0;
smic              108 drivers/char/ipmi/ipmi_smic_sm.c 	smic->write_count = 0;
smic              109 drivers/char/ipmi/ipmi_smic_sm.c 	smic->orig_write_count = 0;
smic              110 drivers/char/ipmi/ipmi_smic_sm.c 	smic->read_pos = 0;
smic              111 drivers/char/ipmi/ipmi_smic_sm.c 	smic->error_retries = 0;
smic              112 drivers/char/ipmi/ipmi_smic_sm.c 	smic->truncated = 0;
smic              113 drivers/char/ipmi/ipmi_smic_sm.c 	smic->smic_timeout = SMIC_RETRY_TIMEOUT;
smic              119 drivers/char/ipmi/ipmi_smic_sm.c static int start_smic_transaction(struct si_sm_data *smic,
smic              129 drivers/char/ipmi/ipmi_smic_sm.c 	if ((smic->state != SMIC_IDLE) && (smic->state != SMIC_HOSED))
smic              138 drivers/char/ipmi/ipmi_smic_sm.c 	smic->error_retries = 0;
smic              139 drivers/char/ipmi/ipmi_smic_sm.c 	memcpy(smic->write_data, data, size);
smic              140 drivers/char/ipmi/ipmi_smic_sm.c 	smic->write_count = size;
smic              141 drivers/char/ipmi/ipmi_smic_sm.c 	smic->orig_write_count = size;
smic              142 drivers/char/ipmi/ipmi_smic_sm.c 	smic->write_pos = 0;
smic              143 drivers/char/ipmi/ipmi_smic_sm.c 	smic->read_pos = 0;
smic              144 drivers/char/ipmi/ipmi_smic_sm.c 	smic->state = SMIC_START_OP;
smic              145 drivers/char/ipmi/ipmi_smic_sm.c 	smic->smic_timeout = SMIC_RETRY_TIMEOUT;
smic              149 drivers/char/ipmi/ipmi_smic_sm.c static int smic_get_result(struct si_sm_data *smic,
smic              156 drivers/char/ipmi/ipmi_smic_sm.c 		for (i = 0; i < smic->read_pos; i++)
smic              157 drivers/char/ipmi/ipmi_smic_sm.c 			pr_cont(" %02x", smic->read_data[i]);
smic              160 drivers/char/ipmi/ipmi_smic_sm.c 	if (length < smic->read_pos) {
smic              161 drivers/char/ipmi/ipmi_smic_sm.c 		smic->read_pos = length;
smic              162 drivers/char/ipmi/ipmi_smic_sm.c 		smic->truncated = 1;
smic              164 drivers/char/ipmi/ipmi_smic_sm.c 	memcpy(data, smic->read_data, smic->read_pos);
smic              166 drivers/char/ipmi/ipmi_smic_sm.c 	if ((length >= 3) && (smic->read_pos < 3)) {
smic              168 drivers/char/ipmi/ipmi_smic_sm.c 		smic->read_pos = 3;
smic              170 drivers/char/ipmi/ipmi_smic_sm.c 	if (smic->truncated) {
smic              172 drivers/char/ipmi/ipmi_smic_sm.c 		smic->truncated = 0;
smic              174 drivers/char/ipmi/ipmi_smic_sm.c 	return smic->read_pos;
smic              177 drivers/char/ipmi/ipmi_smic_sm.c static inline unsigned char read_smic_flags(struct si_sm_data *smic)
smic              179 drivers/char/ipmi/ipmi_smic_sm.c 	return smic->io->inputb(smic->io, 2);
smic              182 drivers/char/ipmi/ipmi_smic_sm.c static inline unsigned char read_smic_status(struct si_sm_data *smic)
smic              184 drivers/char/ipmi/ipmi_smic_sm.c 	return smic->io->inputb(smic->io, 1);
smic              187 drivers/char/ipmi/ipmi_smic_sm.c static inline unsigned char read_smic_data(struct si_sm_data *smic)
smic              189 drivers/char/ipmi/ipmi_smic_sm.c 	return smic->io->inputb(smic->io, 0);
smic              192 drivers/char/ipmi/ipmi_smic_sm.c static inline void write_smic_flags(struct si_sm_data *smic,
smic              195 drivers/char/ipmi/ipmi_smic_sm.c 	smic->io->outputb(smic->io, 2, flags);
smic              198 drivers/char/ipmi/ipmi_smic_sm.c static inline void write_smic_control(struct si_sm_data *smic,
smic              201 drivers/char/ipmi/ipmi_smic_sm.c 	smic->io->outputb(smic->io, 1, control);
smic              204 drivers/char/ipmi/ipmi_smic_sm.c static inline void write_si_sm_data(struct si_sm_data *smic,
smic              207 drivers/char/ipmi/ipmi_smic_sm.c 	smic->io->outputb(smic->io, 0, data);
smic              210 drivers/char/ipmi/ipmi_smic_sm.c static inline void start_error_recovery(struct si_sm_data *smic, char *reason)
smic              212 drivers/char/ipmi/ipmi_smic_sm.c 	(smic->error_retries)++;
smic              213 drivers/char/ipmi/ipmi_smic_sm.c 	if (smic->error_retries > SMIC_MAX_ERROR_RETRIES) {
smic              216 drivers/char/ipmi/ipmi_smic_sm.c 		smic->state = SMIC_HOSED;
smic              218 drivers/char/ipmi/ipmi_smic_sm.c 		smic->write_count = smic->orig_write_count;
smic              219 drivers/char/ipmi/ipmi_smic_sm.c 		smic->write_pos = 0;
smic              220 drivers/char/ipmi/ipmi_smic_sm.c 		smic->read_pos = 0;
smic              221 drivers/char/ipmi/ipmi_smic_sm.c 		smic->state = SMIC_START_OP;
smic              222 drivers/char/ipmi/ipmi_smic_sm.c 		smic->smic_timeout = SMIC_RETRY_TIMEOUT;
smic              226 drivers/char/ipmi/ipmi_smic_sm.c static inline void write_next_byte(struct si_sm_data *smic)
smic              228 drivers/char/ipmi/ipmi_smic_sm.c 	write_si_sm_data(smic, smic->write_data[smic->write_pos]);
smic              229 drivers/char/ipmi/ipmi_smic_sm.c 	(smic->write_pos)++;
smic              230 drivers/char/ipmi/ipmi_smic_sm.c 	(smic->write_count)--;
smic              233 drivers/char/ipmi/ipmi_smic_sm.c static inline void read_next_byte(struct si_sm_data *smic)
smic              235 drivers/char/ipmi/ipmi_smic_sm.c 	if (smic->read_pos >= MAX_SMIC_READ_SIZE) {
smic              236 drivers/char/ipmi/ipmi_smic_sm.c 		read_smic_data(smic);
smic              237 drivers/char/ipmi/ipmi_smic_sm.c 		smic->truncated = 1;
smic              239 drivers/char/ipmi/ipmi_smic_sm.c 		smic->read_data[smic->read_pos] = read_smic_data(smic);
smic              240 drivers/char/ipmi/ipmi_smic_sm.c 		smic->read_pos++;
smic              315 drivers/char/ipmi/ipmi_smic_sm.c static enum si_sm_result smic_event(struct si_sm_data *smic, long time)
smic              321 drivers/char/ipmi/ipmi_smic_sm.c 	if (smic->state == SMIC_HOSED) {
smic              322 drivers/char/ipmi/ipmi_smic_sm.c 		init_smic_data(smic, smic->io);
smic              325 drivers/char/ipmi/ipmi_smic_sm.c 	if (smic->state != SMIC_IDLE) {
smic              329 drivers/char/ipmi/ipmi_smic_sm.c 			       smic->smic_timeout, time);
smic              335 drivers/char/ipmi/ipmi_smic_sm.c 			smic->smic_timeout -= time;
smic              336 drivers/char/ipmi/ipmi_smic_sm.c 			if (smic->smic_timeout < 0) {
smic              337 drivers/char/ipmi/ipmi_smic_sm.c 				start_error_recovery(smic, "smic timed out.");
smic              342 drivers/char/ipmi/ipmi_smic_sm.c 	flags = read_smic_flags(smic);
smic              346 drivers/char/ipmi/ipmi_smic_sm.c 	status = read_smic_status(smic);
smic              349 drivers/char/ipmi/ipmi_smic_sm.c 		       smic->state, flags, status);
smic              351 drivers/char/ipmi/ipmi_smic_sm.c 	switch (smic->state) {
smic              360 drivers/char/ipmi/ipmi_smic_sm.c 		write_smic_control(smic, SMIC_CC_SMS_GET_STATUS);
smic              361 drivers/char/ipmi/ipmi_smic_sm.c 		write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              362 drivers/char/ipmi/ipmi_smic_sm.c 		smic->state = SMIC_OP_OK;
smic              368 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              374 drivers/char/ipmi/ipmi_smic_sm.c 		write_smic_control(smic, SMIC_CC_SMS_WR_START);
smic              375 drivers/char/ipmi/ipmi_smic_sm.c 		write_next_byte(smic);
smic              376 drivers/char/ipmi/ipmi_smic_sm.c 		write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              377 drivers/char/ipmi/ipmi_smic_sm.c 		smic->state = SMIC_WRITE_START;
smic              382 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              392 drivers/char/ipmi/ipmi_smic_sm.c 			if (smic->write_count == 1) {
smic              394 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_control(smic, SMIC_CC_SMS_WR_END);
smic              395 drivers/char/ipmi/ipmi_smic_sm.c 				smic->state = SMIC_WRITE_END;
smic              397 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_control(smic, SMIC_CC_SMS_WR_NEXT);
smic              398 drivers/char/ipmi/ipmi_smic_sm.c 				smic->state = SMIC_WRITE_NEXT;
smic              400 drivers/char/ipmi/ipmi_smic_sm.c 			write_next_byte(smic);
smic              401 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              408 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              415 drivers/char/ipmi/ipmi_smic_sm.c 			if (smic->write_count == 1) {
smic              416 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_control(smic, SMIC_CC_SMS_WR_END);
smic              417 drivers/char/ipmi/ipmi_smic_sm.c 				smic->state = SMIC_WRITE_END;
smic              419 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_control(smic, SMIC_CC_SMS_WR_NEXT);
smic              420 drivers/char/ipmi/ipmi_smic_sm.c 				smic->state = SMIC_WRITE_NEXT;
smic              422 drivers/char/ipmi/ipmi_smic_sm.c 			write_next_byte(smic);
smic              423 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              430 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              436 drivers/char/ipmi/ipmi_smic_sm.c 		data = read_smic_data(smic);
smic              441 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              446 drivers/char/ipmi/ipmi_smic_sm.c 			smic->state = SMIC_WRITE2READ;
smic              455 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_control(smic, SMIC_CC_SMS_RD_START);
smic              456 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              457 drivers/char/ipmi/ipmi_smic_sm.c 			smic->state = SMIC_READ_START;
smic              464 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              470 drivers/char/ipmi/ipmi_smic_sm.c 			read_next_byte(smic);
smic              471 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_control(smic, SMIC_CC_SMS_RD_NEXT);
smic              472 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              473 drivers/char/ipmi/ipmi_smic_sm.c 			smic->state = SMIC_READ_NEXT;
smic              485 drivers/char/ipmi/ipmi_smic_sm.c 			read_next_byte(smic);
smic              486 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_control(smic, SMIC_CC_SMS_RD_END);
smic              487 drivers/char/ipmi/ipmi_smic_sm.c 			write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              488 drivers/char/ipmi/ipmi_smic_sm.c 			smic->state = SMIC_READ_END;
smic              492 drivers/char/ipmi/ipmi_smic_sm.c 				read_next_byte(smic);
smic              493 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_control(smic, SMIC_CC_SMS_RD_NEXT);
smic              494 drivers/char/ipmi/ipmi_smic_sm.c 				write_smic_flags(smic, flags | SMIC_FLAG_BSY);
smic              495 drivers/char/ipmi/ipmi_smic_sm.c 				smic->state = SMIC_READ_NEXT;
smic              501 drivers/char/ipmi/ipmi_smic_sm.c 				smic,
smic              510 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              515 drivers/char/ipmi/ipmi_smic_sm.c 		data = read_smic_data(smic);
smic              521 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic,
smic              526 drivers/char/ipmi/ipmi_smic_sm.c 			smic->state = SMIC_IDLE;
smic              531 drivers/char/ipmi/ipmi_smic_sm.c 		init_smic_data(smic, smic->io);
smic              536 drivers/char/ipmi/ipmi_smic_sm.c 			printk(KERN_DEBUG "smic->state = %d\n", smic->state);
smic              537 drivers/char/ipmi/ipmi_smic_sm.c 			start_error_recovery(smic, "state = UNKNOWN");
smic              541 drivers/char/ipmi/ipmi_smic_sm.c 	smic->smic_timeout = SMIC_RETRY_TIMEOUT;
smic              545 drivers/char/ipmi/ipmi_smic_sm.c static int smic_detect(struct si_sm_data *smic)
smic              553 drivers/char/ipmi/ipmi_smic_sm.c 	if (read_smic_flags(smic) == 0xff)