Lines Matching refs:scom

144 static int put_indirect_scom_form0(struct scom_device *scom, uint64_t value,  in put_indirect_scom_form0()  argument
155 rc = __put_scom(scom, ind_data, ind_addr, status); in put_indirect_scom_form0()
160 rc = __get_scom(scom, &ind_data, addr, status); in put_indirect_scom_form0()
174 static int put_indirect_scom_form1(struct scom_device *scom, uint64_t value, in put_indirect_scom_form1() argument
184 return __put_scom(scom, ind_data, ind_addr, status); in put_indirect_scom_form1()
187 static int get_indirect_scom_form0(struct scom_device *scom, uint64_t *value, in get_indirect_scom_form0() argument
195 rc = __put_scom(scom, ind_data, ind_addr, status); in get_indirect_scom_form0()
200 rc = __get_scom(scom, &ind_data, addr, status); in get_indirect_scom_form0()
216 static int raw_put_scom(struct scom_device *scom, uint64_t value, in raw_put_scom() argument
221 return put_indirect_scom_form1(scom, value, addr, status); in raw_put_scom()
223 return put_indirect_scom_form0(scom, value, addr, status); in raw_put_scom()
225 return __put_scom(scom, value, addr, status); in raw_put_scom()
228 static int raw_get_scom(struct scom_device *scom, uint64_t *value, in raw_get_scom() argument
234 return get_indirect_scom_form0(scom, value, addr, status); in raw_get_scom()
236 return __get_scom(scom, value, addr, status); in raw_get_scom()
239 static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status) in handle_fsi2pib_status() argument
244 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in handle_fsi2pib_status()
257 static int handle_pib_status(struct scom_device *scom, uint8_t status) in handle_pib_status() argument
267 fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in handle_pib_status()
285 static int put_scom(struct scom_device *scom, uint64_t value, in put_scom() argument
291 rc = raw_put_scom(scom, value, addr, &status); in put_scom()
295 rc = handle_fsi2pib_status(scom, status); in put_scom()
299 return handle_pib_status(scom, in put_scom()
304 static int get_scom(struct scom_device *scom, uint64_t *value, in get_scom() argument
310 rc = raw_get_scom(scom, value, addr, &status); in get_scom()
314 rc = handle_fsi2pib_status(scom, status); in get_scom()
318 return handle_pib_status(scom, in get_scom()
326 struct scom_device *scom = filep->private_data; in scom_read() local
327 struct device *dev = &scom->fsi_dev->dev; in scom_read()
334 mutex_lock(&scom->lock); in scom_read()
335 if (scom->dead) in scom_read()
338 rc = get_scom(scom, &val, *offset); in scom_read()
339 mutex_unlock(&scom->lock); in scom_read()
356 struct scom_device *scom = filep->private_data; in scom_write() local
357 struct device *dev = &scom->fsi_dev->dev; in scom_write()
369 mutex_lock(&scom->lock); in scom_write()
370 if (scom->dead) in scom_write()
373 rc = put_scom(scom, val, *offset); in scom_write()
374 mutex_unlock(&scom->lock); in scom_write()
414 static int scom_raw_read(struct scom_device *scom, void __user *argp) in scom_raw_read() argument
423 rc = raw_get_scom(scom, &acc.data, acc.addr, &status); in scom_raw_read()
432 static int scom_raw_write(struct scom_device *scom, void __user *argp) in scom_raw_write() argument
443 rc = raw_get_scom(scom, &prev_data, acc.addr, &status); in scom_raw_write()
453 rc = raw_put_scom(scom, data, acc.addr, &status); in scom_raw_write()
463 static int scom_reset(struct scom_device *scom, void __user *argp) in scom_reset() argument
471 rc = fsi_device_write(scom->fsi_dev, SCOM_PIB_RESET_REG, &dummy, in scom_reset()
474 rc = fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, in scom_reset()
479 static int scom_check(struct scom_device *scom, void __user *argp) in scom_check() argument
487 struct scom_device *scom = file->private_data; in scom_ioctl() local
491 mutex_lock(&scom->lock); in scom_ioctl()
492 if (scom->dead) { in scom_ioctl()
493 mutex_unlock(&scom->lock); in scom_ioctl()
498 rc = scom_check(scom, argp); in scom_ioctl()
501 rc = scom_raw_read(scom, argp); in scom_ioctl()
504 rc = scom_raw_write(scom, argp); in scom_ioctl()
507 rc = scom_reset(scom, argp); in scom_ioctl()
510 mutex_unlock(&scom->lock); in scom_ioctl()
516 struct scom_device *scom = container_of(inode->i_cdev, struct scom_device, cdev); in scom_open() local
518 file->private_data = scom; in scom_open()
534 struct scom_device *scom = container_of(dev, struct scom_device, dev); in scom_free() local
536 put_device(&scom->fsi_dev->dev); in scom_free()
537 kfree(scom); in scom_free()
543 struct scom_device *scom; in scom_probe() local
546 scom = kzalloc(sizeof(*scom), GFP_KERNEL); in scom_probe()
547 if (!scom) in scom_probe()
549 dev_set_drvdata(dev, scom); in scom_probe()
550 mutex_init(&scom->lock); in scom_probe()
554 kfree(scom); in scom_probe()
557 scom->fsi_dev = fsi_dev; in scom_probe()
560 scom->dev.type = &fsi_cdev_type; in scom_probe()
561 scom->dev.parent = dev; in scom_probe()
562 scom->dev.release = scom_free; in scom_probe()
563 device_initialize(&scom->dev); in scom_probe()
566 rc = fsi_get_new_minor(fsi_dev, fsi_dev_scom, &scom->dev.devt, &didx); in scom_probe()
570 dev_set_name(&scom->dev, "scom%d", didx); in scom_probe()
571 cdev_init(&scom->cdev, &scom_fops); in scom_probe()
572 rc = cdev_device_add(&scom->cdev, &scom->dev); in scom_probe()
575 rc, dev_name(&scom->dev)); in scom_probe()
581 fsi_free_minor(scom->dev.devt); in scom_probe()
583 put_device(&scom->dev); in scom_probe()
589 struct scom_device *scom = dev_get_drvdata(dev); in scom_remove() local
591 mutex_lock(&scom->lock); in scom_remove()
592 scom->dead = true; in scom_remove()
593 mutex_unlock(&scom->lock); in scom_remove()
594 cdev_device_del(&scom->cdev, &scom->dev); in scom_remove()
595 fsi_free_minor(scom->dev.devt); in scom_remove()
596 put_device(&scom->dev); in scom_remove()