Lines Matching refs:cmd

68 	u8 cmd;  member
112 struct smu_cmd *cmd; in smu_start_cmd() local
118 cmd = list_entry(smu->cmd_list.next, struct smu_cmd, link); in smu_start_cmd()
119 smu->cmd_cur = cmd; in smu_start_cmd()
120 list_del(&cmd->link); in smu_start_cmd()
122 DPRINTK("SMU: starting cmd %x, %d bytes data\n", cmd->cmd, in smu_start_cmd()
123 cmd->data_len); in smu_start_cmd()
124 DPRINTK("SMU: data buffer: %8ph\n", cmd->data_buf); in smu_start_cmd()
127 smu->cmd_buf->cmd = cmd->cmd; in smu_start_cmd()
128 smu->cmd_buf->length = cmd->data_len; in smu_start_cmd()
129 memcpy(smu->cmd_buf->data, cmd->data_buf, cmd->data_len); in smu_start_cmd()
163 struct smu_cmd *cmd; in smu_db_intr() local
164 void (*done)(struct smu_cmd *cmd, void *misc) = NULL; in smu_db_intr()
180 cmd = smu->cmd_cur; in smu_db_intr()
182 if (cmd == NULL) in smu_db_intr()
199 ack = (~cmd->cmd) & 0xff; in smu_db_intr()
200 if (ack != smu->cmd_buf->cmd) { in smu_db_intr()
202 ack, smu->cmd_buf->cmd); in smu_db_intr()
207 if (reply_len > cmd->reply_len) { in smu_db_intr()
210 reply_len, cmd->reply_len); in smu_db_intr()
211 reply_len = cmd->reply_len; in smu_db_intr()
213 cmd->reply_len = reply_len; in smu_db_intr()
214 if (cmd->reply_buf && reply_len) in smu_db_intr()
215 memcpy(cmd->reply_buf, smu->cmd_buf->data, reply_len); in smu_db_intr()
221 done = cmd->done; in smu_db_intr()
222 misc = cmd->misc; in smu_db_intr()
224 cmd->status = rc; in smu_db_intr()
236 done(cmd, misc); in smu_db_intr()
262 int smu_queue_cmd(struct smu_cmd *cmd) in smu_queue_cmd() argument
268 if (cmd->data_len > SMU_MAX_DATA || in smu_queue_cmd()
269 cmd->reply_len > SMU_MAX_DATA) in smu_queue_cmd()
272 cmd->status = 1; in smu_queue_cmd()
274 list_add_tail(&cmd->link, &smu->cmd_list); in smu_queue_cmd()
281 smu_spinwait_cmd(cmd); in smu_queue_cmd()
290 void (*done)(struct smu_cmd *cmd, void *misc), in smu_queue_simple() argument
293 struct smu_cmd *cmd = &scmd->cmd; in smu_queue_simple() local
301 cmd->cmd = command; in smu_queue_simple()
302 cmd->data_len = data_len; in smu_queue_simple()
303 cmd->data_buf = scmd->buffer; in smu_queue_simple()
304 cmd->reply_len = sizeof(scmd->buffer); in smu_queue_simple()
305 cmd->reply_buf = scmd->buffer; in smu_queue_simple()
306 cmd->done = done; in smu_queue_simple()
307 cmd->misc = misc; in smu_queue_simple()
314 return smu_queue_cmd(cmd); in smu_queue_simple()
333 void smu_done_complete(struct smu_cmd *cmd, void *misc) in smu_done_complete() argument
342 void smu_spinwait_cmd(struct smu_cmd *cmd) in smu_spinwait_cmd() argument
344 while(cmd->status == 1) in smu_spinwait_cmd()
366 cmd_buf->cmd = 0x8e; in smu_fill_set_rtc_cmd()
381 struct smu_simple_cmd cmd; in smu_get_rtc_time() local
388 rc = smu_queue_simple(&cmd, SMU_CMD_RTC_COMMAND, 1, NULL, NULL, in smu_get_rtc_time()
392 smu_spinwait_simple(&cmd); in smu_get_rtc_time()
394 time->tm_sec = bcd2hex(cmd.buffer[0]); in smu_get_rtc_time()
395 time->tm_min = bcd2hex(cmd.buffer[1]); in smu_get_rtc_time()
396 time->tm_hour = bcd2hex(cmd.buffer[2]); in smu_get_rtc_time()
397 time->tm_wday = bcd2hex(cmd.buffer[3]); in smu_get_rtc_time()
398 time->tm_mday = bcd2hex(cmd.buffer[4]); in smu_get_rtc_time()
399 time->tm_mon = bcd2hex(cmd.buffer[5]) - 1; in smu_get_rtc_time()
400 time->tm_year = bcd2hex(cmd.buffer[6]) + 100; in smu_get_rtc_time()
408 struct smu_simple_cmd cmd; in smu_set_rtc_time() local
414 rc = smu_queue_simple(&cmd, SMU_CMD_RTC_COMMAND, 8, NULL, NULL, in smu_set_rtc_time()
425 smu_spinwait_simple(&cmd); in smu_set_rtc_time()
433 struct smu_simple_cmd cmd; in smu_shutdown() local
438 if (smu_queue_simple(&cmd, SMU_CMD_POWER_COMMAND, 9, NULL, NULL, in smu_shutdown()
441 smu_spinwait_simple(&cmd); in smu_shutdown()
449 struct smu_simple_cmd cmd; in smu_restart() local
454 if (smu_queue_simple(&cmd, SMU_CMD_POWER_COMMAND, 8, NULL, NULL, in smu_restart()
457 smu_spinwait_simple(&cmd); in smu_restart()
700 static void smu_i2c_complete_command(struct smu_i2c_cmd *cmd, int fail) in smu_i2c_complete_command() argument
702 void (*done)(struct smu_i2c_cmd *cmd, void *misc) = cmd->done; in smu_i2c_complete_command()
703 void *misc = cmd->misc; in smu_i2c_complete_command()
707 if (!fail && cmd->read) { in smu_i2c_complete_command()
708 if (cmd->pdata[0] < 1) in smu_i2c_complete_command()
711 memcpy(cmd->info.data, &cmd->pdata[1], in smu_i2c_complete_command()
712 cmd->info.datalen); in smu_i2c_complete_command()
724 cmd->status = fail ? -EIO : 0; in smu_i2c_complete_command()
734 list_del(&cmd->link); in smu_i2c_complete_command()
737 list_add_tail(&cmd->scmd.link, &smu->cmd_list); in smu_i2c_complete_command()
745 done(cmd, misc); in smu_i2c_complete_command()
752 struct smu_i2c_cmd *cmd = smu->cmd_i2c_cur; in smu_i2c_retry() local
757 cmd->pdata[0] = 0xff; in smu_i2c_retry()
758 cmd->scmd.reply_len = sizeof(cmd->pdata); in smu_i2c_retry()
759 smu_queue_cmd(&cmd->scmd); in smu_i2c_retry()
765 struct smu_i2c_cmd *cmd = misc; in smu_i2c_low_completion() local
769 cmd->stage, scmd->status, cmd->pdata[0], scmd->reply_len); in smu_i2c_low_completion()
774 else if (cmd->read) { in smu_i2c_low_completion()
775 if (cmd->stage == 0) in smu_i2c_low_completion()
776 fail = cmd->pdata[0] != 0; in smu_i2c_low_completion()
778 fail = cmd->pdata[0] >= 0x80; in smu_i2c_low_completion()
780 fail = cmd->pdata[0] != 0; in smu_i2c_low_completion()
785 if (fail && --cmd->retries > 0) { in smu_i2c_low_completion()
787 BUG_ON(cmd != smu->cmd_i2c_cur); in smu_i2c_low_completion()
798 if (fail || cmd->stage != 0) { in smu_i2c_low_completion()
799 smu_i2c_complete_command(cmd, fail); in smu_i2c_low_completion()
806 scmd->reply_buf = cmd->pdata; in smu_i2c_low_completion()
807 scmd->reply_len = sizeof(cmd->pdata); in smu_i2c_low_completion()
808 scmd->data_buf = cmd->pdata; in smu_i2c_low_completion()
810 cmd->pdata[0] = 0; in smu_i2c_low_completion()
811 cmd->stage = 1; in smu_i2c_low_completion()
812 cmd->retries = 20; in smu_i2c_low_completion()
817 int smu_queue_i2c(struct smu_i2c_cmd *cmd) in smu_queue_i2c() argument
825 cmd->scmd.cmd = SMU_CMD_I2C_COMMAND; in smu_queue_i2c()
826 cmd->scmd.done = smu_i2c_low_completion; in smu_queue_i2c()
827 cmd->scmd.misc = cmd; in smu_queue_i2c()
828 cmd->scmd.reply_buf = cmd->pdata; in smu_queue_i2c()
829 cmd->scmd.reply_len = sizeof(cmd->pdata); in smu_queue_i2c()
830 cmd->scmd.data_buf = (u8 *)(char *)&cmd->info; in smu_queue_i2c()
831 cmd->scmd.status = 1; in smu_queue_i2c()
832 cmd->stage = 0; in smu_queue_i2c()
833 cmd->pdata[0] = 0xff; in smu_queue_i2c()
834 cmd->retries = 20; in smu_queue_i2c()
835 cmd->status = 1; in smu_queue_i2c()
840 cmd->info.caddr = cmd->info.devaddr; in smu_queue_i2c()
841 cmd->read = cmd->info.devaddr & 0x01; in smu_queue_i2c()
842 switch(cmd->info.type) { in smu_queue_i2c()
844 memset(&cmd->info.sublen, 0, 4); in smu_queue_i2c()
847 cmd->info.devaddr &= 0xfe; in smu_queue_i2c()
849 if (cmd->info.sublen > 3) in smu_queue_i2c()
858 if (cmd->read) { in smu_queue_i2c()
859 if (cmd->info.datalen > SMU_I2C_READ_MAX) in smu_queue_i2c()
861 memset(cmd->info.data, 0xff, cmd->info.datalen); in smu_queue_i2c()
862 cmd->scmd.data_len = 9; in smu_queue_i2c()
864 if (cmd->info.datalen > SMU_I2C_WRITE_MAX) in smu_queue_i2c()
866 cmd->scmd.data_len = 9 + cmd->info.datalen; in smu_queue_i2c()
871 cmd->read ? "read" : "write", cmd->info.datalen, in smu_queue_i2c()
872 cmd->info.bus, cmd->info.caddr, in smu_queue_i2c()
873 cmd->info.subaddr[0], cmd->info.type); in smu_queue_i2c()
881 smu->cmd_i2c_cur = cmd; in smu_queue_i2c()
882 list_add_tail(&cmd->scmd.link, &smu->cmd_list); in smu_queue_i2c()
886 list_add_tail(&cmd->link, &smu->cmd_i2c_list); in smu_queue_i2c()
900 struct smu_cmd cmd; in smu_read_datablock() local
912 cmd.cmd = SMU_CMD_MISC_ee_COMMAND; in smu_read_datablock()
913 cmd.data_len = 7; in smu_read_datablock()
914 cmd.data_buf = params; in smu_read_datablock()
915 cmd.reply_len = chunk; in smu_read_datablock()
916 cmd.reply_buf = dest; in smu_read_datablock()
917 cmd.done = smu_done_complete; in smu_read_datablock()
918 cmd.misc = &comp; in smu_read_datablock()
924 rc = smu_queue_cmd(&cmd); in smu_read_datablock()
928 if (cmd.status != 0) in smu_read_datablock()
930 if (cmd.reply_len != clen) { in smu_read_datablock()
933 cmd.reply_len, clen); in smu_read_datablock()
946 struct smu_simple_cmd cmd; in smu_create_sdb_partition() local
953 smu_queue_simple(&cmd, SMU_CMD_PARTITION_COMMAND, 2, in smu_create_sdb_partition()
958 cmd.cmd.status, cmd.cmd.reply_len); in smu_create_sdb_partition()
961 if (cmd.cmd.status != 0 || cmd.cmd.reply_len != 6) in smu_create_sdb_partition()
965 addr = *((u16 *)cmd.buffer); in smu_create_sdb_partition()
966 len = cmd.buffer[3] << 2; in smu_create_sdb_partition()
1068 struct smu_cmd cmd; member
1098 static void smu_user_cmd_done(struct smu_cmd *cmd, void *misc) in smu_user_cmd_done() argument
1123 part = __smu_get_sdb_partition(hdr.cmd, NULL, 1); in smu_write()
1142 pp->cmd.status = 1; in smu_write()
1150 pp->cmd.cmd = hdr.cmd; in smu_write()
1151 pp->cmd.data_len = hdr.data_len; in smu_write()
1152 pp->cmd.reply_len = SMU_MAX_DATA; in smu_write()
1153 pp->cmd.data_buf = pp->buffer; in smu_write()
1154 pp->cmd.reply_buf = pp->buffer; in smu_write()
1155 pp->cmd.done = smu_user_cmd_done; in smu_write()
1156 pp->cmd.misc = pp; in smu_write()
1157 rc = smu_queue_cmd(&pp->cmd); in smu_write()
1177 if (pp->cmd.status == 1) { in smu_read_command()
1186 if (pp->cmd.status != 1) in smu_read_command()
1201 if (pp->cmd.status != 0) in smu_read_command()
1202 pp->cmd.reply_len = 0; in smu_read_command()
1203 size = sizeof(hdr) + pp->cmd.reply_len; in smu_read_command()
1207 hdr.status = pp->cmd.status; in smu_read_command()
1208 hdr.reply_len = pp->cmd.reply_len; in smu_read_command()
1255 if (pp->busy && pp->cmd.status != 1) in smu_fpoll()
1282 if (busy && pp->cmd.status == 1) { in smu_release()
1288 if (pp->cmd.status != 1) in smu_release()