sev-dev.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * AMD Platform Security Processor (PSP) interface driver
  4. *
  5. * Copyright (C) 2017-2019 Advanced Micro Devices, Inc.
  6. *
  7. * Author: Brijesh Singh <brijesh.singh@amd.com>
  8. */
  9. #ifndef __SEV_DEV_H__
  10. #define __SEV_DEV_H__
  11. #include <linux/device.h>
  12. #include <linux/spinlock.h>
  13. #include <linux/mutex.h>
  14. #include <linux/list.h>
  15. #include <linux/wait.h>
  16. #include <linux/dmapool.h>
  17. #include <linux/hw_random.h>
  18. #include <linux/bitops.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/irqreturn.h>
  21. #include <linux/dmaengine.h>
  22. #include <linux/psp-sev.h>
  23. #include <linux/miscdevice.h>
  24. #include <linux/capability.h>
  25. #define SEV_CMDRESP_CMD GENMASK(26, 16)
  26. #define SEV_CMD_COMPLETE BIT(1)
  27. #define SEV_CMDRESP_IOC BIT(0)
  28. struct sev_misc_dev {
  29. struct kref refcount;
  30. struct miscdevice misc;
  31. };
  32. struct sev_tio_status;
  33. struct sev_device {
  34. struct device *dev;
  35. struct psp_device *psp;
  36. void __iomem *io_regs;
  37. struct sev_vdata *vdata;
  38. unsigned int int_rcvd;
  39. wait_queue_head_t int_queue;
  40. struct sev_misc_dev *misc;
  41. u8 api_major;
  42. u8 api_minor;
  43. u8 build;
  44. void *cmd_buf;
  45. void *cmd_buf_backup;
  46. bool cmd_buf_active;
  47. bool cmd_buf_backup_active;
  48. bool snp_initialized;
  49. struct sev_user_data_status sev_plat_status;
  50. struct sev_user_data_snp_status snp_plat_status;
  51. struct snp_feature_info snp_feat_info_0;
  52. struct tsm_dev *tsmdev;
  53. struct sev_tio_status *tio_status;
  54. };
  55. int sev_dev_init(struct psp_device *psp);
  56. void sev_dev_destroy(struct psp_device *psp);
  57. int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret);
  58. void sev_pci_init(void);
  59. void sev_pci_exit(void);
  60. struct page *snp_alloc_hv_fixed_pages(unsigned int num_2mb_pages);
  61. void snp_free_hv_fixed_pages(struct page *page);
  62. void sev_tsm_init_locked(struct sev_device *sev, void *tio_status_page);
  63. void sev_tsm_uninit(struct sev_device *sev);
  64. int sev_tio_cmd_buffer_len(int cmd);
  65. #endif /* __SEV_DEV_H */