Lines Matching refs:pp

1081 	struct smu_private *pp;
1084 pp = kzalloc(sizeof(struct smu_private), GFP_KERNEL);
1085 if (!pp)
1087 spin_lock_init(&pp->lock);
1088 pp->mode = smu_file_commands;
1089 init_waitqueue_head(&pp->wait);
1093 list_add(&pp->list, &smu_clist);
1095 file->private_data = pp;
1104 struct smu_private *pp = misc;
1106 wake_up_all(&pp->wait);
1113 struct smu_private *pp = file->private_data;
1118 if (pp->busy)
1123 pp->mode = smu_file_events;
1135 else if (pp->mode != smu_file_commands)
1140 spin_lock_irqsave(&pp->lock, flags);
1141 if (pp->busy) {
1142 spin_unlock_irqrestore(&pp->lock, flags);
1145 pp->busy = 1;
1146 pp->cmd.status = 1;
1147 spin_unlock_irqrestore(&pp->lock, flags);
1149 if (copy_from_user(pp->buffer, buf + sizeof(hdr), hdr.data_len)) {
1150 pp->busy = 0;
1154 pp->cmd.cmd = hdr.cmd;
1155 pp->cmd.data_len = hdr.data_len;
1156 pp->cmd.reply_len = SMU_MAX_DATA;
1157 pp->cmd.data_buf = pp->buffer;
1158 pp->cmd.reply_buf = pp->buffer;
1159 pp->cmd.done = smu_user_cmd_done;
1160 pp->cmd.misc = pp;
1161 rc = smu_queue_cmd(&pp->cmd);
1168 static ssize_t smu_read_command(struct file *file, struct smu_private *pp,
1176 if (!pp->busy)
1180 spin_lock_irqsave(&pp->lock, flags);
1181 if (pp->cmd.status == 1) {
1183 spin_unlock_irqrestore(&pp->lock, flags);
1186 add_wait_queue(&pp->wait, &wait);
1190 if (pp->cmd.status != 1)
1195 spin_unlock_irqrestore(&pp->lock, flags);
1197 spin_lock_irqsave(&pp->lock, flags);
1200 remove_wait_queue(&pp->wait, &wait);
1202 spin_unlock_irqrestore(&pp->lock, flags);
1205 if (pp->cmd.status != 0)
1206 pp->cmd.reply_len = 0;
1207 size = sizeof(hdr) + pp->cmd.reply_len;
1211 hdr.status = pp->cmd.status;
1212 hdr.reply_len = pp->cmd.reply_len;
1216 if (size && copy_to_user(buf + sizeof(hdr), pp->buffer, size))
1218 pp->busy = 0;
1224 static ssize_t smu_read_events(struct file *file, struct smu_private *pp,
1236 struct smu_private *pp = file->private_data;
1238 if (pp->mode == smu_file_commands)
1239 return smu_read_command(file, pp, buf, count);
1240 if (pp->mode == smu_file_events)
1241 return smu_read_events(file, pp, buf, count);
1248 struct smu_private *pp = file->private_data;
1252 if (!pp)
1255 if (pp->mode == smu_file_commands) {
1256 poll_wait(file, &pp->wait, wait);
1258 spin_lock_irqsave(&pp->lock, flags);
1259 if (pp->busy && pp->cmd.status != 1)
1261 spin_unlock_irqrestore(&pp->lock, flags);
1263 if (pp->mode == smu_file_events) {
1271 struct smu_private *pp = file->private_data;
1275 if (!pp)
1281 spin_lock_irqsave(&pp->lock, flags);
1282 pp->mode = smu_file_closing;
1283 busy = pp->busy;
1286 if (busy && pp->cmd.status == 1) {
1289 add_wait_queue(&pp->wait, &wait);
1292 if (pp->cmd.status != 1)
1294 spin_unlock_irqrestore(&pp->lock, flags);
1296 spin_lock_irqsave(&pp->lock, flags);
1299 remove_wait_queue(&pp->wait, &wait);
1301 spin_unlock_irqrestore(&pp->lock, flags);
1304 list_del(&pp->list);
1306 kfree(pp);