pnpbios.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * pnpbios.h - contains local definitions
  4. */
  5. /*
  6. * Include file for the interface to a PnP BIOS
  7. *
  8. * Original BIOS code (C) 1998 Christian Schmidt (chr.schmidt@tu-bs.de)
  9. * PnP handler parts (c) 1998 Tom Lees <tom@lpsg.demon.co.uk>
  10. * Minor reorganizations by David Hinds <dahinds@users.sourceforge.net>
  11. */
  12. /*
  13. * Return codes
  14. */
  15. #define PNP_SUCCESS 0x00
  16. #define PNP_NOT_SET_STATICALLY 0x7f
  17. #define PNP_UNKNOWN_FUNCTION 0x81
  18. #define PNP_FUNCTION_NOT_SUPPORTED 0x82
  19. #define PNP_INVALID_HANDLE 0x83
  20. #define PNP_BAD_PARAMETER 0x84
  21. #define PNP_SET_FAILED 0x85
  22. #define PNP_EVENTS_NOT_PENDING 0x86
  23. #define PNP_SYSTEM_NOT_DOCKED 0x87
  24. #define PNP_NO_ISA_PNP_CARDS 0x88
  25. #define PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89
  26. #define PNP_CONFIG_CHANGE_FAILED_NO_BATTERY 0x8a
  27. #define PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT 0x8b
  28. #define PNP_BUFFER_TOO_SMALL 0x8c
  29. #define PNP_USE_ESCD_SUPPORT 0x8d
  30. #define PNP_MESSAGE_NOT_SUPPORTED 0x8e
  31. #define PNP_HARDWARE_ERROR 0x8f
  32. #define ESCD_SUCCESS 0x00
  33. #define ESCD_IO_ERROR_READING 0x55
  34. #define ESCD_INVALID 0x56
  35. #define ESCD_BUFFER_TOO_SMALL 0x59
  36. #define ESCD_NVRAM_TOO_SMALL 0x5a
  37. #define ESCD_FUNCTION_NOT_SUPPORTED 0x81
  38. /*
  39. * Events that can be received by "get event"
  40. */
  41. #define PNPEV_ABOUT_TO_CHANGE_CONFIG 0x0001
  42. #define PNPEV_DOCK_CHANGED 0x0002
  43. #define PNPEV_SYSTEM_DEVICE_CHANGED 0x0003
  44. #define PNPEV_CONFIG_CHANGED_FAILED 0x0004
  45. #define PNPEV_UNKNOWN_SYSTEM_EVENT 0xffff
  46. /* 0x8000 through 0xfffe are OEM defined */
  47. /*
  48. * Messages that should be sent through "send message"
  49. */
  50. #define PNPMSG_OK 0x00
  51. #define PNPMSG_ABORT 0x01
  52. #define PNPMSG_UNDOCK_DEFAULT_ACTION 0x40
  53. #define PNPMSG_POWER_OFF 0x41
  54. #define PNPMSG_PNP_OS_ACTIVE 0x42
  55. #define PNPMSG_PNP_OS_INACTIVE 0x43
  56. /*
  57. * Plug and Play BIOS flags
  58. */
  59. #define PNPBIOS_NO_DISABLE 0x0001
  60. #define PNPBIOS_NO_CONFIG 0x0002
  61. #define PNPBIOS_OUTPUT 0x0004
  62. #define PNPBIOS_INPUT 0x0008
  63. #define PNPBIOS_BOOTABLE 0x0010
  64. #define PNPBIOS_DOCK 0x0020
  65. #define PNPBIOS_REMOVABLE 0x0040
  66. #define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000)
  67. #define pnpbios_is_dynamic(x) ((x)->flags & 0x0080)
  68. /*
  69. * Function Parameters
  70. */
  71. #define PNPMODE_STATIC 1
  72. #define PNPMODE_DYNAMIC 0
  73. /* 0x8000 through 0xffff are OEM defined */
  74. #pragma pack(1)
  75. struct pnp_dev_node_info {
  76. __u16 no_nodes;
  77. __u16 max_node_size;
  78. };
  79. struct pnp_docking_station_info {
  80. __u32 location_id;
  81. __u32 serial;
  82. __u16 capabilities;
  83. };
  84. struct pnp_isa_config_struc {
  85. __u8 revision;
  86. __u8 no_csns;
  87. __u16 isa_rd_data_port;
  88. __u16 reserved;
  89. };
  90. struct escd_info_struc {
  91. __u16 min_escd_write_size;
  92. __u16 escd_size;
  93. __u32 nv_storage_base;
  94. };
  95. struct pnp_bios_node {
  96. __u16 size;
  97. __u8 handle;
  98. __u32 eisa_id;
  99. __u8 type_code[3];
  100. __u16 flags;
  101. __u8 data[];
  102. };
  103. #pragma pack()
  104. /* non-exported */
  105. extern struct pnp_dev_node_info node_info;
  106. extern int pnp_bios_dev_node_info(struct pnp_dev_node_info *data);
  107. extern int pnp_bios_get_dev_node(u8 *nodenum, char config,
  108. struct pnp_bios_node *data);
  109. extern int pnp_bios_set_dev_node(u8 nodenum, char config,
  110. struct pnp_bios_node *data);
  111. extern int pnp_bios_get_stat_res(char *info);
  112. extern int pnp_bios_isapnp_config(struct pnp_isa_config_struc *data);
  113. extern int pnp_bios_escd_info(struct escd_info_struc *data);
  114. extern int pnp_bios_read_escd(char *data, u32 nvram_base);
  115. extern int pnp_bios_dock_station_info(struct pnp_docking_station_info *data);
  116. #pragma pack(1)
  117. union pnp_bios_install_struct {
  118. struct {
  119. u32 signature; /* "$PnP" */
  120. u8 version; /* in BCD */
  121. u8 length; /* length in bytes, currently 21h */
  122. u16 control; /* system capabilities */
  123. u8 checksum; /* all bytes must add up to 0 */
  124. u32 eventflag; /* phys. address of the event flag */
  125. u16 rmoffset; /* real mode entry point */
  126. u16 rmcseg;
  127. u16 pm16offset; /* 16 bit protected mode entry */
  128. u32 pm16cseg;
  129. u32 deviceID; /* EISA encoded system ID or 0 */
  130. u16 rmdseg; /* real mode data segment */
  131. u32 pm16dseg; /* 16 bit pm data segment base */
  132. } fields;
  133. char chars[0x21]; /* To calculate the checksum */
  134. };
  135. #pragma pack()
  136. extern int pnp_bios_present(void);
  137. extern int pnpbios_dont_use_current_config;
  138. extern int pnpbios_parse_data_stream(struct pnp_dev *dev, struct pnp_bios_node * node);
  139. extern int pnpbios_read_resources_from_node(struct pnp_dev *dev, struct pnp_bios_node *node);
  140. extern int pnpbios_write_resources_to_node(struct pnp_dev *dev, struct pnp_bios_node *node);
  141. extern void pnpid32_to_pnpid(u32 id, char *str);
  142. extern void pnpbios_print_status(const char * module, u16 status);
  143. extern void pnpbios_calls_init(union pnp_bios_install_struct * header);
  144. #ifdef CONFIG_PNPBIOS_PROC_FS
  145. extern int pnpbios_interface_attach_device(struct pnp_bios_node * node);
  146. extern int pnpbios_proc_init (void);
  147. extern void pnpbios_proc_exit (void);
  148. #else
  149. static inline int pnpbios_interface_attach_device(struct pnp_bios_node * node) { return 0; }
  150. static inline int pnpbios_proc_init (void) { return 0; }
  151. static inline void pnpbios_proc_exit (void) { ; }
  152. #endif /* CONFIG_PNPBIOS_PROC_FS */