Lines Matching refs:scom

145 static int put_indirect_scom_form0(struct scom_device *scom, uint64_t value,
156 rc = __put_scom(scom, ind_data, ind_addr, status);
160 rc = __get_scom(scom, &ind_data, addr, status);
170 static int put_indirect_scom_form1(struct scom_device *scom, uint64_t value,
180 return __put_scom(scom, ind_data, ind_addr, status);
183 static int get_indirect_scom_form0(struct scom_device *scom, uint64_t *value,
191 rc = __put_scom(scom, ind_data, ind_addr, status);
195 rc = __get_scom(scom, &ind_data, addr, status);
206 static int raw_put_scom(struct scom_device *scom, uint64_t value,
211 return put_indirect_scom_form1(scom, value, addr, status);
213 return put_indirect_scom_form0(scom, value, addr, status);
215 return __put_scom(scom, value, addr, status);
218 static int raw_get_scom(struct scom_device *scom, uint64_t *value,
224 return get_indirect_scom_form0(scom, value, addr, status);
226 return __get_scom(scom, value, addr, status);
229 static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status)
234 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
247 static int handle_pib_status(struct scom_device *scom, uint8_t status)
257 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
275 static int put_scom(struct scom_device *scom, uint64_t value,
281 rc = raw_put_scom(scom, value, addr, &status);
285 rc = handle_fsi2pib_status(scom, status);
289 return handle_pib_status(scom,
294 static int get_scom(struct scom_device *scom, uint64_t *value,
300 rc = raw_get_scom(scom, value, addr, &status);
304 rc = handle_fsi2pib_status(scom, status);
308 return handle_pib_status(scom,
316 struct scom_device *scom = filep->private_data;
317 struct device *dev = &scom->fsi_dev->dev;
324 mutex_lock(&scom->lock);
325 if (scom->dead)
328 rc = get_scom(scom, &val, *offset);
329 mutex_unlock(&scom->lock);
346 struct scom_device *scom = filep->private_data;
347 struct device *dev = &scom->fsi_dev->dev;
359 mutex_lock(&scom->lock);
360 if (scom->dead)
363 rc = put_scom(scom, val, *offset);
364 mutex_unlock(&scom->lock);
404 static int scom_raw_read(struct scom_device *scom, void __user *argp)
413 rc = raw_get_scom(scom, &acc.data, acc.addr, &status);
422 static int scom_raw_write(struct scom_device *scom, void __user *argp)
433 rc = raw_get_scom(scom, &prev_data, acc.addr, &status);
443 rc = raw_put_scom(scom, data, acc.addr, &status);
453 static int scom_reset(struct scom_device *scom, void __user *argp)
461 rc = fsi_device_write(scom->fsi_dev, SCOM_PIB_RESET_REG, &dummy,
464 rc = fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
469 static int scom_check(struct scom_device *scom, void __user *argp)
477 struct scom_device *scom = file->private_data;
481 mutex_lock(&scom->lock);
482 if (scom->dead) {
483 mutex_unlock(&scom->lock);
488 rc = scom_check(scom, argp);
491 rc = scom_raw_read(scom, argp);
494 rc = scom_raw_write(scom, argp);
497 rc = scom_reset(scom, argp);
500 mutex_unlock(&scom->lock);
506 struct scom_device *scom = container_of(inode->i_cdev, struct scom_device, cdev);
508 file->private_data = scom;
524 struct scom_device *scom = container_of(dev, struct scom_device, dev);
526 put_device(&scom->fsi_dev->dev);
527 kfree(scom);
533 struct scom_device *scom;
536 scom = kzalloc(sizeof(*scom), GFP_KERNEL);
537 if (!scom)
539 dev_set_drvdata(dev, scom);
540 mutex_init(&scom->lock);
544 kfree(scom);
547 scom->fsi_dev = fsi_dev;
550 scom->dev.type = &fsi_cdev_type;
551 scom->dev.parent = dev;
552 scom->dev.release = scom_free;
553 device_initialize(&scom->dev);
556 rc = fsi_get_new_minor(fsi_dev, fsi_dev_scom, &scom->dev.devt, &didx);
560 dev_set_name(&scom->dev, "scom%d", didx);
561 cdev_init(&scom->cdev, &scom_fops);
562 rc = cdev_device_add(&scom->cdev, &scom->dev);
565 rc, dev_name(&scom->dev));
571 fsi_free_minor(scom->dev.devt);
573 put_device(&scom->dev);
579 struct scom_device *scom = dev_get_drvdata(dev);
581 mutex_lock(&scom->lock);
582 scom->dead = true;
583 mutex_unlock(&scom->lock);
584 cdev_device_del(&scom->cdev, &scom->dev);
585 fsi_free_minor(scom->dev.devt);
586 put_device(&scom->dev);
608 .name = "scom",