microcode.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #ifndef ASM_X86__MICROCODE_H
  2. #define ASM_X86__MICROCODE_H
  3. extern int microcode_init(void *opaque, struct module *module);
  4. extern void microcode_exit(void);
  5. struct cpu_signature;
  6. struct device;
  7. struct microcode_ops {
  8. int (*request_microcode_user) (int cpu, const void __user *buf, size_t size);
  9. int (*request_microcode_fw) (int cpu, struct device *device);
  10. void (*apply_microcode) (int cpu);
  11. int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
  12. void (*microcode_fini_cpu) (int cpu);
  13. };
  14. struct microcode_header_intel {
  15. unsigned int hdrver;
  16. unsigned int rev;
  17. unsigned int date;
  18. unsigned int sig;
  19. unsigned int cksum;
  20. unsigned int ldrver;
  21. unsigned int pf;
  22. unsigned int datasize;
  23. unsigned int totalsize;
  24. unsigned int reserved[3];
  25. };
  26. struct microcode_intel {
  27. struct microcode_header_intel hdr;
  28. unsigned int bits[0];
  29. };
  30. /* microcode format is extended from prescott processors */
  31. struct extended_signature {
  32. unsigned int sig;
  33. unsigned int pf;
  34. unsigned int cksum;
  35. };
  36. struct extended_sigtable {
  37. unsigned int count;
  38. unsigned int cksum;
  39. unsigned int reserved[3];
  40. struct extended_signature sigs[0];
  41. };
  42. struct equiv_cpu_entry {
  43. unsigned int installed_cpu;
  44. unsigned int fixed_errata_mask;
  45. unsigned int fixed_errata_compare;
  46. unsigned int equiv_cpu;
  47. };
  48. struct microcode_header_amd {
  49. unsigned int data_code;
  50. unsigned int patch_id;
  51. unsigned char mc_patch_data_id[2];
  52. unsigned char mc_patch_data_len;
  53. unsigned char init_flag;
  54. unsigned int mc_patch_data_checksum;
  55. unsigned int nb_dev_id;
  56. unsigned int sb_dev_id;
  57. unsigned char processor_rev_id[2];
  58. unsigned char nb_rev_id;
  59. unsigned char sb_rev_id;
  60. unsigned char bios_api_rev;
  61. unsigned char reserved1[3];
  62. unsigned int match_reg[8];
  63. };
  64. struct microcode_amd {
  65. struct microcode_header_amd hdr;
  66. unsigned int mpb[0];
  67. };
  68. struct cpu_signature {
  69. unsigned int sig;
  70. unsigned int pf;
  71. unsigned int rev;
  72. };
  73. struct ucode_cpu_info {
  74. struct cpu_signature cpu_sig;
  75. int valid;
  76. union {
  77. struct microcode_intel *mc_intel;
  78. struct microcode_amd *mc_amd;
  79. void *valid_mc;
  80. } mc;
  81. };
  82. extern struct ucode_cpu_info ucode_cpu_info[];
  83. #endif /* ASM_X86__MICROCODE_H */