Lines Matching refs:pp

1077 	struct smu_private *pp;  in smu_open()  local
1080 pp = kzalloc(sizeof(struct smu_private), GFP_KERNEL); in smu_open()
1081 if (pp == 0) in smu_open()
1083 spin_lock_init(&pp->lock); in smu_open()
1084 pp->mode = smu_file_commands; in smu_open()
1085 init_waitqueue_head(&pp->wait); in smu_open()
1089 list_add(&pp->list, &smu_clist); in smu_open()
1091 file->private_data = pp; in smu_open()
1100 struct smu_private *pp = misc; in smu_user_cmd_done() local
1102 wake_up_all(&pp->wait); in smu_user_cmd_done()
1109 struct smu_private *pp = file->private_data; in smu_write() local
1114 if (pp->busy) in smu_write()
1119 pp->mode = smu_file_events; in smu_write()
1131 else if (pp->mode != smu_file_commands) in smu_write()
1136 spin_lock_irqsave(&pp->lock, flags); in smu_write()
1137 if (pp->busy) { in smu_write()
1138 spin_unlock_irqrestore(&pp->lock, flags); in smu_write()
1141 pp->busy = 1; in smu_write()
1142 pp->cmd.status = 1; in smu_write()
1143 spin_unlock_irqrestore(&pp->lock, flags); in smu_write()
1145 if (copy_from_user(pp->buffer, buf + sizeof(hdr), hdr.data_len)) { in smu_write()
1146 pp->busy = 0; 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()
1164 static ssize_t smu_read_command(struct file *file, struct smu_private *pp, in smu_read_command() argument
1172 if (!pp->busy) in smu_read_command()
1176 spin_lock_irqsave(&pp->lock, flags); in smu_read_command()
1177 if (pp->cmd.status == 1) { in smu_read_command()
1179 spin_unlock_irqrestore(&pp->lock, flags); in smu_read_command()
1182 add_wait_queue(&pp->wait, &wait); in smu_read_command()
1186 if (pp->cmd.status != 1) in smu_read_command()
1191 spin_unlock_irqrestore(&pp->lock, flags); in smu_read_command()
1193 spin_lock_irqsave(&pp->lock, flags); in smu_read_command()
1196 remove_wait_queue(&pp->wait, &wait); in smu_read_command()
1198 spin_unlock_irqrestore(&pp->lock, flags); 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()
1212 if (size && copy_to_user(buf + sizeof(hdr), pp->buffer, size)) in smu_read_command()
1214 pp->busy = 0; in smu_read_command()
1220 static ssize_t smu_read_events(struct file *file, struct smu_private *pp, in smu_read_events() argument
1232 struct smu_private *pp = file->private_data; in smu_read() local
1234 if (pp->mode == smu_file_commands) in smu_read()
1235 return smu_read_command(file, pp, buf, count); in smu_read()
1236 if (pp->mode == smu_file_events) in smu_read()
1237 return smu_read_events(file, pp, buf, count); in smu_read()
1244 struct smu_private *pp = file->private_data; in smu_fpoll() local
1248 if (pp == 0) in smu_fpoll()
1251 if (pp->mode == smu_file_commands) { in smu_fpoll()
1252 poll_wait(file, &pp->wait, wait); in smu_fpoll()
1254 spin_lock_irqsave(&pp->lock, flags); in smu_fpoll()
1255 if (pp->busy && pp->cmd.status != 1) in smu_fpoll()
1257 spin_unlock_irqrestore(&pp->lock, flags); in smu_fpoll()
1259 if (pp->mode == smu_file_events) { in smu_fpoll()
1267 struct smu_private *pp = file->private_data; in smu_release() local
1271 if (pp == 0) in smu_release()
1277 spin_lock_irqsave(&pp->lock, flags); in smu_release()
1278 pp->mode = smu_file_closing; in smu_release()
1279 busy = pp->busy; in smu_release()
1282 if (busy && pp->cmd.status == 1) { in smu_release()
1285 add_wait_queue(&pp->wait, &wait); in smu_release()
1288 if (pp->cmd.status != 1) in smu_release()
1290 spin_unlock_irqrestore(&pp->lock, flags); in smu_release()
1292 spin_lock_irqsave(&pp->lock, flags); in smu_release()
1295 remove_wait_queue(&pp->wait, &wait); in smu_release()
1297 spin_unlock_irqrestore(&pp->lock, flags); in smu_release()
1300 list_del(&pp->list); in smu_release()
1302 kfree(pp); in smu_release()