mca.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Header for Microchannel Architecture Bus
  3.  * Written by Martin Kolinek, February 1996
  4.  */
  5. #ifndef _LINUX_MCA_H
  6. #define _LINUX_MCA_H
  7. /* The detection of MCA bus is done in the real mode (using BIOS).
  8.  * The information is exported to the protected code, where this
  9.  * variable is set to one in case MCA bus was detected.
  10.  */
  11. #ifndef MCA_bus__is_a_macro
  12. extern int  MCA_bus;
  13. #endif
  14. /* Maximal number of MCA slots - actually, some machines have less, but
  15.  * they all have sufficient number of POS registers to cover 8.
  16.  */
  17. #define MCA_MAX_SLOT_NR  8
  18. /* MCA_NOTFOUND is an error condition.  The other two indicate
  19.  * motherboard POS registers contain the adapter.  They might be
  20.  * returned by the mca_find_adapter() function, and can be used as
  21.  * arguments to mca_read_stored_pos().  I'm not going to allow direct
  22.  * access to the motherboard registers until we run across an adapter
  23.  * that requires it.  We don't know enough about them to know if it's
  24.  * safe.
  25.  *
  26.  * See Documentation/mca.txt or one of the existing drivers for
  27.  * more information.
  28.  */
  29. #define MCA_NOTFOUND (-1)
  30. #define MCA_INTEGSCSI (MCA_MAX_SLOT_NR)
  31. #define MCA_INTEGVIDEO (MCA_MAX_SLOT_NR+1)
  32. #define MCA_MOTHERBOARD (MCA_MAX_SLOT_NR+2)
  33. /* Max number of adapters, including both slots and various integrated
  34.  * things.
  35.  */
  36. #define MCA_NUMADAPTERS (MCA_MAX_SLOT_NR+3)
  37. /* Returns the slot of the first enabled adapter matching id.  User can
  38.  * specify a starting slot beyond zero, to deal with detecting multiple
  39.  * devices.  Returns MCA_NOTFOUND if id not found.  Also checks the
  40.  * integrated adapters.
  41.  */
  42. extern int mca_find_adapter(int id, int start);
  43. extern int mca_find_unused_adapter(int id, int start);
  44. /* adapter state info - returns 0 if no */
  45. extern int mca_isadapter(int slot);
  46. extern int mca_isenabled(int slot);
  47. extern int mca_is_adapter_used(int slot);
  48. extern int mca_mark_as_used(int slot);
  49. extern void mca_mark_as_unused(int slot);
  50. /* gets a byte out of POS register (stored in memory) */
  51. extern unsigned char mca_read_stored_pos(int slot, int reg);
  52. /* This can be expanded later.  Right now, it gives us a way of
  53.  * getting meaningful information into the MCA_info structure,
  54.  * so we can have a more interesting /proc/mca.
  55.  */
  56. extern void mca_set_adapter_name(int slot, char* name);
  57. extern char* mca_get_adapter_name(int slot);
  58. /* This sets up an information callback for /proc/mca/slot?.  The
  59.  * function is called with the buffer, slot, and device pointer (or
  60.  * some equally informative context information, or nothing, if you
  61.  * prefer), and is expected to put useful information into the
  62.  * buffer.  The adapter name, id, and POS registers get printed
  63.  * before this is called though, so don't do it again.
  64.  *
  65.  * This should be called with a NULL procfn when a module
  66.  * unregisters, thus preventing kernel crashes and other such
  67.  * nastiness.
  68.  */
  69. typedef int (*MCA_ProcFn)(char* buf, int slot, void* dev);
  70. extern void mca_set_adapter_procfn(int slot, MCA_ProcFn, void* dev);
  71. /* These routines actually mess with the hardware POS registers.  They
  72.  * temporarily disable the device (and interrupts), so make sure you know
  73.  * what you're doing if you use them.  Furthermore, writing to a POS may
  74.  * result in two devices trying to share a resource, which in turn can
  75.  * result in multiple devices sharing memory spaces, IRQs, or even trashing
  76.  * hardware.  YOU HAVE BEEN WARNED.
  77.  *
  78.  * You can only access slots with this.  Motherboard registers are off
  79.  * limits.
  80.  */
  81. /* read a byte from the specified POS register. */
  82. extern unsigned char mca_read_pos(int slot, int reg);
  83. /* write a byte to the specified POS register. */
  84. extern void mca_write_pos(int slot, int reg, unsigned char byte);
  85. /* Should only be called by the NMI interrupt handler, this will do some
  86.  * fancy stuff to figure out what might have generated a NMI.
  87.  */
  88. extern void mca_handle_nmi(void);
  89. #endif /* _LINUX_MCA_H */